这本算法书写了七年

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/turingbooks/article/details/54582956

现如今,出版一本书已经不是什么特别稀奇的事儿了。编程世界也一样,新书层出不穷,多得让人眼花缭乱。最近图灵出版的新书,有一本书让我特别感动,不仅是因为这本书内容本身好,更是因为作者乐意七年时间沉浸于一件事儿中仔细打磨,这本书就是《算法新解》。之前很早就听策划编辑说她手下有本算法书很给力,作者写了七年之久,而且是先发布英文版,再写中文版,当时敬佩之心油然而生。

这里写图片描述

前段时间,作者刘新宇拜访图灵,有幸见面并聊了一会儿。算起来他已经是一位老程序员了,2001年从清华大学自动化系毕业之后就从事软件研发工作,目前就职于亚马逊中国仓储和物流技术团队。

他关注基本算法和数据结构,尤其是函数式算法。平时酷爱阅读,编程类图书和数学类图书是他的心头好。我加了新宇老师的微信之后,发现他发微信比较少,有必与书相关。比较让我吃惊的是他的阅读速度,大概是因为了解得越多吸收得越快吧。

当然,我对新宇老师了解不多,也不懂算法,接下来关于《算法新解》和作者的故事,交给专业大咖们讲述。

常成博士

4数网主编

“使用和发现算法是快乐的,这也是我觉得这本书特别美好之处。毕竟人类的最高阶段就是认识宇宙,了解生命起源,而更高阶段是创造和优雅地解决那些有趣的谜题!”

我几年前曾经粗略读过这本书的英文书稿Elementary Algorithms,五六百页的一本算法书,是作者多年来在学术界和工业界实践中不断思考的结晶。那本英文书稿因为对几个算法问题的独到解读,成为英文世界中很多人学习算法的参考资料。这次我拿到新宇的中文版书稿《算法新解》,感觉内容更加充实丰富,文笔更加流畅,引文更加全面,结构更加紧凑,我也更加不读完不能释手。过去有人告诉我又一本中文版算法书要出版时,我通常的反应都是“又一本?”,并嗤之以鼻。毕竟中文的计算机算法书质量良莠不齐,而且存在大量照翻英文书的现象,而这本《算法新解》则是作者多年知识积累下的原创之作。更加难得的是,作者在书后给出了详细的参考文献,供读者进一步学习参考。

从计算机语言知识的角度看,这本书虽然原叫“初等”算法,但是对读者的要求并不低,书中大量使用了C/C++、Python 和Haskell 这几种语言。C/C++ 和Python 作为传统而又实用的两种语言,包含了指令语言、面向对象和动态语言等几种形态,为从业人员和普通大众所广泛使用和熟悉。那么,为什么要用Haskell 呢?孙中山曾经说过“世界潮流,浩浩荡荡,顺之则昌,逆之则亡”,计算机语言的进化过程也一样。计算机语言从最初的“让机器能理解人的交流工具”,逐渐进化到可以描述人类思考过程的更加抽象、数学上更严谨,也更加强大的函数式编程语言,而Haskell 就是函数式编程语言的代表。如果要读懂这本书的最深刻精髓,你需要一点Haskell 知识;如果你之前没有学过,也让这本书成为你学习一门函数式编程语言的动力之一吧!

从算法理论的角度看,这本书深入浅出。作者先花大量篇幅讲述最重要的几种数据结构和相关的处理方法,然后用大量经典而又新颖的问题来讲述计算机算法的核心问题:如何排序和搜索。这本书在前半部分介绍基本的数据结构时没有落入俗套,而是从树、堆讲起,最后介绍“并不简单”的队列,让人不禁想起张筑生先生先讲积分、后讲微分的经典名著《数学分析新讲》。我很喜欢作者介绍排序算法时对“冒泡排序”的处理:本书并不花费篇幅谈论如此低效的算法,读者可到维基百科自行花5分钟理解。相反,作者用了100 多页的篇幅,通过经典而又有趣的谜题详细讲解了各种搜索算法。更难得的是,作者大量使用函数式编程语言来做范例,展示了这类语言的强大之处,这在很多中文算法书中是看不到的。

