读算法简史:从美索不达米亚到人工智能时代02古老的算法

躺柒 2025-01-30 23:37:59

1. 苏美尔

1.1. 位于苏美尔地区的乌鲁克,是最古老的城市之一

1.2. 文字似乎是从印刻在湿黏土陶筹上的简单记号发展而来的

1.2.1. 陶筹是用来记录库存与货物交换的

1.2.2. 一个陶筹可能等同于一定数量的获得物或者一定头数的牲畜

1.3. 楔形(cuneiform)文字

1.3.1. 这个名字源于文字独特的“楔形”形状,那是用芦苇笔在湿黏土上压印出来的

1.3.2. 符号由几何形状的楔形图案组成

1.3.3. 铭文是通过在阳光下晒干潮湿泥板来保存的

1.3.4. 楔形文字记录了苏美尔语

1.4. 文字的发明定然改变了当时的社会

1.4.1. 泥板让跨越空间和时间的交流成为可能

1.4.2. 人们可以寄信了

1.4.3. 交易可以被记录下来,以备将来参考

1.4.4. 文字促进了公民社会的顺利运行和扩张

1.5. 公元前24世纪,阿卡德帝国的军队入侵了苏美尔

1.5.1. 随着政治权力的转移,阿卡德语成为泥板上的唯一语言

1.6. 公元前18世纪,巴比伦国王汉谟拉比重新统一了美索不达米亚诸城

1.6.1. 巴比伦城无可争议地成为美索不达米亚的文化中心

1.6.2. 巴比伦成了该地区的超级大国

1.6.3. 阿卡德语及其楔形文字成了整个中东地区国际外交的通用语

1.7. 经过1000多年的统治,巴比伦几乎没有抵抗就被波斯国王居鲁士大帝攻陷了

1.7.1. 波斯楔形文字开始在统治工作中占主流

1.7.2. 新泥板使用了波斯语和一套完全不同的符号

1.7.3. 古老的阿卡德文字使用率逐渐减少

1.7.3.1. 在巴比伦陷落4个世纪后,阿卡德语被弃用了

1.7.3.2. 很快,不再有人能理解古苏美尔语和阿卡德楔形文字符号了

1.8. 19世纪,欧洲考古学家开始研究美索不达米亚遗址

1.8.1. 他们的发掘工作包括探查那里的古代遗址

1.8.2. 对于翻译者们来说,贝希斯敦(Bīsitūn)铭文的发现让事情有了转机

1.8.2.1. 贝希斯敦铭文由文字伴随浮雕组成,浮雕描绘了大流士国王对戴手铐的囚犯进行惩罚的场面

1.8.2.2. 三种文字是用不同的语言写成的——古波斯语、埃兰语和巴比伦语

1.8.2.2.1. 古波斯语的一部分含义在千百年后仍有人能理解

1.8.2.2.2. 罗林森汇编并出版了那部分古波斯语文本的第一部完整译本

1.8.2.2.3. 以古波斯语文本的译本作为参考,罗林森和一群组织松散的爱好者成功地破译了巴比伦语文本

1.8.2.2.3.1. 这一突破是破解阿卡德和苏美尔泥板上文字意义的关键

1.8.2.2.3.2. 学者们对一块块泥板上的一个个符号进行研究后,苏美尔语、阿卡德语和巴比伦语的文字被破译了

1.9. 吉尔伽美什史诗

1.9.1. 主题也有关于公民社会日常管理事务的,比如法律、法律合同、账户和税收分类账

2. 美索不达米亚算法

2.1. 许多现存的美索不达米亚算法都是当时学习数学的学生们随手记下的

2.2. 巴比伦人使用的是六十进制数(sexagesimal)

2.2.1. 一个六十进制的数字系统有60个独一无二的数字(0-59)

2.2.2. 古巴比伦数字系统的唯一优势是表示三分之几比十进制更容易些

2.3. 计算地下蓄水池长度和宽度的算法

2.3.1. 可以追溯到汉谟拉比王朝(公元前1800年-公元前1600年),这个时期现在被称为古巴比伦时期

2.3.2. 文字表述颇为正式,其他古巴比伦算法也是这样

2.3.3. 一个蓄水池

2.3.3.1. 深度为3.33,挖出土的体积为27.78

2.3.3.2. 长度比宽度多0.83

2.3.3.3. 应当取深度3.33的倒数,得0.3

2.3.3.4. 乘以体积27.78,得8.33

2.3.3.5. 取0.83的一半,再取平方,得0.17

2.3.3.6. 加8.33,得8.51

2.3.3.7. 取平方根得2.92

2.3.3.8. 将这个数字复制得到两个,其中一个加上0.42,另一个减去0.42

2.3.3.9. 可以算出3.33是长度,2.5是宽度

