05年的时候,同学去华为工作,因为华为需要一段时间的军训洗脑,为了消磨时间,他顺带买了一本《编程珠玑》来研究,当时他和我说:一起来研究算法吧。当时粗略的在网上看了一下,觉得只是把一些常用算法罗列了而已,于是并不在意,也就这么放弃了。 06年的时候,半了一张上海图书馆的借书证,恰巧图书馆里面有这本书的影印版,借回家放了一个多月,但是当时的注意力全都放在了形形色色的palm上面,所以只是很无辜搬到家中,又搬回图书馆。 直到后来,有了自己的窝,购置了书架,并且抱着一个购齐计算机经典书籍的想法,开始在网上到处搜罗书籍的信息,这才发现本书被相当多的人力荐。 打开这颗薄薄的珍珠,认真拜读了前言,记得非常清楚是作者说,一次不要读太多,一章足矣。 再读完第一篇,认真研习其后的练习题,这才发现,原先关于“算法罗列”的主观臆断是多么的错误。 是的,本书的确在强调算法,但是除了常规的算法,作者更多的是在表达出一种算法以外的思想:高效的算法没错,但是正确的事情应该用正确的方法来做。 每个算法都有高效的经典例子,但是什么时候用什么样的算法,探究问题的本质,真正的优雅的解决问题,才是本书所要传达的精神。 此外,值得一提的是书中那些传奇的故事,比如太空笔和铅笔,比如各鸽子和胶卷,类似稗官野史,但是又的确是真实发生的事件,在乐趣中一步步的佐证他的观点。(不得不说,这一点,《代码大全》和《深入理解计算机系统》也一样老道,看得令人赏心悦目)。 古人说的茅塞顿开,醍醐灌顶,确实可以用来描述我在读此书时的感受。
感觉与大家差距好大,刚刚拜读完第一章,什么归并排序啊,什么位图数据结构啊,完全不懂.一直想系统的学习数据结构和算法,或许应该从现在开始了。
准备刷完Coursera的Priceton的Algorithm课程,结合《编程珠玑》和《算法》(普林斯顿大学)作为教材。
其中算法个数不多,倒是有几个经典的(二分,快排不算,随机数生成真的碉堡了),但是平均难度不大,对于算法方面的提升真的一般(如果想提升算法能力不如去看《训练指南》),像楼主说的 “作者更多的是在表达出一种算法以外的思想:高效的算法没错,但是正确的事情应该用正确的方法来做”(不得不佩服一下,很精辟)
另外,书里还介绍了好多书,我觉得可以把这些书挨个遍历一下,等看了好多书以后,估计也不会纠结于那么几个“聪明”的算法了