15-4 如何阅读《算法导论》

[15-4 如何阅读《算法导论》\_慕课网](https://coding.imooc.com/lesson/207.html#mid=23553)

文章读后感:算法是什么?宇宙是由无穷的原子构成,而地球生命物质是一种有序的集合状态,这个状态的形成就是算法,也就是通过一定步骤形成了一个东西。如何定义一个东西?我们用复杂度来定义,直觉上,一个东西越复杂我们认为智能程度越高(好像说错了),而算法就是实现这种复杂度的最快方法,这个算法就是智能。

15-4 如何阅读《算法导论》

如何阅读《算法导论》

《算法导论》是算法领域的“圣经”,但是,我个人其实并不建议每一个同学都通读它。

首先,谈学习材料,一定要谈学习者本身的水平。每一本教材(或者说每一本书)都对其阅读者拥有基础的假设。并不是说一本教材经典,就意味着他适用于所有的学习者。他只是针对他所假设的读者群体来说,是经典的,好的。但如果你不在这个阅读群体的范围里的话,他的经典程度一文不值。这就好比高等数学的教材都假设阅读者具有完备的高中代数知识,再经典的高等数学教材,对于小学生来说,都一文不值。因为小学生不是任何高等数学教材所假设的读者群体。

同理,《算法导论》的经典是毋庸置疑的。但是,我不建议算法的初学者学习这本教材。我认为《算法导论》面向的读者不是第一次接触算法和数据结构的同学。甚至极端一些,我不建议本科生,尤其是大一大二的计算机系同学阅读这本书。在这个阶段阅读这本书,只会让你对算法更恐惧,并形成错误的印象——算法中包含大量的数学推导证明。

事实上,对于《算法导论》中介绍的大量的算法复杂度的推导证明,都更属于计算机的另一个子领域的研究范畴:复杂性研究

本科水平大可不必理解这些证明过程,只需要对证明结果有一个感性的认识就可以。注意,我在这里也不是说要“背”结论,还是要对这些结论有一个感性的认识,比如对于快排,其时间复杂度为什么是O(nlogn)的,我认为理解到这个程度就够了:请问一路的快排的时空复杂度怎么计算呢?-慕课网Google到的快排时空复杂度的计算,涉及到很多数学定理,看的不太懂。老师你能从代码的实现中指icon-default.png?t=N7T8http://coding.imooc.com/learn/questiondetail/15858.html 这个程度离严谨的数学证明还差的很远,但是对于大多数人,已经足够了。

这就引出了我对大家阅读《算法导论》的建议:如果大家一定想读这本书,那么在第一遍,甚至是第二遍看算法导论的时候:请忽略其中的数学推导。事实上,对于算法导论,如果扔掉其中的数学推导,其厚度至少减少了一半,搞不好是3/4!

另外,《算法导论》不应该逐章去看,如果要配合这个课程学习的话,我建议以这个课程为主线,去找算法导论中和这个课程相应的章节辅助学习。可能对于一些算法,你会发现算法导论中的实现,和这个课程的实现,思路有所不同。这是一个非常好的训练。仔细比较,理解一下,这两种实现思路为什么不同?每一种实现都为什么能够正确的完成任务?对于算法导论中介绍的算法,由于是使用伪码描述的,还可以自己亲自实现一下其中的思路,也能够锻炼一下自己的编程能力。

最最重要的是,我认为对于本科生而言(或者将要面临面试的同学而言),算法导论最有价值而部分是其中的练习题!依然是,要把其中的数学习题刨去,算法导论中的实践练习,很多都不错!配合这个课程的相关章节,扫一遍算法导论中的相关编程实践练习题,是非常有意义的。虽然《算法导论》本身没有习题答案,不过由于这本教材太过经典,在网上近乎可以搜索到其中每一个问题的讨论,这个过程能够让你对很多算法和数据结构,包括相应的变种问题和可以解决的问题的范畴,有一个更加深入的认识!我强烈推荐。

最后,如果你发现你对基本算法已经有了相当的理解,同时对算法背后的数学有兴趣,可以再扫一遍算法导论,配合其中的数学证明学习。不同的人能够从数学的学习中获得不同的乐趣。也能够辅助你对算法有更深入的认识。但是依然是:

对于第1,2甚至第3遍看算法导论,强烈建议根据自己的实际情况有选择的忽略其中的数学部分。

希望大家有收获:)加油!

  • 34
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值