2.3.4. 这个古巴比伦算法绝不简单

2.3.4.1. 用容积除以深度,得到蓄水池底部面积

2.3.4.2. 单纯地取这个面积的平方根,就会得到一个正方形底的长度和宽度

2.3.4.3. 必须进行调整才能得到所需的长方形底面

2.4. 巴比伦的数学里还有另外三个奇怪的现象

2.4.1. 小数点并不写出

2.4.1.1. 巴比伦学者必须根据上下文推断它的位置

2.4.2. 没有一个表示零的符号

2.4.3. 除法是通过乘以除数的倒数来做的

2.4.3.1. 会参考提前算好的倒数表和乘法表来加快计算速度

2.5. YBC 7289的泥板

2.5.1. 存放在耶鲁大学古巴比伦文物收藏中心

2.5.1.1. 可以追溯到公元前1800年至公元前1600年

2.5.2. 泥板上绘制了一个正方形,两条对角线分别连接了正方形的两对对角

2.5.2.1. 正方形的边长标为30个单位

2.5.2.2. 对角线的长度记为2的平方根乘以30

2.5.2.3. 表明当时的人们懂得毕达哥拉斯定理(勾股定理)

2.5.2.3.1. 在古希腊数学家毕达哥拉斯出生前1000年刻下来的

2.5.2.3.1.1. 这个算法是毕达哥拉斯发现的,还是他在旅行中学会的?

2.5.2.3.1.2. 这个定理是否已被世人遗忘,然后毕达哥拉斯独立地重新发现了它?

2.5.2.3.1.3. 美索不达米亚人还搞出了什么别的算法?

2.5.3. 计算2的平方根并不容易

2.5.3.1. 最简单的方法是亚历山大的赫伦(Heron of Alexandria)提出的近似算法

2.5.3.1.1. 赫伦生活在YBC 7289泥板被镌刻出来的1500年后(约公元10年-公元70年)

2.5.3.1.2. 赫伦的算法是把这个问题反过来问

2.5.3.1.2.1. 提出的问题是“哪个数字自己乘以自己等于2”

2.5.3.1.2.2. 对2的平方根提出一个猜测数

2.5.3.1.2.2.1. 2除以当前的猜测数

2.5.3.1.2.2.2. 所得数字加上当前的猜测数

2.5.3.1.2.2.3. 除以2得到一个新的猜测数

2.5.3.1.2.2.4. 当最新的两个猜测数几乎相等时,停止重复

2.5.3.1.2.2.5. 最新的猜测数就是2的平方根的近似值

>   2.5.3.1.2.3. 如果猜测数小于真实平方根的值,这个过程依然适用

2.5.3.1.2.3.1. 在这种情况下,用除法得到的数字过大

2.5.3.1.2.3.2. 真正的平方根的值就夹在这两个数之间。

>  2.5.3.1.3. 除法和求平均值的过程可以重复进行,进一步让估计值更准确  >   2.5.3.1.3.1. 经过连续的迭代,估计值会越来越接近真正的平方根的值>  2.5.3.1.4. 直到今天,赫伦的方法还被用来估算平方根>  2.5.3.1.5. 1996年,格雷格·费(Greg Fee)还使用了该算法的一个扩展版本,用于算出2的平方根到小数点后1000万位

2.6. 有一个指令是“把这个数字记在脑子里”,这就是现代计算机数据存储指令的前身

2.7. 巴比伦的算法似乎不包含明确的决策步骤(“如果-那么-否则”)

2.7.1. 如果-那么”规则被巴比伦人用来对非数学知识进行系统化

2.7.2. “如果-那么”结构也被用来记录医学知识和迷信

3. 埃及

3.1. 埃及象形文字的发明与美索不达米亚文字书写的发展大致处于同一时期

3.1.1. 由于埃及使用易腐烂的纸草卷轴进行书写,埃及数学留存至今的证据极少

3.2. 现存最著名的记录是亨利·莱因德(Henry Rhind)于1858年在卢克索购买的一张纸草卷轴

3.2.1. 莱因德纸草现保存在大英博物馆,是一份原始纸草的古代副本,可以追溯到公元前2000年左右

3.2.2. 其内容在本质上几乎都不是算法

3.2.3. 算法似乎不是古埃及数学中发展良好的分支

3.3. 亚历山大庞大的帝国被他的几位将军瓜分

3.3.1. 托勒密任埃及总督

3.3.1.1. 托勒密的第一个决定是把埃及的首都从孟菲斯迁到亚历山大

3.3.1.2. 建立了一个名为“缪斯神庙”(Mouseion)的研究机构

3.3.1.2.1. 就是博物馆

3.3.1.3. “缪斯神庙”本质上类似于一个现代研究机构,吸引了地中海沿岸的研究者、科学家、作家和数学家加入

