《初等算法》中文版
来源:互联网 发布:snmp linux版本查询 编辑:程序博客网 时间:2024/06/13 21:57
公元9世纪,也就是是中国唐朝的时代,在阿拉伯文明的中心——巴格达,有一位来自东方的大学者刚刚完成了一本著作。书名叫做《还原与对消的科学》(Kitab al-Jabr wa-l-Muqabala)。它讲述了如何解二次以内的方程。人们用这本书的拉丁文简称Al-Jab,创造了一个词Algebra。1859年,李善兰与英国传教士伟列亚力创造性地将其翻译为“代数”。
遗憾的是,没有人知道这位侨居在巴格达的数学家的真正名字。人们只知道他来自一个名叫花剌子模的东方国家。感谢金庸先生,《射雕英雄传》让这个国家的名字得以普及。如今的乌兹别克斯坦的撒马尔罕,还立有这位数学家的雕像。于是来自(Al)花剌子模(Khwarimi)的人,Al-Khwarimi(阿尔-花剌子密)就成了这位数学家的名字。它的拉丁文译法为Algorithm,中文译作“算法”。
我们的前辈在发展代数时,大约经历了三个阶段:文辞代数,简字代数、和符号代数。早期的解方程方法,如花剌子密著作中的方法,使用详细的文字描述解题的步骤,直到16世纪,文辞代数仍然是主流的代数描述手段。后来古希腊的丢翻图,逐渐使用了一些符号简记方法,发展了简字代数。现代的符号代数在莱布尼茨时达到了顶峰。极大了提高了数学语言的严谨性和表达能力。
可是反观我们现在的算法描述和很多计算机语言,似乎仍然停留在文辞代数阶段。这一想法是我在2013年时逐渐形成的。那时距离开始写作《初等算法》一书,已经过去了好几年了。
2005年前后,我经过一番曲折的道路,从C++的template meta programming,经由Lisp方言Scheme,开始使用Haskell来试着编写程序。这是一门纯函数式编程语言,往往引导使用者用“代数”的方式思考和解决问题。但是深入下去,我发现需要解决一个问题。Dijsktra说“程序=算法+数据结构”。大量的已有算法和数据结构都是用命令式的描述和实现的,我们需要发展一套函数式的算法和数据结构。从那时起,我开始试着用多种语言实现《算法导论》一书中的算法。2009年的时候我把这些工作放到了github上,希望更多的人能从中受益。
幸运的是,已经有前人认识到这一问题了。卡耐基梅隆大学的Chris Okasaki在读博士的时候,就发展出了很多函数式数据结构。他的博士论文后来出版成为一本书《Purelyfunctional data structure》。其中用Standard ML给出了一系列的实现。牛津大学的Richard Bird出版了《Pearlsof functional algorithm design》针对很多问题,给出了对应的函数式算法。
站在这些成果的基础上,我得以把一些常见的基本算法整理出来,同时给出命令式和函数式描述,方便大家对照参考。书中给出了一些例子代码,包括Haskell,C, C++, Python,以及Lisp方言Scheme的。
2014年夏天的时候,这本书的英文稿大部分完成了。我接受了一些朋友的建议,开始将其译为中文。到2016年4月的时候,中文版也基本完成了。它们在github上可以获得:
https://github.com/liuxinyu95/AlgoXY/tree/zh-cn
最近几年,我的思路发生了一些转变。从2013年开始,我逐渐开始读一些和数学相关的书籍,开始是一些趣题集,后来是一些数学家的逸闻趣事,和科普读物。偶尔也看看范畴论(Categorytheory)。我逐渐认为计算机科学,以及算法终究还是数学的一个分支。回顾读书期间,我们的数学教学也许忽略了一些东西,例如帮助学生了解数学的历史,培养趣味性和幽默感等等。
如果再次重写《初等算法》这本书,也许不需要放入那些例子程序。而是可以加入更多数学元素,突出一下趣味性。如果有时间,我打算给中小学读者写一本名叫“Unplug”的书,不插电,不用电脑,不编写程序来解决生活中的问题。
当然,也有另一个可能,就是为了迎合主流的读者,将这本书用Scala和Java 8重写一遍。不过未来无法预测,很多时候,我们像布朗运动中的分子,只是迈着“醉汉的脚步”不断前行。
- 《初等算法》中文版
- 初等排序算法集合
- 初等数论-扩展欧几里德算法
- 【算法】 初等数论 一些总结
- 【初等数论】【转载】夜深人静写算法(五)
- 初等排序算法总结——《挑战程序设计竞赛》
- 初等算法(一)——插入排序法
- 初等数学公式
- 初等数论
- 初等因子
- 初等解析几何
- 初等排序
- 初等数论
- 初等数论
- 初等变换与初等矩阵
- 算法导论(中文版)--chapter 1
- NSGA2算法中文版详细介绍
- 《常见算法和数据结构》优先队列(1)——API和初等实现
- LeetCode 36. Valid Sudoku
- 收藏C++ STL 使用的博文
- Eratosthenes筛选法
- CSS实现loading小动画(附源码)
- 易學原論 (4288_3)
- 《初等算法》中文版
- iOS开发框架
- 三和韓長庚 著 易學原理總論 對讀 041_080
- 第六章-数据结构入门
- 【多题合集】网络流24题练习(更新至魔术球问题)
- 【bzoj 1923】[Sdoi2010]外星千足虫(高斯消元)
- 三联莎士比亚阅读摘记
- Arm9+linux fl2440 lcd驱动移植、添加MMC支持、添加U盘支持
- String HDU5672