经过6年,我终于写完了《初等算法》一书。
这本书完全免费,可以从这里下载电子版:
https://github.com/liuxinyu95/AlgoXY/releases/download/v0.618033/elementary-algorithms-zh-cn.pdf
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后又经历了微软的裁员。未来不可预知。对于《初等算法》这本书,开放给社区是最好的选择。需要做的工作很多:
* 翻译中文版
* 社区proof reading和review,修正内容上的错误和英文上的不足
* 提供一本习题集
* 补足数学证明
* 采用强大的数学工具,对形式化的算法进行分析
一些数据:
《初等算法》黄金分割0.618版本,历时6年,在github上总共提交1680次commit。全书600多页,19万字(word)。2万2千行示例代码。
保护:
《初等算法》在GNU FDL许可协议下发布,所有代码在GNU GPLv3协议下发布。
- 大小: 30.7 KB
- 大小: 26.6 KB
- 大小: 51.4 KB
- 大小: 46 KB
分享到:
相关推荐
Python课程初等算法题目,适合刚接触Python不久的伙伴巩固自己的基础
对随机生成的整数和字符串进行排序,可以比较各个算法的优劣性
以损失一部分精度为代价来节省代码量并提高运算速度,包括:正弦、余弦、反正切、全角度反正切、反正弦、反余弦、平方根、平方根倒数、自然指数、自然对数、数字低通滤波器等。
学习数论,算法分析的必备知识,快下载初等数论
初等组合数学,学习算法前的基础学习,主要是一些数学解法和公式
前言20x00 整除60x10 整除相关60x11 素数(质数)60x11.1 素数的判定70x11.2 素数的筛法80x11.3 反素数 11
面向申威异构众核处理器的初等函数算法研究.pdf
1、硬件环境:个人机,CPU 主频:1.80GHz 内存:4GB 2、软件环境:操作系统:Windows 7 3、地点:智能信息处理实验室 1、邻接矩阵初等变换
基于C++邻接矩阵初等变换算法的图同构识别源码+详细文档+全部数据资料.zip基于C++邻接矩阵初等变换算法的图同构识别源码+详细文档+全部数据资料.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,...
matlab经典的算法【初等基础模型】
C++数学与算法之初等数论
使用纯C语言编写的计算矩阵初等行变换算法实现。 算法比较完善,可以支持分数输入以及运算 懂的人自然知道有多方便(尽管MATLAB同样可以实现,此算法的优势主要引入分数运算,纯手撸,很舒服) 效果看图:
《ACM模板》《算法全家桶》《算法竞赛中的初等数论》.zip
为了设计出安全高效、加密性能良好的图像加密系统,结合混沌映射、细胞自动机和四叉树分解的良好特性,提出一种基于2D Arnold混沌映射和初等细胞自动机的图像加密算法。该算法首先利用2D Arnold混沌映射对像素位置...
在了解完整除的相关性质以后,我们将进入数论的第一章,最重要的章节之一,也是数论千百年研究突破的重点,整除相关:素数,约数。0x11 素数(质数)素数定义素数(又
矩阵算法中基础的初等行变换代码,详细有注释,易于理解
9.1.3 初等数论 273 9.1.4 基本概念 273 9.2 完全数 274 9.2.1 完全数概述 274 9.2.2 计算完全数算法 275 9.3 亲密数 277 9.3.1 亲密数概述 277 9.3.2 计算亲密数算法 277 9.4 水仙花数 280 9.4.1 水仙花...
该算法利用超混沌系统对像素矩阵的初等变换实现像素置乱, 并将像素置乱后的矩阵与超混沌系统的不同组合进行异或运算实现图像扩散。由于该算法采用易被攻击的矩阵初等变换和异或运算的加密措施, 使其很难抵抗各种攻击...
它全面介绍了算法的数学分析中使用的基本方法,所涉及的内容来自经典的数学素材(包括离散数学、初等实分析、组合数学),以及经典的计算机科学素材(包括算法和数据结构)。虽然书中论述了“最坏情形”和“复杂性问题”...