数学与算法- 摘自水木

算法研究的本质特点之一是面向具体问题,有问题才有了对应的算法。 

而数学的特点之一是系统性和完整性,不是为了某个具体的问题才去研究什么,反而经常是早已把某个问题研究透彻了才发现它的应用。 


知识学习有3个阶段,第一阶段只是知道字面的意思, 
第二阶段是理解,第三阶段是领悟。 
前两个阶段只是被动学习别人创造的东西,第三个阶段是你可以创造类似的东西。 
  
举点例子吧。比如排序方法有很多,冒泡插入快排等等。理解了本质之后就会发现这些排 
序都是基于两两比较的排序,早期的排序方法其实就来源于生活中的现象,所以取得名字 
都很生活化,例如“冒泡”和“插入”。而到了后期,比如快排,堆排序,这些方法很明显源 
于理论的指导。比如基于两两比较的排序复杂度是不可能小于nlogn的这个证明。而桶排 
序什么的就是基于非两两比较方法的排序。 
  
比如图的邻接矩阵表示法,这个表示法十分的简单显然。但基于这个表示法就引伸出十字 
链表这样的新的方法。 
  
比如各种搜索,广度优先、深度优先就是最简单最显然的搜索方法(俗称穷举)。启发搜 
索,A*,A+,贪心,这些都是基于最简单方法的剪支。动态规划则是在某些情况下,运 
用cache去避免重复的计算,从而达到剪支的速度,但又没有剪支之后减少搜索空间导致 
不一定能得到最优节的缺点。 
  
所以,如果你能达到领悟的高度,就会发现算法本身也是逐层演进的,虽然这个过程并不 
是包含严谨的数学推倒,所以并不是这么的显然。 
  

先去读一下可计算型和计算复杂性,那里面的东西比较精炼,有算法的数学本质。 
快排是技巧级别的东西。。。堆排序和快排之间的关系是应用级别的东西。 


我也有这种困惑。 
比如排序,可以证明复杂度最好是多少? 
但是一个算法的提出,却不是推倒出来的。 
比如快排,还有一些图算法,感觉这些东西想出来完全靠一些天才的灵光一闪。
算法就不是严密推演出来的,个人感觉只是牛人的天才想法总结在一起而已 


阅读更多
文章标签: 算法 生活 cache
个人分类: 问题总结
想对作者说点什么? 我来说一句

概率与数理统计(公式)

2008年10月05日 883KB 下载

水木社区算法版主题整理1.rar

2009年08月13日 71KB 下载

水木社区Algorithm版精华区

2009年10月16日 518KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