而数学的特点之一是系统性和完整性,不是为了某个具体的问题才去研究什么,反而经常是早已把某个问题研究透彻了才发现它的应用。
知识学习有3个阶段,第一阶段只是知道字面的意思,
第二阶段是理解,第三阶段是领悟。
前两个阶段只是被动学习别人创造的东西,第三个阶段是你可以创造类似的东西。
举点例子吧。比如排序方法有很多,冒泡插入快排等等。理解了本质之后就会发现这些排
序都是基于两两比较的排序,早期的排序方法其实就来源于生活中的现象,所以取得名字
都很生活化,例如“冒泡”和“插入”。而到了后期,比如快排,堆排序,这些方法很明显源
于理论的指导。比如基于两两比较的排序复杂度是不可能小于nlogn的这个证明。而桶排
序什么的就是基于非两两比较方法的排序。
比如图的邻接矩阵表示法,这个表示法十分的简单显然。但基于这个表示法就引伸出十字
链表这样的新的方法。
比如各种搜索,广度优先、深度优先就是最简单最显然的搜索方法(俗称穷举)。启发搜
索,A*,A+,贪心,这些都是基于最简单方法的剪支。动态规划则是在某些情况下,运
用cache去避免重复的计算,从而达到剪支的速度,但又没有剪支之后减少搜索空间导致
不一定能得到最优节的缺点。
所以,如果你能达到领悟的高度,就会发现算法本身也是逐层演进的,虽然这个过程并不
是包含严谨的数学推倒,所以并不是这么的显然。
先去读一下可计算型和计算复杂性,那里面的东西比较精炼,有算法的数学本质。
快排是技巧级别的东西。。。堆排序和快排之间的关系是应用级别的东西。
我也有这种困惑。
比如排序,可以证明复杂度最好是多少?
但是一个算法的提出,却不是推倒出来的。
比如快排,还有一些图算法,感觉这些东西想出来完全靠一些天才的灵光一闪。
算法就不是严密推演出来的,个人感觉只是牛人的天才想法总结在一起而已