算法的本质
算法的本质是穷举
这个想法还没有想到更好的解释,暂时认可吧
算法分为数学算法和计算机算法
数学算法的研究者是算法工程师,如何将一个问题经过研究与分析,得出相应的数学公式及优化
计算机算法是用计算机的逻辑解决问题,本质是找到用计算机解决现实问题的方法,数据结构也是针对数据在计算机内存的存储方式的结构。
为了区分,不妨称算法工程师研究的算法为「数学算法」,称刷题面试的算法为「计算机算法」,我写的内容主要聚焦的是「计算机算法」
穷举有两个关键难点:无遗漏、无冗余。
遗漏,会直接导致答案出错;冗余,会拖慢算法的运行速度。所以,当你看到一道算法题,可以从这两个维度去思考:
1、如何穷举?即无遗漏地穷举所有可能解。
2、如何聪明地穷举?即避免所有冗余的计算,消耗尽可能少的资源求出答案。
不同类型的题目,难点是不同的,有的题目难在「如何穷举」,有的题目难在「如何聪明地穷举」。
数组/单链表系列算法
单链表常考的技巧就是双指针
1.判断单链表是否成环
2.双链表
二叉树系列算法
二叉树模型几乎是所有高级算法的基础,二叉树题目的递归解法可以分两类思路,第一类是遍历一遍二叉树得出答案,第二类是通过分解问题计算出答案,这两类思路分别对应着 回溯算法核心框架 和 动态规划核心框架。
小结
数据结构与算法研究是的计算机存储数据的结构及使用数据的方法,并对使用的效果进行有效的评估。从而使用计算机更有效来处理我们的数据,计算机的处理速度虽然快,但“穷举”的计算量更大,一个更好的算法可以提升成千上万倍的效率。