从思考解决各种有趣问题的角度看,这本书适合任何知识背景和层次的读者“享用”。算法不仅仅可以用来解决现实世界中的种种实际问题,比如通过关键词寻找网上最有用的信息,寻找最短的旅游路线来游历所有的景点,再比如无线通信中的信道编码和解码;很多美妙的算法源于人类对一些挑战自身智力的谜题的思考,比如经典的华容道问题,寻找数独的解法,再比如用程序战胜九段围棋高手等。书中的这些谜题深刻却不枯燥,作者还给出了很多幽默的插图,它适合也值得任何学术背景的人花时间阅读和思考。这让我看出作者写这本书不但花费了很多心血,而且收获了很多欢乐;使用和发现算法是快乐的,这也是我觉得这本书特别美好之处。毕竟人类的最高阶段就是认识宇宙,了解生命起源,而更高阶段是创造和优雅地解决那些有趣的谜题!

无论作为一个需要使用各种算法的从业人员,还是一个喜欢不停思考有趣问题的人,我都觉得新宇的这本《算法新解》是一本难得的好书。如果可以,我希望能够立刻把全书上传到大脑之中。

姚冬

YY 直播架构师

“《算法新解》的一大特色就是提供了多种编程语言的算法实现代码,并且充分利用了各种语言特性。某些算法用函数式编程语言实现会特别简洁,比如用Haskell
实现的快速排序只有几行代码。”

我和刘新宇认识快10 年了。2007 年的时候我在诺基亚工作,和他所在的公司有技术项目合作,每隔几周都要一起开会,所以渐渐混熟了。那时他的职位是项目经理,虽然做着管理的工作,但是我感觉他的技术水平比大多数工程师都要好。

有一次工作上的原因,我和他一起去匈牙利出差,在飞机上我在看小说,而他拿出一本英文数学书看了一路。他说数学和编程是他的兴趣爱好,每年他都会尝试学习一门编程语言,或者了解一个新的数学领域。

不同的人有不同的追求,当我们大多数人为了房子车子,为了升职加薪而加班忙碌时,刘新宇却把6 年的业余时间用在了写作上,而且是写一本免费的书。这本书最初的版本是用英文写的,中文版是后来翻译的。

我在大学学计算机编程的时候,看的是严蔚敏老师的《数据结构》,当时书里都是Pascal伪代码,老实说我没能坚持看完。

如今,编程语言相比二十多年前极大丰富了,而且产生了很多种编程范式。《算法新解》的一大特色就是提供了多种编程语言的算法实现代码,并且充分利用了各种语言特性。某些算法用函数式编程语言实现会特别简洁,比如用Haskell 实现的快速排序只有几行代码。

现在,软件开发行业的分工已经非常细了,有人专门负责编写算法提供封装好的库,也许绝大多数程序员很少需要自己实现某些算法。我们学习算法和数据结构,不一定就要实际去编写算法代码,也可以当作一种了解程序底层运作的方式,而这有助于更好地解决问题和优化程序。

阅读算法书是会有点枯燥的,先通过阅读对算法原理有个基本的概念,然后读者可以把它当作手边的参考书,在实际遇到相关问题时拿出来仔细阅读,结合实际场景可以有更深刻的理解。

这本书是按照教材的风格编写的,由浅入深,每个算法从实际应用场景出发,阐述数学原理,再给出伪代码,并且提供实际可以运行的实现。最后,作者还给出了供课后思考练习的习题。我希望这本书有机会成为计算机教学中的基础教材之一。

这本书采用了一种新颖的发布方式,它像一个开源软件项目一样,作者像管理源代码一样管理书的内容,允许读者参与其中贡献思路代码,帮助修改错误,以及在其整个生命周期里持续改进。

在软件和互联网高速发展的这些年里,我们程序员不断开发功能满足需求,但我们也应该为纯技术保留一份好奇、一份执着,刘新宇多年的坚持着实令我感动。虽然算法都是冷冰冰的符号公式,但是从书里的文字、插图和代码里,我们可以感受到作者的技术情怀。

