我对《算法导论 CLRS》的态度一直是有所保留的。虽然早在国内的时候,这本书一直被推崇为经典。但
我那时就觉得它对算法的描述不好。一段费解的伪码,加上一大段费口舌的解释。我觉得本可以做得更好。
后来知道,这是典型的美国本科生用书,美国的本科教材,大抵很罗嗦,都是厚重的大部头书。教授们
生怕稍有简略,学生们就不懂;而美国的小本们,也傻呵呵的认为书头越重,自己越了不起。
这书中的大段解释,也确是一番好意,就怕哪个不懂。可要真是老老实实的读下去,分散注意要超过传
达信息。
这本书我读的最快乐的部分,就是每章的chapter notes。也就是在一章的末尾,介绍这一章提到的各
种内容是何时、被谁、怎样引入计算机科学的。不看这部分,总觉得学的就是书上的死学问。而这些引用出
处却为我们理清了算法研究的历史脉络,各个经典结果的师承关系。读这些为我带来了巨大的乐趣。也建议
读此书的人千万不要放过这一部分,这些引用的结果就是算法研究的里程碑。
对于算法的伪码描述,倒不必太仔细了。不能指望在算法课上学习编程,算法本来就是很纯粹的数学对
象,它的设计思想完全依托于背后的数学结构,它运作的机制以及它的美,也都来自它的数学,可是书上那
些模仿C和Pascal的语句,让算法的数学之美沦为一段机械代码。读者辛苦的把自己的思维变成机器,读懂
了这些代码,但并不会直接带来对算法本身的领悟。就像一个人懂得了打牌的游戏规则,但并不意味着他就
会打牌了,因为他可能依旧不通晓牌理。对算法的学习也要从问题本身的数学结构入手,理解解决此种结构
问题的算法它的设计思想,掌握分析具有各种结构特征的算法的数学工具,学习怎样发现问题的结构并从中
推出问题的下界(lower bound)。这些才是学习算法的根本。
(ps评点:现在才深有感触,以前总是纠结的看它那个伪代码,后来才想到,只要理解了思想,自己能够写
出来就NB了,何必管它如何实现的呢,因为本来算法就是一个思想,如何变通,并自己运用才是最重要的
!所以,根本不能记忆这些代码,而要自己理解思想,至于实现,有N多种可能,也许今天自己写了这样的
,到明天就是那样的了)
《算法导论》的最大成就,也就在于它的选材。它筛选出来的结果,每一个都当之无愧的算是计算机科
学的根基或里程碑。在所有的算法教材中,这一点《算法导论》被公认是作的最好的。结构也组织的合理。
尽管它的讲解,对这些经典结果的呈现,都不是我最满意的方式。但明珠纵然暗投也终究是明珠,《算法导
论》覆盖的内容,可作为算法最好的教学大纲,是算法课的原型。这是它不容抹煞的历史地位。
=================================================================================================================================
我读算法导论的目标:
书上的内容全部看懂(附录除外,已经为这些基础知识专门看了一大厚本的《离
散数学》,所以只看了几道从前没思考过的题,),习题(excersice)和每章末的
思考题(problem)全部尝试独立完成,即使不能做出,也一定要从网上找到答案。
实际完成的内容:
书上内容全部看完且看懂(当然看了很长时间,不免有些内容忘记了)。习题和
思考题基本全部完成,所有没有完成的题目(自己不会做,并且也没找到答案)一
共35个。算来平均每章一个。看着写满两大本的题解,心里还是很有成就感的
(尽管我女朋友说:“你写这些,有什么用啊?!”)
这一年零8八个月的时间我都干了什么?
一口气读《算法导论》到第30章,前26章的题基本做了,觉得实在有点累,调剂
一下,转而攻读MIT的另一本名著《计算机程序的构造和解释——Structure and
Interpretation of Computer Programs》,几个月后重披战甲,从27章开始看
完了全部的《算法导论》,并将最后9章题目做完。由于看得细,而且还有其他
事情要做,前后拖了20个月,总算看完了,真的很累。
我的书评:
踏踏实实看完书,仔仔细细的思考每一道题,即使不会做,至少读过,思考过,
可能未来的某一时刻你的脑海里突然就有了灵感。
为什么我的书评只有一句话(而且似乎也没有评价)?
说真的,我作为一个小小的学生,真的没有资格评判人家大牛用十几年汉水和智
慧来增删,校对,实践,研究得来的一本著作。如果有什么不好的印象,那只能
说是没到那个境界,理解不了,不能吃不着葡萄说葡萄酸,反而批评人家。
有心人从我上面的一大段废话和短短的一句似是非是的书评,也绝对可以看出来
这本书的卓越之处:
(1)深入浅出:能耗费一个人20个月的时间去看,可见这本书绝非一朝一夕的快
餐,要知道即使是世界上最一流的大学,利用一年的课程去讲算法课,也只能挑
本书的部分章节去讲而不能完全覆盖。既然题目能做出绝大多数,证明只要你用
心,这本书的难度完全是可以承受的,决不会让你有无从下手的感觉。
(2)情节生动有趣:对,没错,我就是要像形容小说一样形容这本书,不然我绝
不可能坚持看这么久。但是比小说有趣的是,故事里人物的命运是作者安排的,
你或喜或悲总是被人牵着走,而这本书却是让你作主角去打开一扇又一扇通往未
知的大门,解开一道又一道的难题。
(3)既连贯又独立:不同章节既独立完备又内在高度相关。即使你专注于某一个领
域,我认为这本书给你的介绍也是很充实的,而且可以直接看,这就是为什么我
中间放下一段时间后又可以从新拿起来读而不用重新来过。当然个章节间内有一
个东西是一脉相承的,那就是:(程序运行的理论)效率。从头到尾看得到的绝
对比单独对待每一章得到的价值的总和大得多。
(4, 5, 6, ...)余音绕梁:老子说:三生万物。我只说三条,万就留待你自己去
挖掘,也留待你从书中找到精彩的答案。
祝读此文者也能享受一趟与《算法导论》的精彩的马拉松之旅。
=============================================================================================================================
posted on 2010-05-29 01:23
deercoder 阅读(1625)
评论(2) 编辑 收藏 引用 所属分类:
读书