算法一直是程序员们“难啃的骨头”。但早在计算机被发明以前,人们对于算法就已经研究了很长的时间。
算法历史上的每一个“第一次”,都为计算机的发展带来了重大影响。那算法为什么是计算机程序的灵魂?其实可以从它的发展史中略窥一二。
异步君将带领大家从算法的每个“第一次”开始,了解“好”算法的性质,还会送给大家一些算法的基础学习方法!
算法的每一个“第一次”
算法概念的第一次被提出
自古老的公元前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测试框架架构图初探 -
10万QPS,K6、Gatling和FunTester终极对决! -
单机12万QPS——FunTester复仇记 -
初遇Postman,SayHi的三种方式 -
生产环境中进行自动化测试 -
JMeter吞吐量误差分析 -
IntelliJ中基于文本的HTTP客户端 -
物联网测试 -
Selenium4 IDE,它终于来了 -
绑定手机号性能测试 -
Java多线程编程在JMeter中应用 -
电子书网站爬虫实践 -
Socket接口异步验证实践 -
Groovy在JMeter中处理cookie
「点击阅读阅文,查看FunTester历史原创集合」
本文分享自微信公众号 - FunTester(NuclearTester)。
如有侵权,请联系 [email protected] 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。