我几年前曾经粗略读过这本书的英文书稿Elementary Algorithms,五六百页的一本算法书,是作者多年来在学术界和工业界实践中不断思考的结晶。那本英文书稿因为对几个算法问题的独到解读,成为英文世界中很多人学习算法的参考资料。这次我拿到新宇的中文版书稿《算法新解》,感觉内容更加充实丰富,文笔更加流畅,引文更加全面,结构更加紧凑,我也更加不读完不能释手。过去有人告诉我又一本中文版算法书要出版时,我通常的反应都是“又一本?”,并嗤之以鼻。毕竟中文的计算机算法书质量良莠不齐,而且存在大量照翻英文书的现象,而这本《算法新解》则是作者多年知识积累下的原创之作。更加难得的是,作者在书后给出了详细的参考文献,供读者进一步学习参考。 从计算机语言知识的角度看,这本书虽然原叫“初等”算法,但是对读者的要求并不低, 书中大量使用了C/C++、Python 和Haskell 这几种语言。C/C++ 和Python 作为传统而又实用的两种语言,包含了指令语言、面向对象和动态语言等几种形态,为从业人员和普通大众所广泛使用和熟悉。那么,为什么要用Haskell 呢?孙中山曾经说过“世界潮流,浩浩荡荡,顺之则昌,逆之则亡”,计算机语言的进化过程也一样。计算机语言从最初的“让机器能理解人的交流工具”,逐渐进化到可以描述人类思考过程的更加抽象、数学上更严谨,也更加强大的函数式编程语言,而Haskell 就是函数式编程语言的代表。如果要读懂这本书的最深刻精髓,你需要一点Haskell 知识;如果你之前没有学过,也让这本书成为你学习一门函数式编程语言的动力之一吧! 从算法理论的角度看,这本书深入浅出。作者先花大量篇幅讲述最重要的几种数据结构和相关的处理方法,然后用大量经典而又新颖的问题来讲述计算机算法的核心问题:如何排序和搜索。这本书在前半部分介绍基本的数据结构时没有落入俗套,而是从树、堆讲起,最后介绍“并不简单”的队列,让人不禁想起张筑生先生先讲积分、后讲微分的经典名著《数学分析新讲》。我很喜欢作者介绍排序算法时对“冒泡排序”的处理:本书并不花费篇幅谈论如此低效的算法,读者可到维基百科自行花5 分钟理解。相反,作者用了100 多页的篇幅,通过经典而又有趣的谜题详细讲解了各种搜索算法。更难得的是,作者大量使用函数式编程语言来做范例,展示了这类语言的强大之处,这在很多中文算法书中是看不到的。 从思考解决各种有趣问题的角度看,这本书适合任何知识背景和层次的读者“享用”。算法不仅仅可以用来解决现实世界中的种种实际问题,比如通过关键词寻找网上最有用的信息,寻找最短的旅游路线来游历所有的景点,再比如无线通信中的信道编码和解码;很多美妙的算法源于人类对一些挑战自身智力的谜题的思考,比如经典的华容道问题,寻找数独的解法,再比如用程序战胜九段围棋高手等。书中的这些谜题深刻却不枯燥,作者还给出了很多幽默的插图,它适合也值得任何学术背景的人花时间阅读和思考。这让我看出作者写这本书不但花费了很多心血,而且收获了很多欢乐;使用和发现算法是快乐的,这也是我觉得这本书特别美好之处。毕竟人类的最高阶段就是认识宇宙,了解生命起源,而更高阶段是创造和优雅地解决那些有趣的谜题! 无论作为一个需要使用各种算法的从业人员,还是一个喜欢不停思考有趣问题的人,我都觉得新宇的这本《算法新解》是一本难得的好书。如果可以,我希望能够立刻把全书上传到大脑之中。 ——常成博士,4 数网主编