伪·从零开始学算法 - 1.2 - 算法的历史

我在写 1.1 节的时候本来是要写这个的,但是突然就忘了……就作为一节来写吧。

顺便说一下,1946 年的今天,世界上第一台通用电脑——电子数值积分计算机在美国宾夕法尼亚大学正式启用,就是那个 ENIAC。

别只想着情人节,要不是几十年来科技的进步,你们才没机会在朋友圈、空间什么的大秀恩爱。

Cpl. Irwin Goldstein正在设置ENIAC一个函数表上的开关

“算法”一词的来历

中文的“算法”一词至少在唐代就出现了,在此之前也有“术”“算术”等词,最早出现在《周髀算经》《九章算术》。而且,“算法”一词的含义从古到今几乎没有发生变化。

英文的“算法”(algorithm)一词来源于 9 世纪波斯数学家花拉子米(al-Khwārizmī,780?~850?)——就是那个解决一次方程及一元二次方程的方法的人。花拉子米的拉丁文译名是“Algoritmi”。英文对“算法”原译为“algorism”,意思是花拉子米的运算法则,在 18 世纪演变为“algorithm”。这个词出现于 12 世纪,指的是用阿拉伯数字进行算术运算的过程。

苏联在1983年9月6日发行的纪念邮票,以纪念花拉子米1200岁生辰

历史上的一些著名算法

对于算筹、算盘的操作的方法,我不知道是否属于算法。

约公元前 300 年记载于《几何原本》中的辗转相除法(欧几里得算法)被人们认为是史上第一个算法,可以求两数的最大公约数。直到今天,它还有很大的用途。

《九章算术》给出了四则运算、最大公约数、最小公倍数、开平方根、开立方根、求素数的埃拉托斯特尼筛法,线性方程组求解的算法。

《九章算术》

三国时代的刘徽给出求圆周率的算法:刘徽割圆术,比阿基米德割圆术得出的结果更加精确。祖冲之使用该方法将圆周率的准确值计算到了 3.1415926 和 3.1415927 之间,保持了世界最准确圆周率达 900 年之久。

刘徽割圆术原理

唐代以来,历代更有许多专门论述“算法”的专著。宋代的秦九韶提出的秦九韶算法,直到今天仍是多项式求值比较先进的算法。

在 9 世纪的阿拉伯世界,花拉子米写成《代数学》,其对解决一次方程及一元二次方程的方法催生了代数——大家熟知的求多元(尤其是二元)一次方程和一元二次方程的解法就来源于此。700 多年后,三次方程、四次方程的求根公式才被得出。

牛顿于 1671 年提出的牛顿法,相比于二分法可以更快速地求函数的根或者是函数的极值。

牛顿法

17 世纪之后算法的发展

17 世纪起,早期的机械计算机出现了。从加法到傅里叶变换,它们的功能越来越强大。

Pascaline,1642年布莱兹·帕斯卡的算术机,主要用作加法器

工业革命带来了纺织业的变革,出现了可以自动织出带花纹的布的织布机,它们使用打孔卡输入指令。这种设计也被英国数学家查尔斯·巴贝奇设计的分析机使用。

伦敦科学馆中巴贝奇分析机的复制品

拜伦的女儿爱达·勒芙蕾丝(Ada Byron;Ada, Countess of Lovelace)于 1842 年为这个想象中的机器编写求解伯努利微分方程的程序,因此爱达·勒芙蕾丝被大多数人认为是世界上第一位程序员。但是,这个机器因为种种原因,直到巴贝奇去世也没有被真正地制造出来。

爱达·勒芙蕾丝

后来的数学家对算法的贡献大多在于数理逻辑的构建上,在此我因为知识缺乏,看不懂资料,不便讲述。感兴趣的话可以看一下参考资料。

20 世纪的英国数学家图灵提出了著名的图灵论题,并提出一种假想的计算机的抽象模型,这个模型被称为图灵机。图灵机的出现解决了算法定义的难题,图灵的思想对算法的发展起到了重要的作用。

图灵机的艺术表示

在此之后,算法更偏向于计算机科学领域,各种解决不同问题的算法也层出不穷,涉及排序、统计、线性规划、搜索、压缩等方面。

到了现在,随着人工智能和机器学习的发展,涉及到神经网络的算法变得越发重要。

拓展阅读

The Best of the 20th Century: Editors Name Top 10 Algorithms

参考资料