个人认为:《算法第4版》这本书,比标准教材《算法导论》要好非常非常多。
《算法导论》主要是探讨了如何在数学模型写一个漂亮的算法,老版还居然使用pseudo code。在学术上,毫无疑问《算法导论》更高。而此书,则在实际应用上比算法导论高。
《算法导论》是我曾经学过的教材。学过算法导论以后在真实的工程上一个最起码的问题常常困惑我。就是这些伪代码,或者说C代码如何实施在高级语言Java(Python或者C#)上。
而难点在于如下几点:
1. 《算法导论》是基于伪代码或者C的。而C的容器是远远不及Java这种更高级的语言的。那么,如果在Java程序上,我真的需要实现一个算法的时候,我应该如何处理Java已有的容器的关系?《算法》这本书基本给了我们明确的答案——最起码ArrayList不要用。java的ArrayList杂糅了太多的东西。千万不要把它当成Array或者LinkedList,它两者都不是!
2. 《算法讨论》是基于纯粹的过程语言的讨论(伪代码的版本也是)。所有的函数都可以认为是全局函数。而对于一个面向对象的语言,我们应该如何封装函数?
3. 本书真正对我有启发的倒是数据结构的讨论。Linus曾经说过,只有烂的程序员才考虑代码,而牛逼的程序员考虑的是数据结构。《算法导论》中对于数据结构的具体实现是缺乏讨论的。
4. 《算法》这本书配合open courses 其实还探讨了,问题分析部分。比如说那个迷宫问题。Union Find 这个算法其实非常简单,但是如何知道迷宫这个问题可以抽象成Union Find来解决,才是真正需要的能力。
我到现在还记得斯坦福的《算法导论》的公开课,该书的作者,那个教授亲口说的话:“我对于实现一个skip list 还是很有信心的,红黑树我几乎从来没有写对过……还是skip list好,我来尝试一下,或许这次能比较快写出来……”
《算法》修订了七八次以后才把代码中的错误逐一修正,论代码的美感,不如《算法导论》优美。但是这也正是做学术和做工程的区别。如果是一本工程师的书,这本书比算法导论好太多太多了。