推荐《算法导论》,但不是一上来就看,我想强调的有如下几点:
(1)学习算法不是件易事,应该有一个系统化的学习过程;
(2)学习算法要有很好的数学基础,否则学到的算法只能是生搬硬套,遇到实际问题还是不会;(3)学习算法最好的两本书仍然是算法导论 (豆瓣)和算法设计 (豆瓣)。
不管是计算机专业,还是其它专业想自学算法,学习的路线大致是这样的:
阶段一:
基础数学课:微积分,线性代数,概率论
没有微积分极限,收敛等概念,怎么去理解算法中时间复杂度,空间复杂度的概念;不懂矩阵算法中的图算法怎么去入手,不懂概率论随机算法应该不好学,时间复杂度估计算不来。学习书籍可参考学校设的相关课程,概率论的话推荐一本书:概率论与数理统计 (豆瓣)。这三门基础课是一定要学好的。
阶段二:
计算机相关数学:离散数学,图论
离散数学里面有算法,计数,归纳等基本概念,图论里更是囊括了树,图和流的所有理论知识,这些是树,图,流等算法的基础。离散数学推荐书籍:离散数学及其应用 (豆瓣),图论推荐书籍:图论 (豆瓣)。
计算机相关:C语言,数据结构
数学毕竟只是理论,还得有实际的编程工具,推荐学一门入门的编程语言,C语言最佳(也有高校一上来就学C++或者java的,个人不推荐),还有数据结构更是重中之重,这是你能把树,图能用计算机语言表达出来的基础,我敢说,叫你实现一颗简单的二叉树,你都不一定能写出来,那你还谈学什么算法,数据结构推荐书籍:数据结构 (豆瓣),C语言和数据结构可以在学习上述数学知识之中穿插着一起学。
阶段三:
系统学习算法,啃《算法导论》吧
其实通过阶段一,阶段二的学习,已经基本掌握了算法相关的所有知识了,那还缺什么呢?系统学习算法,而《算法导论》就能很好的给我们一个学习算法的大框架,深入其中吧,你会发现上面讲的内容你是那么熟悉,但是你的收获又是那么多。在整个过程,可结合《算法设计》这本书一起学,《算法导论》看不懂内容的去《算法设计》上看,两本互补。
阶段四:
算法实践,思维扩展。
到这儿已经没有什么方法而言了,就是多练习,弥补不懂的知识,继续练习,练习题可参考网上的一些算法题集,如leetcode或者ACM题或者各大互联网公司笔试面试题。个人推荐两本书籍:编程珠玑 (豆瓣),编程之美 (豆瓣),两本书都有一定难度,但是如果前几个阶段都能做好的话,你获得的一定是趣味。
最后,还是要强调一点,也是我反复强调的,厚积才能薄发,不要浮躁,不要想着看一本书就把算法学好,算法是贯穿整个编程生涯的,毕竟这个式子不是说着玩的:程序=算法+数据结构。
希望大家能静下心来,从最基础的数学知识和数据结构学起,不要贪多,学扎实才是王道。希望大家都能把算法学好,能写出高质量的代码,与大家一同进步,共勉。
文章来源于互联网:程序员应该如何学习算法?

发表评论