算法历史中的“第一次”

算法一直是程序员们“难啃的骨头”。但早在计算机被发明以前,人们对于算法就已经研究了很长的时间。


算法历史上的每一个“第一次”,都为计算机的发展带来了重大影响。那算法为什么是计算机程序的灵魂?其实可以从它的发展史中略窥一二。


异步君将带领大家从算法的每个“第一次”开始,了解“好”算法的性质,还会送给大家一些算法的基础学习方法!


  

算法的每一个“第一次”


算法概念的第一次被提出


自古老的公元前1世纪开始,《周髀算经》就作为中国最古老的天文学和数学著作,在算法的历史上写下了浓墨重彩的一笔。


作为算经的十书之一,《周髀算经》采用最简便可行的方法确定天文历法,揭示日月星辰的运行规律,囊括四季更替,气候变化,包涵南北有极,昼夜相推的道理。为后来者的生活作息提供了有力保障。


经过几个世纪的发展,到公元9世纪,波斯数学家al-Khwarizmi第一次在数学上提出了“算法”这个概念——演算法(algorithm)。他提出的算法概念,仍旧沿用至今:


1.算术运算


指按照规定的法则和顺序对式题或算式进行运算,并求出结果的过程。包括:加法、减法、乘法、除法、乘方、开方等几种运算形式。


运算和计算略有区别,计算是指把横式中的数按运算符号和规定的顺序求得结果,可以按运算法则,也可以按口算或其他简便的方式直接求得结果。而运算则是指求得结果的过程。


2.关系运算


关系的基本运算有两类:一类是传统的集合运算(并、差、交等),另一类是专门的关系运算(选择、投影、连接、除法、外连接等),有些查询需要几个基本运算的组合,要经过若干步骤才能完成。


3.逻辑运算


逻辑运算又称布尔运算。布尔用数学方法研究逻辑问题,成功地建立了逻辑演算。他用等式表示判断,把推理看作等式的变换。这种变换的有效性不依赖人们对符号的解释,只依赖于符号的组合规律 。这一逻辑理论人们常称它为布尔代数。


历史上第一个算法


公元前330年,被人们称为“几何之父”的欧几里得出生了。在欧几里得生活的那个时期,几何学存在一个很大的缺点和不足,就是缺乏系统性。


这一时期的古希腊几何学,大多数是片断、零碎的知识,公理与公理之间、证明与证明之间并没有什么很强的联系性,更不要说对公式和定理进行严格的逻辑论证和说明。


于是欧几里得下定决心,要在有生之年完成对几何学的系统化理论化。由此,经过无数个日夜的撰写,人类史上第一个算法——欧几里得算法诞生了


对现在的计算机行业来说,欧几里得算法是目前最经典的几大算法之一。


历史上的第一个算法程序


19世纪80年代,“软件之母”Ada Byron为巴贝奇分析机编写了求解伯努利方程的程序。这是人类史上的第一个算法程序。 


巴贝奇分析机


Ada关于算法的研究实现了计算机科学的本质性飞跃。在她去世一百年之后的1953年,她之前所翻译《分析机概论》留下的笔记被重新公布,再一次震惊了世人。人们因此认为,Ada对现代计算机与软件工程造成了重大影响。


从现在的观点来看,Ada首先为了计算制作了“算法”,然后制作了“程序设计流程图”,这个珍贵的计划被认为是“第一件计算机程序”


“软件之母”Ada Byron


作为世界上的第一位程序员,Ada为编程的发展做出了极大的贡献。


第一次解决算法定义的难题


进入20世纪,算法得到了进一步的巨大发展。这个世纪,英国数学家图灵提出了著名的图灵论题,并提出一种假想的计算机的抽象模型,这个模型被称为图灵机。


图灵机的构造


所谓的图灵机就是指一个抽象的机器,它有一条无限长的纸带,纸带分成了一个一个的小方格,每个方格有不同的颜色,有一个机器头在纸带上移来移去。


机器头有一组内部状态,还有一些固定的程序。每个时刻,机器头都要从纸带上读入一个方格信息,然后结合内部状态查找程序表,再根据程序输出信息到纸带方格上,并转换自己的内部状态进行移动。


虽然图灵机十分地简单,但它可以用来模拟任何算法。图灵机对人们使用纸笔进行数学计算的过程进行了抽象,实现了用机器代替人类进行数学计算。图灵机的出现,解决了算法定义的难题。


算法是计算机程序的灵魂,掌握了算法,就可以离开发出优秀的程序更近一步。


「Have Fun ~ Tester !」

「FunTester」,一群有趣的灵魂,腾讯云&Boss认证作者,GDevOps官方合作媒体。


「点击阅读阅文,查看FunTester历史原创集合」


本文分享自微信公众号 - FunTester(NuclearTester)。
如有侵权,请联系 [email protected] 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章