![算法零基础一本通(Python版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/51/44510051/b_44510051.jpg)
1-1 计算机的算法
在科技时代,我们常使用计算机解决某些问题。为了让计算机可以了解人类的思维,我们将解决问题的方法用特定方式告诉计算机,这个特定方式就是计算机可以理解的程序语言。计算机会依据程序语言的指令,一步一步完成工作。
当使用程序语言解决工作上的问题时,我们需要知道应该使用什么方法,可以更快速、有效地完成工作。
例如,有一系列数字,我们想要找到特定数字,是否有更好的方法?
![](https://epubservercos.yuewen.com/6BDBC6/23721658309542706/epubprivate/OEBPS/Images/Figure-P11_4959.jpg?sign=1739195877-vAE612Lw2JuXDu4nzfcSERqUYhQ8Wdr8-0-88968f8dad12d64572b803a24eefcee5)
假设我们要找的数字是3,如果我们从左到右找寻,需要找寻5次;如果我们从中间找寻,只要1次就可以找到。其实找寻的方法,就是算法。
例如,有一系列数字,我们想将这一系列数字从小到大排序。
![](https://epubservercos.yuewen.com/6BDBC6/23721658309542706/epubprivate/OEBPS/Images/Figure-P12_4960.jpg?sign=1739195877-LzrEXwO8tYHWhuwMZCRS6VqCf4ZlU6m2-0-0c73ab4f3c19251f20afb74294156f3e)
为了完成上述从小到大将数字排列,也有许多方法,这些方法也可以称为算法。
目前世界公认的第一个算法是欧几里得算法,出现在欧几里得(Euclid,公元前325—前265年)所著的《几何原本》(古希腊语:),这是一本数学著作,也是现代数学的基础。著作共有13卷,在第8卷中就有讨论欧几里得算法,这个算法又称辗转相除法。欧几里得是古希腊数学家,又被称为几何学之父。
现代美国有一位非常著名的计算机科学家唐纳德·欧文·克努特(Donald Ervin Knuth,1931—),他是美国斯坦福大学荣誉教授退休,1972年图灵奖(Turing Award)得主,在他所著的《计算机程序设计的艺术》(The Art of Computer Programming)中,对算法(algorithm)做了特征归纳:
(1)输入:一个算法必须有0个或更多的输入。
(2)有限性:一个算法的步骤必须是有限的。
(3)明确性:算法描述必须是明确的。
(4)有效性:算法的可行性可以获得正确的执行结果。
(5)输出:输出就是计算结果,一个算法必须要有1个或更多的输出。
注 唐纳德的著作The Art of Computer Programming曾被《科学美国人》(Scientific American)杂志评估为与爱因斯坦的《相对论》并论的20世纪最重要的12本物理科学专论之一。
所以我们也可以将算法过程与结果归纳做下列的定义:
输入 + 算法 = 输出