电子书:初等算法

1822 查看

北京 liuxinyu 同学写完《初等算法》。全书英文写作,600 多页:我终于写完了《初等算法》一书。

这本书完全免费,可以从这里下载电子版:https://github.com/liuxinyu95/AlgoXY/blob/algoxy/preview/elementary-algorithms.pdf?raw=true

Why

算法书籍汗牛充栋,《算法导论》,《计算机程序设计艺术》,《计算机程序的构造和解释》……,为什么要写这么一本书?是不是重复发明轮子?

这本书的特点有以下几个:

1、形式化。所有的算法都尽量形式化为数学公式,同时给出伪代码。我希望能够让算法回归数学,具有代数符号般的简洁和优美;

2、函数化和 imperative 对照。几乎所有的算法都同时给出了传统的 imperative 实现和纯函数实现。

3、多语言。尽量给出了多种语言的实现,包括C, Haskell, Python, C++, Scheme/Lisp 等。

4、尽量手绘插图,儿童画风格。

  • 归并排序的插画
  • 跳跃青蛙问题的插画
  • 狼、羊、白菜过河问题的插画
  • 选择排序的插画

内容:

《初等算法》一书包括了如下内容(按照出现顺序给出):

二叉树、插入排序、红黑树、AVL 树、Trie 和 Patricia,后缀树、B树;

Binary heap, Leftist heap, Skew heap, Splay heap, 选择排序,Binomial heap, Fibonacci heap, Pairing heap;

队列,基于 Finger tree 的序列,快速排序,归并排序,众数查找、二分查找,Saddleback 查找,KMP 和 Boyer-Moore 查找,DFS, BFS,贪心策略和动态规划。

参考:

有两本书对《初等算法》影响最大。一本是 Chris Okasaki 的《Purely functional data structure》另外一本是《算法导论》。写作过程中还参考了一些其他书籍,包括 Knuth 的《计算机程序设计艺术》,Richard Bird 的《Pearls of functional algorithm design》,Bentley 的《编程珠玑》以及一些论文。

不足:

写这本书的六年中,我总是想起法国数学天才伽罗瓦最后写的那句话:“我没有时间了!”,我原计划用 10 年写完这本书,结果提前了 4 年。这样的代价很大。为了避免翻译,过滤“噪声”,我直接用英文写作。由于不是 native speaker,书中的英文语法和拼写难免贻笑大方。为了赶时间,proof reading 被压缩,许多结论采取了“拿来主意”,没有进行严格的数学证明。一些章节的课后习题也没有给出答案。

未来:

理想情况下,一本严肃的算法书应该在稳定、宽松的环境下精雕细琢。可是在社会剧烈发展的今天,在日新月异的中国,在人们习惯快餐而不再享受大餐的快节奏生活中,在微博、微信取代文章、书信的手机网络大潮下,这样的理想环境根本不存在。我经历了 Symbian 的裁员,然后经历了互联网创业公司,到 Nokia 后又经历了微软的裁员。未来不可预知。对于《初等算法》这本书,开放给社区是最好的选择。需要做的工作很多:

  1. 翻译中文版
  2. 社区 proof reading 和 review,修正内容上的错误和英文上的不足
  3. 提供一本习题集
  4. 补足数学证明
  5. 采用强大的数学工具,对形式化的算法进行分析

一些数据:

《初等算法》黄金分割 0.618 版本,历时 6 年,在 github 上总共提交 1680 次 commit。全书 600 多页,19 万字(word)。2 万 2 千行示例代码。

保护:

《初等算法》在 GNU FDL 许可协议下发布,所有代码在 GNU GPLv3 协议下发布。

Larry, LIU Xinyu