3.3.1.4. 发现的任何材料都要被收缴,并在图书馆中增加其副本

3.4. 欧几里得可能是最伟大的亚历山大学者

3.4.1. 他的伟大作品《几何原本》是一本数学教科书

3.4.2. 广为人知的欧几里得算法包含在书的第七卷中

3.4.3. 欧几里得算法用于计算两个数的最大公约数(也称为GCD,或最大公因数)

3.4.3.1. 两个数的GCD可以通过列出两个数的所有约数并找出两者共有的最大约数找到

3.4.3.2. 这种方法适用于小数字,但对于大数字来说非常耗时

3.4.3.3. 欧几里得想出了一个更快的方法来求两个数的GCD,该方法具有只需进行减法运算的优点

3.4.3.3.1. 避免了烦琐的除法和乘法

3.4.3.4. 以一对数字作为输入

3.4.3.4.1. 重复以下步骤

3.4.3.4.1.1. 大数字减去小数字

3.4.3.4.1.2. 用得到的值替换一对数字里较大的那个

3.4.3.4.1.3. 当两个数字相等时,停止重复

3.4.3.4.1.4. 这两个数就等于GCD

3.4.3.5. 根据定义,两个输入之间的差值必然小于两个数中较大的那个数

3.4.3.5.1. 对数字变得越来越接近GCD

3.4.3.5.2. 在任何时候,一对数字及其差值都是GCD的倍数

3.4.3.5.3. 经过多次迭代,差异变得越来越小

3.4.3.5.4. 最终,差值为零

3.4.3.5.4.1. 当该情况发生时,两个数字等于GCD的最小倍数,也就是GCD乘以1

3.4.3.5.5. 这个版本的欧几里得算法是迭代运行的

3.4.3.5.5.1. 它包含了重复的步骤

3.4.3.6. 欧几里得的算法也可以用递归(recursion)的形式来表现

3.4.3.6.1. 递归发生在算法调用自身时,其关键是每当算法调用自己时,输入都会被简化

3.4.3.6.2. 以一对数字作为输入

3.4.3.6.2.1. 大数字减去小数字

3.4.3.6.2.2. 用得到的值替换较大的数字

3.4.3.6.2.3. 如果两个数字相等

3.4.3.6.2.3.1. 那么输出其中一个数字——它就是GCD

3.4.3.6.2.3.2. 否则将此算法应用于新的数字对

>  3.4.3.6.3. 它既有效又高效  >   3.4.3.6.3.1. 这不仅仅是功能上的优点  >   3.4.3.6.3.2. 它还是对称的,具有美感,形式优雅

3.4.3.7. 对于求两个大数字的最大公约数问题,欧几里得算法是一个意料之外的解决方案

3.4.3.7.1. 伟大的算法堪称解惑之诗

3.5. 寻找素数

3.5.1. 公元前3世纪,埃拉托色尼(Eratosthenes,约公元前276年-公元前195年)被任命为亚历山大图书馆馆长

3.5.1.1. 埃拉托色尼因测量地球的周长而闻名于世

3.5.1.2. 通过测量两个城市之间的距离,埃拉托色尼得到了亚历山大和赛伊尼之间地球弧的长度

3.5.1.3. 把这个数字与阴影长度的比值结合起来,他估算出了地球的周长

3.5.1.4. 他将两个城市之间的距离乘以50后得出的数字和地球实际周长误差很小

3.5.2. 素数难找是出了名的

3.5.2.1. 素数有无穷多个,但它们在数轴上是随机分布的

3.5.2.2. 即使使用现代计算机,发现新的素数也是很耗时间的

3.5.3. 埃拉托色尼发明了一种寻找素数的重要算法——埃拉托色尼筛法

3.5.3.1. 列出你希望从中找到素数的一串数字,从2开始

3.5.3.2. 重复以下步骤

3.5.3.2.1. 找出第一个没有被圈出来或画掉的数字

3.5.3.2.2. 把它圈出来

3.5.3.2.3. 画掉这个数字的所有倍数

3.5.3.2.4. 当所有的数字都被圈出来或者画掉的时候,停止重复

3.5.3.2.5. 圈出来的数字就是素数

3.5.3.3. 埃拉托色尼筛法的一个简便之处是它没有使用乘法

3.5.3.3.1. 由于倍数是按顺序产生的,一个接着一个,所以可以通过将圈出来的数字重复相加来产生

3.5.3.4. 缺点是它需要的存储空间很大

3.5.3.4.1. 对于寻找大量素数,筛法的存储复杂度就成为一个难题

3.5.3.4.2. 截至2018年3月,已知最大的素数有惊人的23249425位数

0 阅读:17

躺柒

简介:书既能读薄也能读厚,输出才能检验输入,完成才能完善。