一直想写点东西,对各个知识块做一个梳理、总结,只是因为太懒,迟迟没有动笔。我很喜欢算法,而且我的编程之路是从MIT《算法导论》开始的,所以就从算法写起吧。
为什么学习算法?借用Charles(《算法导论》作者之一)在第一堂课上的一段话:”If you want to be a good programmer, you just program every day for two years, you will be an excellent programmer. If you want to be a world-class programmer, you can program every day for ten years, or you can program every day for two years and take an algorithms class.”
很多人喜欢形象化、故事化的描述,这种方式很吸引人而且比较有趣,但是只有直观感受是不够的,算法之美在于严谨之美、细节之美,而概括性的描述恰恰掩盖了细节。如果只是想了解一下某种算法大致是怎么回事,阅读一些描述性的文章是一个不错的选择,可是,如果想实现、分析甚至是优化算法,那就逃不掉严格的数学论证。算法的求解过程很大程度上就是一步步的数学推导与证明。
提起数学,就不能不谈《高等数学》、《线性代数》、《概率统计》,这三门课在大学是理工科学生的必修课。why? 因为这三门课涉及的数学知识是所有科学技术的基础,计算机自然也不例外。这三门课的核心是什么?有哪些是学习算法必须要掌握的呢?