相信一定有人问?我们有这么多经典优秀的算法书:
- TAOCP: Donald E. Knuth, The art of computer programming;
- CLRS: Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest and Clifford Stein. ``Introduction to Algorithms, Second Edition''
- Robert Sedgewick: 的Algorithms in XXX Language系列
甚至一些讲授计算机体系结构,以及编程的好书也有大量的算法介绍:
- SICP: Hal Abelson and Gerald Jay Sussman. Structure and interpretation of Computer programs
- Jon Bentlay 的 Programming Pearls
- Rob Pike, Brian Kernighan. The practice of programming
- TCPL: Dennis Ritchie, Brian Kernighan. The C programming language
...
为什么还要写AlgoXY这样一本算法书?重复发明轮子么?
我写AlgoXY的的目的其实已经和初衷不一样了:当我最初学习函数式编程的时候(先是C++ template meta programming,然后是Scheme/Lisp然后是Haskell)我觉得函数式编程好玩。但是总写Toy code很没有意思。一旦开始严肃的编写程序,我发现世界上所有的函数式编程初学者都会面临一个问题:如何实现算法?
我们在学校学习过算法,我们读过上面所有的算法书,并且认真完成了大作业和练习题。可是一旦我们开始用函数式编程,并且遇到算法题目,我们却不知道如何实现?(你也许不相信,尝试用一个纯粹的FP语言,写个红黑树试试看)。
Dijkstra 认为 programing = algorithm + data structure,不解决函数式算法和数据结构的问题,我们就不能真正意义上进行函数式编程!
有读者会问:我不相信你是第一个遇到这个问题的人,并且世界上一定早有聪明人解决这个问题了。
是的,函数式编程的先驱们已经有一些成果了:
- Chris Okasaki的Purely Data structures
- Richard Bird的Peals of functional algorithm design
都是非常优秀的(虽然小众)的经典。
AlgoXY做的,是想把这两类经典之间,架起一座桥梁:让来自传统编程世界的人,知道如何一一将他掌握的算法和数据结构,用函数式的方式实现出来。
随着AlgoXY近4年时间的写作。我逐渐意识到算法可以完全用另外一种方式表达:数学公式.
我们的传统教科书用伪代码或者流程图(有的还配上真实代码片段)来表述算法和数据结构,使我们根深蒂固地认为,算法是一门独特的科学。他和我们从初中、高中到大学学习的数学不一样。举个例子(来自Joe Armstrong的Programing in Erlang)
中学时,我们定义
x = 1
x + y = 3
我们推导出y = 3 - x = 2
可是,我们第一堂计算机课,却看到这样的东西:
x = 1
x = x + 1
这怎么可能?这不是意味着 0 = 1么?
但是AlgoXY打算告诉读者,算法是数学的一个分支。AlgoXY的所有算法,都用纯数学公式加以定义。AlgoXY的写作,是一个回归数学的过程。
AlgoXY介绍给读者另外一种计算机模型:除了图灵机模型之外的在1930年代由Alonzo Church(邱奇)给出的lambda演算模型。
它使得我们可以用数学公式描述计算机程序。
AlgoXY有力作不能及的地方:
-- 对于逻辑式编程的领域没有涉及;
-- 对于计算模型本身的讨论没有涉及;
-- 对于类型系统的实现和原理没有涉及;
-- 对于编译原理和操作系统都没有涉及;
AlgoXY没有写完,恐怕还要经过些年,具体时间我说不好。
AlgoXY这个词有什么意思么?AlgoXY = Algorithm X Y, X, Y是我们在中学数学课上最先接触的变量。所以AlgoXY的意思是elementary algorithms。
也就是最最基础的算法的意思。
有读者问AlgoXY为什么用英文写作?并且没有中文版?因为我的时间非常有限,我只能维护一个语言的版本。我经过权衡,认为如果英文版写得足够好,它被翻译成中文的可能性,比中文版写得好,被翻译成英文的可能性大得多。
面临严肃的函数式编程,有人浅尝辄止:又回到传统编程领域了(或者使用新的传统范式语言,如go等等),我决心继续走下去。
分享到:
相关推荐
scheduing algorithm book1
Computer Science - Sorting & Searching Algorithm Book
第二版算法导论 中文翻译版+英文原版书+英文习题解答
什么是遗传算法__What_is_Genetic_Algorithm_
有关遗传算法的论文,是英文的,可以作为翻译用
本资源包括六本英文原版算法书,对研究算法有积极帮助作用。
C语言头文件 algorithmC语言头文件 algorithmC语言头文件 algorithmC语言头文件 algorithmC语言头文件 algorithmC语言头文件 algorithmC语言头文件 algorithmC语言头文件 algorithmC语言头文件 algorithmC语言头文件...
YASA(又一个主轴算法)是 Python 中的一个命令行睡眠分析工具箱。YASA的主要功能是: 多导睡眠图数据的自动睡眠分期(参见预印本文章)。 事件检测:单通道或多通道 EEG 数据上的睡眠纺锤波、慢波和快速眼球运动。...
Algorithm-algorithm.zip,这句话的意思是,算法是为计算机程序高效、彻底地完成任务而创建的一组详细的准则。
Algorithm2e is an environment for writing algorithms in LATEX2e. An algorithm is defined as a floating object like figures. It provides macros that allow you to create different sorts of key words, ...
The topics covered in this book are An overview of decision trees and random forests A manual example of how a human would classify a dataset, compared to how a decision tree would work How a ...
I got it from the internet. Algorithm book in C
the book is an algorithm implementation treasure trove and putting all of these implementations in one place was no small feat The list of implementations [and] extensive bibliography make the book ...
赠送jar包:pentaho-aggdesigner-algorithm-5.1.5-jhyde.jar; 赠送原API文档:pentaho-aggdesigner-algorithm-5.1.5-jhyde-javadoc.jar; 赠送源代码:pentaho-aggdesigner-algorithm-5.1.5-jhyde-sources.jar; ...
烟花算法程序大全Fireworks Algorithm
algorithm algorithm STL 算法 algorithm_头文件_说明 algorithm algorithm STL 算法 algorithm_头文件_说明 algorithm algorithm STL 算法 algorithm_头文件_说明
2.Algorithm Gossip: 费式数列 3. 巴斯卡三角形 4.Algorithm Gossip: 三色棋 5.Algorithm Gossip: 老鼠走迷官 6.Algorithm Gossip: 老鼠走迷官(二) 7.Algorithm Gossip: 骑士走棋盘 8.Algorithm Gossip: 八皇 9....
From the Algorithm point view give explaination about how to implement it.