初等算法

经过6年,我终于写完了《初等算法》一书。
这本书完全免费,可以从这里下载电子版:[url]https://github.com/liuxinyu95/AlgoXY/releases/download/v0.618033/elementary-algorithms-zh-cn.pdf[/url]

Why
算法书籍汗牛充栋,《算法导论》,《计算机程序设计艺术》,《计算机程序的构造和解释》……,为什么要写这么一本书?是不是重复发明轮子?
这本书的特点有以下几个:
1,形式化。所有的算法都尽量形式化为数学公式,同时给出伪代码。我希望能够让算法回归数学,具有代数符号般的简洁和优美;
2,函数化和imperative对照。几乎所有的算法都同时给出了传统的imperative 实现和纯函数实现。
3,多语言。尽量给出了多种语言的实现,包括C, Haskell, Python, C++, Scheme/Lisp等。
4,尽量手绘插图,儿童画风格。
[img]http://dl2.iteye.com/upload/attachment/0099/4334/75f25ca6-89e0-3839-be68-cf2fc2409cc1.png[/img]

[img]http://dl2.iteye.com/upload/attachment/0099/4336/869424cc-d1ee-3255-8c1b-1b8cb937cfe5.png[/img]

[img]http://dl2.iteye.com/upload/attachment/0099/4338/c060bfd9-afb4-3f01-a8b3-4dcce0ce8676.png[/img]

[img]http://dl2.iteye.com/upload/attachment/0099/4340/36a85e04-52ca-3a21-b16e-7d0490e6a8c9.png[/img]

内容:
《初等算法》一书包括了如下内容(按照出现顺序给出):
二叉树、插入排序、红黑树、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后又经历了微软的裁员。未来不可预知。对于《初等算法》这本书,开放给社区是最好的选择。需要做的工作很多:
* 翻译中文版
* 社区proof reading和review,修正内容上的错误和英文上的不足
* 提供一本习题集
* 补足数学证明
* 采用强大的数学工具,对形式化的算法进行分析

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

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

你可能感兴趣的:(算法与数据结构)