--
---
您收到此邮件是因为您订阅了Google网上论坛上的“TopLanguage”群组。
要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到pongba+un...@googlegroups.com。
要查看更多选项,请访问https://groups.google.com/d/optout。
Edition: 0.6180339887498949
嗯哼,这是向高爷爷制敬哪
--
---
您收到此邮件是因为您订阅了 Google 网上论坛的“TopLanguage”群组。
遗憾的是,没有人知道这位侨居在巴格达的数学家的真正名字。人们只知道他来自一个名叫花剌子模的东方国家。感谢金庸先生,《射雕英雄传》让这个国家的名字得以普及。如今的乌兹别克斯坦的撒马尔罕,还立有这位数学家的雕像。于是来自(Al)花剌子模(Khwarimi)的人,Al-Khwarimi(阿尔-花剌子密)就成了这位数学家的名字。它的拉丁文译法为Algorithm,中文译作“算法”。
我们的前辈在发展代数时,大约经历了三个阶段:文辞代数,简字代数、和符号代数。早期的解方程方法,如花剌子密著作中的方法,使用详细的文字描述解题的步骤,直到16世纪,文辞代数仍然是主流的代数描述手段。后来古希腊的丢翻图,逐渐使用了一些符号简记方法,发展了简字代数。现代的符号代数在莱布尼茨时达到了顶峰。极大了提高了数学语言的严谨性和表达能力。
可是反观我们现在的算法描述和很多计算机语言,似乎仍然停留在文辞代数阶段。这一想法是我在2013年时逐渐形成的。那时距离开始写作《初等算法》一书,已经过去了好几年了。
2005年前后,我经过一番曲折的道路,从C++的template meta programming,经由Lisp方言Scheme,开始使用Haskell来试着编写程序。这是一门纯函数式编程语言,往往引导使用者用“代数”的方式思考和解决问题。但是深入下去,我发现需要解决一个问题。Dijsktra说“程序=算法+数据结构”。大量的已有算法和数据结构都是用命令式的描述和实现的,我们需要发展一套函数式的算法和数据结构。从那时起,我开始试着用多种语言实现《算法导论》一书中的算法。2009年的时候我把这些工作放到了github上,希望更多的人能从中受益。
幸运的是,已经有前人认识到这一问题了。卡耐基梅隆大学的Chris Okasaki在读博士的时候,就发展出了很多函数式数据结构。他的博士论文后来出版成为一本书《Purely functional data structure》。其中用Standard ML给出了一系列的实现。牛津大学的Richard Bird出版了《Pearls of functional algorithm design》针对很多问题,给出了对应的函数式算法。
站在这些成果的基础上,我得以把一些常见的基本算法整理出来,同时给出命令式和函数式描述,方便大家对照参考。书中给出了一些例子代码,包括Haskell, C, C++, Python,以及Lisp方言Scheme的。
2014年夏天的时候,这本书的英文稿大部分完成了。我接受了一些朋友的建议,开始将其译为中文。到2016年4月的时候,中文版也基本完成了。它们在github上可以获得:
https://github.com/liuxinyu95/AlgoXY/tree/zh-cn
最近几年,我的思路发生了一些转变。从2013年开始,我逐渐开始读一些和数学相关的书籍,开始是一些趣题集,后来是一些数学家的逸闻趣事,和科普读物。偶尔也看看范畴论(Category theory)。我逐渐认为计算机科学,以及算法终究还是数学的一个分支。回顾读书期间,我们的数学教学也许忽略了一些东西,例如帮助学生了解数学的历史,培养趣味性和幽默感等等。
如果再次重写《初等算法》这本书,也许不需要放入那些例子程序。而是可以加入更多数学元素,突出一下趣味性。如果有时间,我打算给中小学读者写一本名叫“Unplug”的书,不插电,不用电脑,不编写程序来解决生活中的问题。
当然,也有另一个可能,就是为了迎合主流的读者,将这本书用Scala和Java 8重写一遍。不过未来无法预测,很多时候,我们像布朗运动中的分子,只是迈着“醉汉的脚步”不断前行。
--
---
您收到此邮件是因为您订阅了 Google 网上论坛的“TopLanguage”群组。
--
---
您收到此邮件是因为您订阅了 Google 网上论坛的“TopLanguage”群组。