Logo
Section 1 / 6

什么是算法?

了解使算法高效的不同特性。

导入

什么是算法?

了解使算法高效的不同特性。

一个算法是一系列明确、精确、无歧义且可机械执行的简单指令,通常用于完成特定目标。例如,以下是一个用于演唱那首令人讨厌的歌曲《墙上99瓶啤酒》的算法,适用于任意起始瓶数:

...

墙上99瓶啤酒(n)‾    对于 i←n 递减到 1演唱 “i 瓶啤酒在墙上,i 瓶啤酒,”演唱 “拿走一瓶,传下去,i−1 瓶啤酒在墙上。”演唱 “墙上没有啤酒,也没有啤酒,”演唱 “去商店买些新的,n 瓶啤酒在墙上。”\underline{墙上99瓶啤酒(n)} \\ \space\space\space\space 对于\space i ←n\space 递减到\space 1\\ \hspace{1cm} 演唱\space “i\space 瓶啤酒在墙上,i\space 瓶啤酒,” \\ \hspace{1cm} 演唱\space “拿走一瓶,传下去,i − 1\space 瓶啤酒在墙上。” \\ \hspace{0.35cm} 演唱\space “墙上没有啤酒,也没有啤酒,” \\ \hspace{0.35cm} 演唱\space “去商店买些新的,n\space 瓶啤酒在墙上。”

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(αˊϱιθμoˊς\acute{\alpha} \varrho \iota \theta \mu \acute{o}\varsigma),意为“数字”,以及 algos(αˊ,λγoς\overset{,}{\acute{\alpha}} \lambda \gamma o\varsigma),意为“痛苦”。实际上,这个词是9世纪波斯学者穆罕默德·伊本·穆萨·花拉子米(Muhammad ibn Musa al-Khwarizmi)名字的讹变。花拉子米最著名的著作是《代数学简明书》(al-Kitab al-mukhtasar fıhısab al-ğabr wa’l-muqabala),现代词汇“代数”即由此而来。在另一部著作中,他描述了现代十进制记数法——特别是使用一个小圆圈或 s⋅ifr\underset{\cdot}{s}ifr 来表示缺失的数量,这一方法早在几个世纪前就在印度发展起来。他在这部著作中所描述的方法,无论是用书写数字还是用算珠进行计算,后来在英语中被称为 algorism(或 augrym),其数字则被称为 ciphers(数码)。

...

尽管位置值记数法和花拉子米的著作早已被部分欧洲学者知晓,但“印度-阿拉伯”数字系统是在中世纪意大利数学家兼商人莱昂纳多·皮萨诺(Leonardo of Pisa),即更广为人知的斐波那契,的推动下才在欧洲普及开来。得益于他在1202年出版的《计算之书》(Liber Abaci),书写数字逐渐取代了当时称为算盘的计数板和手指计算,成为13世纪欧洲主流的计算方式——这并非因为书写十进制数字更容易学习或使用,而是因为它们提供了可追溯的计算过程。数码在西欧并未广泛使用,直到活字印刷术出现后才真正普及,而当廉价纸张在19世纪初变得充足时,才实现全面普及。

最终,“algorism”一词通过民间词源演变,受到希腊语 arithmos(以及可能之前提到的 algos)的影响,演变为现代的“algorithm”(算法)。因此,直到最近,“算法”一词一直特指使用阿拉伯数字进行位置值算术的机械计算方法。那些熟练掌握这些程序快速可靠执行的人被称为 algorists(算术师)、computators(计算者),或更简单地称为 computers(计算机)。

入门

乘法算法