顾峥博士

LinkedIn高级工程师

算法是每个计算机专业学生的理论课、基础课、必修课,也是区分计算机爱好者与专业计算机从业人员的重要课程。现在市面上五花八门的算法书也很多,但是能把算法结合实际应用生动讲解出来的却凤毛麟角。刘新宇的这本《算法新解》让人眼前一亮,简明的文字配上插图和不同编程语言的实现,让算法学习变得轻松有趣。并且,书中的例子都特别贴近应用,电子字典、用户输入匹配等小应用让人感觉算法无处不在。对于每个例子,这本书也会循序渐进给出更加优化的算法,并力求让读者掌握一种解决问题的思路。虽然我在计算专业领域研究开发多年,在读了刘新宇的《算法新解》以后仍然感觉受益匪浅。我也希望本书的每一位读者,无论是刚入门的学生、有多年编程经验的技术人员,还是从事理论研究的科技人员,都能有所收获。

宋方睿

谷歌软件工程师、《Haskell趣学指南》译者

《算法新解》七年磨一剑,作者笔耕不辍,几年来常在TopLanguage邮件列表中放出让大家校对,在程序书泛滥的这个时代尤显难能可贵。书中包含大量插图和公式,又结合C/C++、Haskell、Python、Scheme等多种编程语言实现,命令式、函数式兼顾,准确细致地描述了大量基本算法和习题。

陈维扬

小米软件工程师

从入行第一天起,我们就被告诫“不要重复造轮子”,但是现成的“轮子”总有一天会无法达到要求。硬件提升总也赶不上数据量的增加,产品人员总能提出让人发疯的新需求,这时我们只有理解原理,才能改进甚至发明可用的新“轮子”。

请不要忘记我们的好奇心。离开了功利的驱使,纯粹地获取知识会是另一种愉悦的精神体验。在阅读这本书时,这种体验将始终伴随着你。

这里写图片描述
作者:刘新宇
定价:99

  • 七年磨一剑,亚马逊中国高级研发人员重磅力作
  • 函数式算法与常规算法对照解读
  • 伪代码与多语言实现并存,充分发挥语言特性
  • 涵盖C/C++、Haskell、Python、Scheme等
  • 理论与实例结合,轻松学习算法与数据结构
  • 内含ACM竞赛趣题和传统趣题,发现算法的乐趣

本书的一大特色就是提供了多种编程语言的算法实现代码,并且充分利用了各种语言特性。

本书共分4部分,同时用函数式和传统方法介绍主要的基本算法和数据结构,数据结构部分包括二叉树、红黑树、AVL树、Trie、Patricia、后缀树、B树、二叉堆、二项式堆、斐波那契堆、配对堆、队列、序列等;基本算法部分包括各种排序算法、序列搜索算法、字符串匹配算法(KMP等)、深度优先与广度优先搜索算法、贪心算法以及动态规划。

本书由浅入深,每个算法从实际应用场景出发,阐述数学原理,再给出伪代码,并且提供实际可以运行的实现。最后,作者还给出了供课后思考练习的习题。

目录

常成序

姚冬序

前言

第一部分  树

 第1章 二叉搜索树:数据结构中的“hello world”

 第2章 插入排序的进化

 第3章 并不复杂的红黑树

 第4章 AVL树

 第5章 基数树:Trie和Patricia

 第6章 后缀树 

 第7章 B树

第二部分 堆

 第8章 二叉堆

 第9章 从吃葡萄到世界杯:选择排序的进化

 第10章 二项式堆、斐波那契堆和配对堆

第三部分 队列和序列

 第11章 并不简单的队列

 第12章 序列:最后一块砖

第四部分 排序和搜索

 第13章 分而治之:快速排序和归并排序 阅读

 第14章 搜索 

附录 列表

参考文献

索引

试读:http://www.ituring.com.cn/book/1907
购买:京东当当亚马逊互动

展开阅读全文

没有更多推荐了,返回首页