什么是算法?
了解使算法高效的不同特性。
一个算法是一系列明确、精确、无歧义且可机械执行的简单指令,通常用于完成特定目标。例如,以下是一个用于演唱那首令人讨厌的歌曲《墙上99瓶啤酒》的算法,适用于任意起始瓶数:
1def 墙上99瓶啤酒(n): 2 for i in range(n, 0, -1): 3 print(str(i) + " 瓶啤酒在墙上," + str(i) + " 瓶啤酒,") 4 print( 5 "拿走一瓶,传下去," 6 + str(i - 1) 7 + " 瓶啤酒在墙上。" 8 ) 9 print() 10 11 print("墙上没有啤酒,也没有啤酒。") 12 print("去商店买些新的," + str(n) + " 瓶啤酒在墙上。") 13 14 15墙上99瓶啤酒(99) # 从99瓶开始
说明
-
第1行: 我们定义了一个名为
墙上99瓶啤酒的函数,接受一个参数n。 -
第2至12行: 我们使用循环打印出《99瓶啤酒》歌曲的歌词,循环范围是从
n递减到1。 -
第15行: 我们调用
墙上99瓶啤酒()函数,并传入参数99,以从99瓶开始演唱这首歌。
“算法”一词的词源
“算法”一词并非如一些对算法心存恐惧的古典学者所猜测的那样,源自希腊语词根 arithmos(),意为“数字”,以及 algos(),意为“痛苦”。实际上,这个词是9世纪波斯学者穆罕默德·伊本·穆萨·花拉子米(Muhammad ibn Musa al-Khwarizmi)名字的讹变。花拉子米最著名的著作是《代数学简明书》(al-Kitab al-mukhtasar fıhısab al-ğabr wa’l-muqabala),现代词汇“代数”即由此而来。在另一部著作中,他描述了现代十进制记数法——特别是使用一个小圆圈或 来表示缺失的数量,这一方法早在几个世纪前就在印度发展起来。他在这部著作中所描述的方法,无论是用书写数字还是用算珠进行计算,后来在英语中被称为 algorism(或 augrym),其数字则被称为 ciphers(数码)。
尽管位置值记数法和花拉子米的著作早已被部分欧洲学者知晓,但“印度-阿拉伯”数字系统是在中世纪意大利数学家兼商人莱昂纳多·皮萨诺(Leonardo of Pisa),即更广为人知的斐波那契,的推动下才在欧洲普及开来。得益于他在1202年出版的《计算之书》(Liber Abaci),书写数字逐渐取代了当时称为算盘的计数板和手指计算,成为13世纪欧洲主流的计算方式——这并非因为书写十进制数字更容易学习或使用,而是因为它们提供了可追溯的计算过程。数码在西欧并未广泛使用,直到活字印刷术出现后才真正普及,而当廉价纸张在19世纪初变得充足时,才实现全面普及。
最终,“algorism”一词通过民间词源演变,受到希腊语 arithmos(以及可能之前提到的 algos)的影响,演变为现代的“algorithm”(算法)。因此,直到最近,“算法”一词一直特指使用阿拉伯数字进行位置值算术的机械计算方法。那些熟练掌握这些程序快速可靠执行的人被称为 algorists(算术师)、computators(计算者),或更简单地称为 computers(计算机)。