The Wayback Machine - https://web.archive.org/web/20221025113656/https://baike.sogou.com/kexue/d10392.htm

算法

编辑
Flowchart of an algorithm (Euclid's algorithm) for calculating the greatest common divisor (g.c.d.) of two numbers a and b in locations named A and B. The algorithm proceeds by successive subtractions in two loops: IF the test B ≥ A yields "yes" (or true) (more accurately the number b in location B is greater than or equal to the number a in location A) THEN, the algorithm specifies B ← B − A (meaning the number b − a replaces the old b). Similarly, IF A > B, THEN A ← A − B. The process terminates when (the contents of) B is 0, yielding the g.c.d. in A. (Algorithm derived from Scott 2009:13; symbols and drawing style from Tausworthe 1977).

在数学和计算机科学中,算法是如何解决一类问题的明确规范。算法可以执行计算、数据处理、自动推理和其他任务。

作为一种有效的方法,算法可以在有限的空间和时间内用定义明确的形式语言[1] 来表示,以计算函数[2] [3] 。从初始状态和初始输入(可能为空)开始,[4] 指令描述了一种计算,当执行该计算时,该计算通过有限的[5] 数量的明确定义的连续状态,最终产生的“输出”[6] 并终止于最终结束状态。从一种状态到下一种状态的转变不一定是 明确的;一些被称为随机算法的算法包含随机输入。[7]

算法的概念已经存在了几个世纪。希腊数学家使用 Eratosthenes筛子中的算法寻找素数,欧几里德算法寻找两个数的最大公约数。

“算法”一词本身源自9世纪数学家muḥammad· ibn Mūsā al-Khwārizmī的拉丁化算法。后来成为现代算法概念的部分 规范化始于1928年 David Hilbert提出的解决判定问题 (决策问题)的尝试。后来的 规范化被 看作试图定义“有效可计算性”[8] 或“有效方法”。[9] 这些 规范化包括1930年、1934年和1935年的 Gödel–Herbrand–Kleene递归函数,1936年的 Alonzo Church的λ微积分,1936年的 Emil Post公式1,以及1936-37年和1939年 Alan Turing的图灵机。

1 词源编辑

“算法”一词起源于将 Muhammad ibn Musa al-Khwarizmi的名字拉丁化,这是 算法书的第一步。[10][11]Al-Khwārizmī(阿拉伯语:الخوارزمي‎,波斯语:خوارزمی‎,约780-850年)是巴格达智慧宫的波斯数学家、天文学家、地理学家和学者,他的名字的意思是“Khwarazm的本地人”, Khwarazm是大伊朗的一部分,现在在乌兹别克斯坦。[12][13]

大约在825年, al-Khwarizmi写了一篇关于印度-阿拉伯数字系统的阿拉伯语论文,该论文在12世纪被翻译成拉丁文,题目是《 Algoritmi de numero Indorum》。这个标题的意思是“印第安人数字上的 Algoritmi”,其中“ Algoritmi”是译者对 Al-Khwarizmi名字的拉丁化。[14]Al-Khwarizmi是中世纪晚期被 欧洲阅读最广泛的数学家,主要是通过他的另一本书《代数》。[15] 在中世纪晚期的拉丁语中,algorismus,英语中的“algorism”,都是他的名字的 传讹,仅仅意味着“十进制数字系统”。在15世纪,在希腊单词ἀριθμός“number”(参见“算术”)的影响下,拉丁语单词被改为algorithmus,相应的英语术语“algorithm”在17世纪首次得到证实;现代意义是在19世纪引入的。[16]

在英语中,它首先在1230年左右 被使用,然后在1391年被乔叟使用。英语采用了法语术语,但是直到19世纪末,“算法”才具有现代英语中的含义。

这个词的另一个早期用法是从1240年开始的,在 Alexandre de Villedieu撰写的一本名为《 Carmen de Algorismo》的手册中。它是这样开始的:

Haec algorismus ars praesens dicitur, in qua / Talibus Indorum fruimur bis quinque figuris.

其翻译为:

算法是一门通过现在我们使用印度数字的艺术, 数字是2乘以5。

这首诗有几百行长,总结了用印度骰子或印度数字的新风格计算的艺术。

2 非正式定义编辑

有关“算法”定义的各种观点的详细介绍,请参见算法特性。[17] 非正式定义可以是“一组精确定义操作序列的规则”。[18]这将包括所有计算机程序,包括不执行数值计算的程序。一般来说,程序只有在最终停止时才是算法。[19]

算法的一个典型例子是欧几里德算法,用于确定两个整数的最大公约数;上面的流程图描述了一个示例(还有其他示例),并且在后面的部分中作为一个示例。

Boolos,Jeffrey & 1974,1999在下面的引文中给出了这个词的非正式含义:

没有人能写得足够快、足够长或足够小...(小得没有限度, 你会试图写在分子、原子、电子上),通过用某种符号一个接一个地写出它们的名字来列出一个可列举的无限集合的所有成员。但是人类可以做一些同样有用的事情,在某些可列举的无限集合的情况下:对于任意有限的n,他们可以给出明确的指令来确定集合的第n个成员。这样的指令可以非常明确地给出,其形式是计算机或者只能对符号进行非常基本的运算的人可以 做到的。[20]

“可枚举无限集合”是指其元素可以与整数一一对应的集合。因此, Boolos和 Jeffrey说,一个算法意味着一个过程的指令,该过程从任意的“输入”整数或者理论上可以任意大的整数“创建”输出整数 。因此,一个算法可以是一个代数方程,比如y = m+n——两个任意的“输入变量”m和n,它们产生一个输出y。但是,不同作者对这个概念的定义表明,这个词隐含的意义远远不止于此,大约是(对于加法例子):

精确的指令(以“计算机”理解的语言)  [21] 用于快速、高效的“良好”  [22] 过程,该过程指定“计算机”(机器或人类,配备有必要的内部包含的信息和能力)的“移动”,  [23] 来查找、解码,然后处理任意输入的整数/符号m和n,符号+和=...和“有效地”  [24] 在“合理”时间内,在指定地点以指定格式  生成  [25] 输出整数y。

算法的概念也被用来定义可判定性的概念。这个概念对于解释 正式系统是如何从一小组公理和规则开始形成的至关重要。在逻辑上,一个算法完成所需的时间是无法测量的,因为它显然与我们习惯的物理维度无关。这种不确定性是正在进行的工作的特征,这种不确定性导致无法找到既适合具体(在某种意义上)又适合抽象术语使用的算法定义。

3 形式化编辑

算法对计算机处理数据的方式至关重要。许多计算机程序都包含算法,这些算法详细说明了计算机执行特定任务(以特定顺序)应该执行的特定指令,例如计算员工工资或打印学生成绩单。因此,算法可以被认为是图灵完备系统可以模拟的任何操作序列。主张这一论点的作者包括 Minsky (1967)、 Savage (1987)和 Gurevich (2000):

Minsky:“但我们也会坚持,图灵...任何可以“自然地”被称为有效的程序,实际上可以通过(简单的)机器来实现。尽管这看起来有些极端,但争论...对它有利是很难反驳的”。[26]

Gurevich:"...图灵支持他论文的非正式论点证明了一个更强有力的论点:每种算法都可以由图灵机模拟...根据 Savage [1987),算法是由图灵机定义的计算过程。[27]

通常,当算法与处理信息相关联时,数据可以从输入源读取,写入输出设备并存储以供进一步处理。存储的数据被视为执行算法的实体的内部状态的一部分。实际上,状态存储在一个或多个数据结构中。

对于一些这样的计算过程,算法必须被严格定义:在所有可能出现的情况下以其应用的方式指定。也就是说,任何有条件的步骤都必须系统地 逐一处理;每个案例的标准必须清晰(并且是可计算的)。

因为算法是精确步骤的精确列表,所以计算顺序对于算法的运行总是至关重要的。指令通常被认为是明确列出的,并且被描述为从“顶部”开始到“底部”,这种思想被更正式地描述为控制流。

到目前为止,关于算法形式化的讨论已经假定了命令式编程的前提。这是最常见的概念,它试图以离散的“机械”方式描述一项任务。这种形式化算法概念的独特之处在于赋值操作,它设置变量的值。它源于“记忆”作为便笺簿的直觉。下面有一个这样的例子。

关于算法构成的一些替代概念,请参见函数编程和逻辑编程。

3.1 表达算法

算法可以用多种符号表示,包括自然语言、伪代码、流程图、drakon图表、编程语言或控制表(由解释器处理)。算法的自然语言表达往往冗长而模糊,很少用于复杂或技术性的算法。伪代码、流程图、drakon图表和控制表是表达算法的结构化方式,避免了自然语言语句中常见的许多歧义。编程语言主要用于以计算机可以执行的形式表达算法,但通常被用作定义或记录算法的一种方式。

有很多种可能的表示,可以将一个给定的图灵机程序表示为一系列的机器表(见有限状态机、状态转换表和控制表),流程图和drakon图(见状态图),或者表示为一种称为“四元组”的基本机器代码或汇编代码(见图灵机)。

算法的表示可以分为图灵机描述的三个公认的层次:[28]

1高级描述
"...散文来描述算法,忽略实现细节。在这个级别上,我们不需要提及机器是如何管理其磁带或磁头的。”
2实施说明
"...散文用来定义图灵机使用磁头的方式和在磁带上存储数据的方式。在这个层次上,我们不给出状态或转换函数的细节。”
3 形式化描述
最详细的“最低级别”给出了图灵机的“状态表”。 有关在所有三个级别中描述的简单算法“添加m+n”的示例,请参见算法#示例。

4 设计编辑

算法设计是指解决问题和工程算法的方法或数学过程。算法设计是运筹学中许多求解理论的一部分,如动态规划和分治法。设计和实现算法设计的技术也被称为算法设计模式,[29] 例如模板方法模式和装饰模式。

算法设计的一个最重要的方面是创建一个具有高效运行时间的算法,也称为“大 O”

算法开发的典型步骤:

1.问题定义

2.模型的开发

3.算法说明

4.设计算法

5.检查算法的正确性

6.算法分析

7.算法的实现

8.程序测试

9.文件准备

5 履行编辑

Logical NAND algorithm implemented electronically in 7400 chip

实现大多数算法都是以计算机程序的形式实现的。然而,算法也可以通过其他方式实现,例如在生物神经网络(例如,人类大脑实现算法或昆虫寻找食物)、电路或机械设备中。

6 计算机算法编辑

Flowchart examples of the canonical Böhm-Jacopini structures: the SEQUENCE (rectangles descending the page), the WHILE-DO and the IF-THEN-ELSE. The three structures are made of the primitive conditional GOTO (IF test=true THEN GOTO step xxx) (a diamond), the unconditional GOTO (rectangle), various assignment operators (rectangle), and HALT (rectangle). Nesting of these structures inside assignment-blocks result in complex diagrams (cf Tausworthe 1977:100, 114).

在计算机系统中,算法基本上是软件开发人员用软件编写的逻辑实例, 使预定的“目标”计算机能够有效地从给定(可能为空)输入生成输出。一个最优算法,即使在旧硬件中运行,也会比在更高效的硬件中运行的非最优(时间复杂度更高)算法产生更快的结果;这就是为什么算法,像计算机硬件一样 ,被认为是技术的原因 。

“优雅”(紧凑)程序,“良好”(快速)程序:“简单和优雅”的概念非正式地产生 于 Knuth, 准确的产生于Chaitin:

Knuth:"...我们想要一些定义松散的美学意义上的好算法。一个标准...执行算法所花费的时间长度....其他标准是算法对计算机的适应性、简单性和优雅性等”[30]

Chaitin: "...一个程序是“优雅的”,我的意思是它是产生输出的最小可能的程序  。”  [31]

Chaitin在他的定义前写道:“我会证明你不能证明一个程序是‘优雅的’”——这样的证明可以解决  停机问题(同上)。

算法与可由算法计算的函数:对于给定的函数,可能存在多种算法。这是真的,即使没有扩展程序员可用的指令集。 Rogers观察到“是的...区分算法概念(即过程)和可由算法计算的函数概念(即过程产生的映射)很重要。同一函数可能有几种不同的算法”。[32]

不幸的是,在好(速度)和优雅(紧凑)之间可能会有一个折衷——一个优雅的程序可能比一个不那么优雅的程序需要更多的步骤来完成一个计算。下面是一个使用欧几里德算法的例子。

计算机 ,计算模型:计算机(或人类“计算机”[33])是一种受限制的机器,一种盲目遵循指令的“离散确定性机械装置”[34] [35] Melzak和 Lambek的原始模型[36] 将这一概念简化为四个要素:(1)离散的、可区分的位置,(2)离散的、不可区分的计数器[37] (3)代理,以及(4)相对于代理能力有效的指令列表。[38]

Minsky在他的《可计算性的非常简单的基础》中描述了 Lambek的“算盘”模型的一个更相似的变体。[39] Minsky的机器通过它的五条(或六条,取决于如何计数)指令按顺序运行,除非有条件的“ IF–THEN GOTO”或无条件的“ GOTO”改变了程序的顺序。除了 停止, Minsky的机器还包括三个赋值(替换, 置换)[40] 操作:零(例如位置内容被0: L←0替换)、后继(例如 L← L+1)和递减(例如 L ← L − 1)。[41] 程序员很少用如此有限的指令集编写“代码”。但是 Minsky (像 Melzak和Lambek一样)表明,他的机器是只包括 四种通用类型的指令的图灵机:条件GOTO、无条件GOTO、赋值/替换/替换和 停止。然而,为了 图灵机完整性,还需要一些不同的赋值指令(例如, Minsky机器的减量、增量和零/清除/空指令);他们的具体规格多少取决于 设计者。无条件的GOTO是一种便利;它可以通过将专用位置初始化为零来构建,例如指令“Z←0”;此后,指令如果Z=0,那么转到xxx是无条件的。

算法模拟:计算机 语言:Knuth建议读者,“学习算法的最好方法是尝试一下 ……立即拿起笔和纸,举一个例子”。[42] 但是真实事物的模拟或执行呢?程序员必须将算法翻译成模拟器/计算机 能够有效执行的语言。 Stone举了一个例子:当计算二次方程的根时,计算机必须知道如何求平方根。如果没有,那么算法要想有效,就必须提供一套提取平方根的规则。[43]

这意味着程序员必须知道一种相对于目标计算代理(计算机 )有效的“语言”。

但是模拟应该使用什么模型呢? Van Emde Boas观察到,“即使我们把复杂性理论建立在抽象而不是具体的机器上,模型选择的任意性仍然存在。正是在这一点上,模拟的概念出现了”。[44] 当测量速度时,指令集很重要。例如,欧几里德算法中计算余数的子程序,如果程序员有一条“模数”指令可用,而不仅仅是减法(或者更糟的是,只有 Minsky的“减量”),执行起来会快得多。

结构化编程,规范结构:根据 Church–Turing理论,任何算法都可以通过已知的图灵完全模型来计算,根据 Minsky的演示,图灵 完备只需要四种指令类型——条件GOTO,无条件GOTO,赋值, 停止。Kemeny和Kurtz观察到,虽然无条件GOTOs和有条件IF-THEN GOTOs的“无纪律”使用会导致“意大利面代码”,但程序员可以只使用这些指令编写结构化程序;另一方面,“用结构化语言编写结构不良的程序也是可能的,而且不会太难”。[45] Tausworthe增加了三个Böhm-Jacopini规范 结构:[46] 序列, IF-THEN-ELSE,和 WHILE-DO,还有两个: DO-WHILE和案例。[47] 结构化程序的另一个好处是它有助于用数学归纳法证明正确性。[48]

标准流程图符号[49]:称为流程图的图形助手,提供了一种描述和记录算法(和一个计算机程序)的方法。就像 Minsky机器的程序流程一样,流程图总是从页面的顶部开始向下进行。它的主要符号只有四个:显示程序流的有向箭头、矩形(序列、 GOTO)、菱形( IF-THEN-ELSE)和点( OR-tie)。 Böhm–Jacopini规范结构是由这些原始形状组成的。子结构可以“嵌套”在矩形中,但前提是上部结构只有一个出口。图中显示了这些符号及其用于构建规范结构的用途。

7 例子编辑

7.1 算法示例

An animation of the quicksort algorithm sorting an array of randomized values. The red bars mark the pivot element; at the start of the animation, the element farthest to the right-hand side is chosen as the pivot.

最简单的算法之一是在随机顺序的数字列表中找到最大的数字。找到解决方案需要查看列表中的每个数字。由此可以得出一个简单的算法,可以用英语散文的高级描述来表述:

高级描述:

  1. 如果集合中没有数字,那么就没有最高的数字。
  2. 假设集合中的第一个数字是集合中最大的数字。
  3. 对于集合中的每个剩余数:如果该数大于当前最大数,则认为该数是集合中的最大数。
  4. 当集合中没有剩余要迭代的数时,将当前最大的数视为集合中最大的数。

(准)形式描述: 以下是更正式的伪代码语句编码或洋泾浜编码:

Algorithm LargestNumber
  输入:数字列表 。
  输出:列表中最大的数字 

  如果 l .尺寸 = 0返回null  最大的[0]
  对于每一个 项目,做
    如果 项目 > 最大的那么      最大的项目
  返回 最大的

  • "←" denotes assignment. For instance, "largestitem" means that the value of largest changes to the value of item.
  • "return" terminates the algorithm and outputs the following value.

7.2 欧几里得算法

The example-diagram of Euclid's algorithm from T.L. Heath (1908), with more detail added. Euclid does not go beyond a third measuring and gives no numerical examples. Nicomachus gives the example of 49 and 21: "I subtract the less from the greater; 28 is left; then again I subtract from this the same 21 (for this is possible); 7 is left; I subtract this from 21, 14 is left; from which I again subtract 7 (for this is possible); 7 is left, but 7 cannot be subtracted from 7." Heath comments that "The last phrase is curious, but the meaning of it is obvious enough, as also the meaning of the phrase about ending 'at one and the same number'."(Heath 1908:300).

欧几里得计算两个数的最大公约数算法在他的第七卷《初等数论》中作为命题二出现 元素[50] 欧几里得这样提出了这个问题:“给定两个互不质数,找到它们最大的公共测度”。他将“[数”定义为]由单位组成的群体:计数数,不包括零的正整数。“测量”是放置较短的测量长度 s 连续(q 时间)沿着更长的长度 l 直到剩余部分 r 小于较短的长度 s[51] 用现代话说,余数 r = lq×s, q 是商,或余数 r 是“模数”,除法之后剩下的整数分数部分。[52]

欧几里得方法要成功,起始长度必须满足两个要求:(1)长度不能为零,(2)减法必须“正确”;也就是说,一个测试必须保证两个数字中较小的那个被从较大的那个中减去(或者,两个可以相等,所以它们的相减得到零)。

欧几里得的原始证明增加了第三个要求:两个长度不能互相质数。欧几里得这样规定是为了构造一个归谬反证法证明,证明两个数的共同测度实际上是 最好的[53] 虽然尼科马库斯算法与欧几里得算法相同,但当这些数互为质数时,它们的公共测度会得到数“1”。所以,准确地说,下面是真正的尼科马库斯算法。

A graphical expression of Euclid's algorithm to find the greatest common divisor for 1599 and 650. 1599 = 650×2 + 299 650 = 299×2 + 52 299 = 52×5 + 39 52 = 39×1 + 13 39 = 13×3 + 0

欧几里得算法的计算机语言

只有几条指令 类型 需要执行欧几里得算法——一些逻辑测试(条件GOTO)、无条件GOTO、赋值(替换)和减法。

  • A 位置 用大写字母表示,如S、A等。
  • 位置中的变化量(数字)用小写字母书写,并且(通常)与位置名称相关联。例如,起始位置L可能包含数字 l = 3009。

欧几里得算法的一个不雅程序

"Inelegant" is a translation of Knuth's version of the algorithm with a subtraction-based remainder-loop replacing his use of division (or a "modulus" instruction). Derived from Knuth 1973:2–4. Depending on the two numbers "Inelegant" may compute the g.c.d. in fewer steps than "Elegant".

下面的算法被构造成克努特的欧几里得和尼科马库斯的四步版本,但是它没有使用除法来寻找余数,而是使用较短长度的连续减法 s 从剩余长度 r 直到 r 小于 s。粗体显示的高级描述改编自克努特1973:2–4:

输入:

1 [分成两个位置,L和S把数字 ls 代表两个长度]:
  输入L,S
2 [初始化R:剩下的长度 r 等于起始/初始/输入长度 l]:
  R ← L

E0:[确保 rs。]

3 [确保两个数字中较小的在S中,较大的在R中]:
  如果R > S,则
    L的内容是更大的数字,所以略过交换-步骤4,5和6:
    转到步骤6
  其他
    交换R和s的内容。
4   L ← R(第一步是多余的,但对后面的讨论很有用)。
5   R ← S
6   S ← L

E1:[找到余数]:直到剩余长度 r 在R小于较短的长度 s 在S中,重复减去测量数 s 剩余长度的S r 在r区

7 如果S > R,则
    完成测量
    GOTO 10
  其他
    再次测量,
8   R←R-S
9   [余数循环]:
    GOTO 7。

E2:[余数为零吗?]:要么(I)最后一个度量是精确的,R中的余数为零,程序可以停止,要么(ii)算法必须继续:最后一个度量在R中留下的余数小于s中的度量数。

10 如果R = 0,则
     这样做
     转到步骤15
   其他
     继续到步骤11,

E3:[互通 sr]:欧几里得算法的难点。使用余数 r 来测量以前较小的数字 s;我只是一个临时位置。

11  L ← R
12  R ← S
13  S ← L
14  [重复测量过程]:
    GOTO 7

输出:

15 [完成。s包含最大公约数]:
   打印

完成:

16 停止,结束,停止。

欧几里得算法的优美程序

The following version of Euclid's algorithm requires only six core instructions to do what thirteen are required to do by "Inelegant"; worse, "Inelegant" requires more types of instructions.[需要解释] “优雅”的流程图可以在本文的顶部找到。在(非结构化)基础语言中,步骤被编号,指令 LET [] = [] 是用←符号表示的赋值指令。

  5 REM Euclid's algorithm for greatest common divisor
  6 PRINT "Type two integers greater than 0"
  10 INPUT A,B
  20 IF B=0 THEN GOTO 80
  30 IF A > B THEN GOTO 60
  40 LET B=B-A
  50 GOTO 20
  60 LET A=A-B
  70 GOTO 20
  80 PRINT A
  90 END

“优雅”是如何运作的:代替外部的“欧几里得环”,“优雅”在两个“共环”之间来回移动,A > B环计算A←A-B,B ≤ A环计算B←B-A。 s (新的测量长度)和减数可以成为新的 r (要测量的长度);换句话说,减法的“意义”颠倒了。

以下版本可用于面向对象语言:

// Euclid's algorithm for greatest common divisor
int euclidAlgorithm (int A, int B){
     A=Math.abs(A);
     B=Math.abs(B);
     while (B!=0){
          if (A>B) A=A-B;
          else B=B-A;
     }
     return A;
}

7.3 测试欧几里得算法

一个算法做了作者希望它做的事情吗?一些测试用例通常会给核心功能带来一些信心。但是测试是不够的。对于测试用例,一个来源[54] 使用3009和884。克努特建议40902,24140。另一个有趣的例子是两个互质数字14157和5950。

但是“例外情况”[55] 必须被识别和测试。当R > S,S > R,R = S时,“不优雅”会正常运行吗?“优雅”也是如此:B > A,A > B,A = B?(对所有人都是)。当一个数为零,两个数都为零时会发生什么?(“不雅”在所有情况下永远计算;当A = 0时,“优雅”将永远计算。)如果 否定 输入了数字?分数?如果输入数字,即由算法/程序计算的函数的域,只包括包括零的正整数,那么零的故障表明算法(以及实例化它的程序)是一个部分函数而不是一个总函数。一个值得注意的例外是阿丽亚娜5号飞行501火箭故障(1996年6月4日)。

用数学归纳法证明程序的正确性:Knuth演示了数学归纳法在欧几里得算法“扩展”版本中的应用,并提出了“一种适用于证明任何算法有效性的通用方法”。[56] 陶斯沃特提出,一个程序复杂性的度量标准是其正确性证明的长度。[57]

7.4 欧几里得算法的度量和改进

优雅(紧凑)与善良(速度):只有六个核心指令,“优雅”是明显的赢家,相比之下,“不雅”是十三个指令。然而,“不雅”是 更快的 (它以更少的步骤到达HALT)。算法分析[58] 指出为什么会是这种情况:“优雅”确实如此 每个减法循环中的条件测试,而“不合格”只做一个。由于算法(通常)需要多次循环, 平均 做“B = 0”会浪费很多时间仅在计算完余数后才需要的测试。

算法可以改进吗?:一旦程序员判断一个程序“合适”和“有效”——也就是说,它计算出作者想要的函数——那么问题就变成了,它能被改进吗?

“不雅”的紧凑性可以通过消除五个步骤来提高。但是柴丁证明了压缩算法不能由广义算法自动完成;[59] 相反,它只能启发式地完成;即通过详尽的搜索(例如在《忙碌的海狸》中找到的例子)、反复试验、聪明、洞察力、归纳推理的应用等。观察步骤4、5和6在步骤11、12和13中重复。与“优雅”的比较暗示了这些步骤以及步骤2和3可以被取消。这将核心指令的数量从十三个减少到八个,这使得它在九个步骤中比“优雅”更“优雅”。

移动“B=0”可以提高“优雅”的速度在两个减法循环之外进行测试。这种变化需要增加三条指令(B = 0?,A = 0?,GOTO)。现在“优雅”计算示例数的速度更快;对于任何给定的A、B和R、S是否总是这种情况,需要详细的分析。

8 算法分析编辑

知道给定算法理论上需要多少特定资源(例如时间或存储)通常很重要。已经开发了用于分析算法以获得这种定量答案(估计)的方法;例如,上面的排序算法有一个时间要求为 O(n),使用大 O符号,n作为列表的长度。在任何时候,算法只需要记住两个值:迄今为止找到的最大数字,以及它在输入列表中的当前位置。因此,如果不计算存储输入数字所需的空间,则称其空间要求为 O(1),如果计算了,则称其为O (n)。

与其他算法相比,不同的算法可以用不同的指令集在更少或更多的时间、空间或“努力程度 ”内完成相同的任务。例如,当用于排序列表或数组上的表查找时,二进制搜索算法( 时间复杂度为 O(log n))优于顺序搜索( 时间复杂度为O (n))。

8.1 形式化方法 与 经验方法

算法的分析和研究是计算机科学的一门学科,通常在不使用特定编程语言或实现的情况下进行抽象实践。在这个意义上,算法分析类似于其他数学学科,因为它关注算法的基本属性,而不是任何特定实现的细节。伪代码通常用于分析,因为它是最简单和最通用的表示。然而,最终,大多数算法通常在特定的硬件/软件平台上实现,并且它们的算法效率最终使用真实代码进行测试。对于“一次性”问题的解决,特定算法的效率可能不会产生重大影响(除非n非常大),但对于为快速交互、商业或长寿命科学应用而设计的算法来说,这可能是至关重要的。从小n到大n的缩放经常暴露出 效率低下的算法,而这些算法在其他方面是优良的。

经验测试很有用,因为它可能会发现影响性能的意外交互。基准可以用来比较程序优化后算法的潜在改进前后效率提高 。然而,经验测试不能取代形式分析,以 直接的方式进行也不是小事。[60]

8.2 执行效率

为了说明即使在成熟的算法中也可能有潜在的改进,与快速傅立叶变换算法(在图像处理领域中大量使用)相关的最近一项重大创新可以将医学成像等应用的处理时间减少 高达1000倍。[61] 一般来说,速度的提高取决于问题的特殊性质,这在实际应用中非常常见。[62] 如此大规模的加速使得 大量使用图像处理的计算设备(如数码相机和医疗设备)消耗更少的能量。

9 分类编辑

有多种方法对算法进行分类,每种方法都有自己的优点。

9.1 通过实现方法

算法分类的一种方法是通过实现方式。

int gcd(int A, int B) {
    if (B == 0)
        return A;
    else if (A > B)
        return gcd(A-B,B);
    else
        return gcd(A,B-A);
}
Recursive C implementation of Euclid's algorithm from the above flowchart

递归
递归算法是一种反复调用(引用)自身,直到某个条件(也称为终止条件)匹配的算法,这是函数编程的常用方法。迭代算法使用循环这样的重复结构,有时使用堆栈这样的附加数据结构来解决给定的问题。有些问题自然适用于这种或那种实现。例如,河内的塔使用递归实现是很好理解的。每个递归版本都有一个等价的(但可能或多或少复杂)迭代版本,反之亦然。
逻辑学的
算法可以被视为受控逻辑演绎。这个概念可以表达为:算法=逻辑+控制。  [63] 逻辑组件表示可以在计算中使用的公理,而控制组件决定演绎应用于公理的方式。这是逻辑编程范例的基础。在纯逻辑编程语言中,控制组件是固定的,算法是通过只提供逻辑组件来指定的。这种方法的吸引力在于优雅的语义:公理的改变会导致算法中定义明确的改变。
串行、并行或分布式
算法的讨论通常假设计算机一次执行一条算法指令。那些计算机有时被称为串行计算机。为这种环境设计的算法称为串行算法,而不是并行算法或分布式算法。并行算法利用计算机体系结构,其中 多个处理器可以同时处理一个问题,而分布式算法利用与计算机网络相连的多台机器。并行或分布式算法将问题分成更对称或不对称的子问题,并将结果收集在一起。这种算法中的资源消耗不仅是每个处理器上的处理器周期,而且是处理器之间的通信开销。一些排序算法可以有效地并行化,但是它们的通信开销很 大。迭代算法通常是可并行化的。有些问题没有并行算法,被称为固有串行问题。
确定性或非确定性
确定性算法在算法的每一步都通过精确的决策来解决问题,而非确定性算法通过猜测来解决问题,尽管通过使用试探法可以使典型的猜测更加准确。
精确或近似
虽然许多算法都 能得到精确的解,但近似算法寻求更接近真实解的 近似解。 近似解可以通过使用确定性策略 或随机策略来达到。这种算法对许多难题都有实用价值。近似算法的一个例子是背包问题,其中有一组给定的项目。它的目标是打包背包以获得最大的总价值。每件物品都有一定的重量和价值。可以携带的总重量不超过某个固定的数字X 。因此,解决方案必须考虑物品的重量及其价值。  [64]
量子算法
他们在量子计算的现实模型上运行。该术语通常用于那些看起来本质上是量子的算法,或者使用量子计算的一些基本特征,如量子叠加或量子纠缠。

9.2 通过设计 范例

算法分类的另一种方法是通过它们的设计方法或范例。有一定数量的范例,每一个都不同。此外,这些类别中的每一个都包括许多不同类型的算法。一些常见的范例是:

暴力或彻底搜索
暴力搜索或穷举搜索这是一种 比较初级的方法,尝试每一种可能的解决方案,看看哪个是最好的。  [65]
分而治之方法
分治法分治算法反复地将一个问题的实例简化为同一问题的一个或多个较小的实例(通常递归地),直到这些实例小到足以容易地解决。分治的一个例子是 归并排序。在将数据划分成段之后,可以对每段数据进行排序,并且可以在 攻克阶段通过合并段来获得整个数据的排序。分治法的一个更简单的变体叫做 递减和 攻克算法,它解决一个相同的子问题,并使用这个子问题的解来解决更大的问题。 分治法将问题分成多个子问题,因此 攻克阶段比递减和攻克 算法更复杂。 递减和攻克算法的一个例子是 二分查找算法。
搜索和枚举
许多问题(例如下棋)可以被建模为图形上的问题。图探索算法指定了在图中移动的规则,并对这类问题很有用。该类别还包括搜索算法、分支和绑定枚举以及回溯。
随机算法
这种算法随机(或伪随机)做出一些选择。它们在寻找问题的近似解时非常有用,因为在这些问题中,寻找精确的解是不切实际的(见下面的启发式方法)。对于其中一些问题,众所周知,最快的近似必须包含一些随机性。[66]对于某些问题,多项式时间复杂度的随机算法是否是最快的算法, 是一个被称为P对NP问题的开放性问题。这种算法有两大类: 蒙特卡罗算法以高概率返回正确答案。例如, RP是在多项式时间内运行的子类。 拉斯维加斯算法 总是返回正确的答案,但是它们的运行时间只有概率界限,例如ZPP。

降低复杂性
这项技术涉及到通过将一个难题转化为一个更广为人知的问题来解决这个难题,对此我们有( 充满希望的)渐近最优算法 。目标是找到一种简化算法,其复杂性不受最终简化算法的支配。例如,一种用于寻找未排序列表中的中间值的选择算法包括首先对列表进行排序( 代价较高的部分),然后拉出排序列表中的中间元素( 代价较低的部分)。这种技术也被称为转换和 攻克。
回溯法
在这种方法中, 多个解决方案是增量构建的,当确定它们不能生成有效的解决方案时,这些方案就会被放弃。

9.3 优化问题

对于优化问题,有更具体的算法分类;这种问题的算法可以属于上述一个或多个一般类别,也可以属于以下类别之一:

线性规划
当搜索线性等式和不等式约束的线性函数的最优解时,问题的约束可以直接用于产生最优解。有些算法可以解决这类问题,例如流行的单纯形算法。  [66] 线性规划可以解决的问题包括有向图的最大流问题。如果一个问题还要求一个或多个未知数必须是整数,那么它就被归入整数规划。如果能够证明整数值的所有限制都是表面的,即无论如何解满足这些限制,线性规划算法可以解决这样的问题。在一般情况下,根据问题的难度,使用专门的算法或找到近似解的算法。
动态规划
当一个问题显示出最优子结构(意味着问题的最优解可以由子问题的最优解构造)和重叠的子问题(意味着相同的子问题用于解决许多不同的问题实例)时,称为动态规划的更快的方法避免了重新计算已经计算的解。例如,Floyd–Warshall算法 , 通过使用从所有相邻顶点到目标的最短路径,可以找到加权图中顶点到目标的最短路径。动态编程和记忆 是相辅相成的。动态规划和分治法的主要区别在于子问题在分治法中或多或少是独立的,而子问题在动态规划中是重叠的。动态编程和直接递归的区别在于递归调用的缓存或记忆。当子问题是独立的并且没有重复时,记忆化没有帮助;因此,动态编程不是所有复杂问题的解决方案。通过使用记忆化或维护已经解决的子问题表,动态规划将许多问题的指数性质降低到多项式复杂性。
贪婪方法
贪心算法类似于动态规划算法,它通过检查子结构来工作,在这种情况下不是检查 问题而是检查 给定的解决方案。这种算法从一些解决方案开始,这些解决方案可能是以某种方式给出或构建的,并通过做一些小的修改来改进它。对于某些问题,他们可以找到最优解,而对于另一些问题,他们停留在局部最优,即算法不能改进了 但不是最优的解。 贪心算法最常用的用途是寻找最小生成树,在这种情况下,用这种方法可以找到最优解。 Huffman Tree, Kruskal, Prim, Sollin是 贪心算法,可以解决这个优化问题。
启发式方法
在优化问题中,在寻找最优解是 不现实的情况下,启发式算法可以用来寻找接近最优解的解。随着算法的 进行,它们越来越接近最优解。原则上,如果运行无限长的时间,他们会找到最佳的解决方案。他们的优点是可以在相对较短的时间内找到一个非常接近最优的解决方案。这些算法包括局部搜索、禁忌搜索、模拟退火和遗传算法。其中一些,像模拟退火,是非确定性算法,而其他的,像禁忌搜索,是确定性的。当已知非最优解的误差界限时,该算法被进一步归类为近似算法。

9.4 按研究领域

每个科学领域都有自己的问题,需要高效的算法。一个领域的相关问题经常一起研究。一些示例类是搜索算法、排序算法、 归并算法、数值算法、图形算法、字符串算法、计算几何算法、组合算法、医学算法、机器学习、密码学、数据压缩算法和解析技术。

领域往往相互重叠,一个 领域的算法进步可能会改善其他 领域的算法进步,有时这些 领域完全不相关。例如,动态规划是为了优化工业中的资源消耗而发明的,但现在被用于解决许多领域的 一大系列问题。

9.5 按复杂性

算法可以根据完成所需的时间和输入大小进行分类:

  • 恒定时间:如果算法所需的时间相同,不管输入大小如何。例如对数组元素的访问。
  • 线性时间:如果时间与输入大小成比例。例如遍历列表。
  • 对数时间:如果时间是输入大小的对数函数。例如二进制搜索算法。
  • 多项式时间:如果时间是输入大小的幂。例如, 冒泡排序法具有二次时间复杂度。
  • 指数时间:如果时间是输入大小的指数函数。例如暴力搜索。

一些问题可能有不同复杂性的多种算法,而其他问题可能没有算法或没有已知的有效算法。也有从一些问题到其他问题的映射。因此, 结果表明,基于最优算法的复杂度,将问题本身分类,而不是将算法划分为等价类更合适。

10 连续算法编辑

形容词“连续”在应用于“算法”一词时可以表示:

  • 对表示连续量的数据进行运算的算法,即使这些数据是用离散近似表示的——这种算法是在数值分析中研究的;
  • 微分方程形式的一种算法,在模拟计算机上对数据连续运行。[67]

11 法律问题编辑

算法本身通常不具备专利性。在美国,仅由抽象概念、数字或信号的简单操作组成的权利要求不构成“过程”(USPTO 2006),因此算法不可申请专利(如 Gottschalk v. Benson案)。然而算法的实际应用有时是可以申请专利的。例如,在  Diamond v. Diehr案中,应用简单的反馈算法来帮助合成橡胶固化被认为是可申请 专利的。软件专利极具争议性,而且有很多备受批评的专利涉及算法,尤其是数据压缩算法,如 Unisys的LZW专利。

此外,一些加密算法有导出限制(请参见加密导出)。

12 历史:“算法”概念的发展编辑

12.1 古代近东

算法在古希腊被使用。两个例子是 Eratosthenes的筛子,在[ Nicomachus的《算术导论》中有所描述,[68][69] 第9.2章,欧几里德算法,在欧几里德的《元素》(公元前300年)中首次有所描述。[69] 巴比伦 泥板文书描述并使用算法程序来计算重大天文事件的时间和地点。[69]

12.2 离散和可区分的符号

计数标记:为了记录他们的羊群,他们的粮食袋和他们的钱,古人使用计数法:积累石头或在棍子上划的标记,或者用粘土制作离散的符号。通过巴比伦人和埃及人 对标记和符号的使用,最终罗马数字和算盘得到了发展( Dilson,第16-41页)。计数标记在图灵机和后图灵机计算中使用的一元数字系统算法中表现突出。

12.3 作为数字“占位符”的符号操作:代数

古希腊几何学家(欧几里得算法)、印度数学家 Brahmagupta和波斯数学家 Al-Khwarizmi (术语“ 十进位计算法”和“算法”是从他 的名字中派生出来的)以及西欧数学家的工作使在莱布尼茨的微积分推理器概念(约1680年)中达到了顶峰 :

早于他所处时代整整一个半世纪 ,莱布尼茨提出了一 种逻辑代数,这 种代数将像普通代数规定操纵数字的规则一样规定操纵逻辑概念的规则.[70]

12.4 具有离散状态的机械装置

时钟: Bolter将重量驱动时钟的发明  誉为“中世纪欧洲的关键发明”,特别是边缘擒纵机构[71] 它为我们提供了机械钟的滴答声。“精确的自动机器”[72] 从13世纪开始,立即 催生了“机械自动机”,最终 催生了“计算机器”——19世纪中期 Charles Babbage和 Ada Lovelace伯爵夫人的差分机和分析机 。[73] Lovelace被认为是第一个设计用于计算机处理的算法的人—— Babbage的分析机 , 被认为是第一个真正的图灵完整的计算机而不仅仅是计算器——因此Lovelace 有时被称为“历史上的第一个程序员”,尽管 Babbage的第二个设备的完整实现要等到她死后几十年才能实现。

逻辑机器1870年—— Stanley Jevons的“逻辑算盘”和“逻辑机器”:技术问题是当布尔方程以类似于现在被称为卡诺图的形式出现时,要简化布尔方程。 Jevons (1880)首先描述了一个简单的“算盘”,由“木条”组成,木条上有 指针,指针被 设计成可以机械地挑选出逻辑组合的任何部分或类别...然而,最近,我把系统简化为一种完全机械的形式,并因此把整个间接推理过程具体化为所谓的逻辑机器。他的机器配备了“某些可移动的木棒”和“脚下有21个键,像钢琴等的键一样……”。有了这台机器,他可以分析“三段论或任何其他简单的逻辑论证”。[74]

1870年,他在皇家学会的研究员面前展示了这台机器。[75] 然而,另一位逻辑学家 John Venn在他1881年的《符号逻辑》中对这一努力持偏见:“我对有时被称为逻辑机器的兴趣或重要性没有很高的 评价...在我看来,目前已知或可能被发现的任何发明都不值得被称为逻辑机器”; 到算法特性中查看更多。但他也不甘示弱,提出了“一个有点类似于 Jevon教授算盘的计划... 又一次,对应于 Jevons教授的逻辑机器,以下发明可以描述。我更喜欢称它为逻辑图机器...但我认为它可以完全做到任何逻辑机器合理预期的一切”。[76]

提花织机、 Hollerith穿孔卡、电报和电话——机电继电器: Bell和 Newell (1971年)指出,提花织机(1801年)、 Hollerith卡的前身 (穿孔卡,1887年)和“电话交换技术”是导致第一批计算机发展的根源。[77] 到19世纪中叶,电话的前身电报已经在全世界使用,它对字母的离散和可区分的编码是“点和破折号”,这是一种常见的声音。到了19世纪末,  自动收报机纸条(约19世纪70年代)开始使用,就像1890年美国人口普查中Hollerith 卡的使用一样。然后是电传打字机( 大约在1910年),在 打孔纸上使用 Baudot码。

机电继电器的电话交换网络(发明于1835年)是以数字加法设备的发明者  George Stibitz (1937年) 的工作为基础的。当他在贝尔实验室工作时,他观察到机械计算器和齿轮的“累赘”使用。“1937年的一个晚上,他回到家,打算验证他的想法...修补工作结束后, Stibitz建造了一个二进制加法装置”。[78]

Davis (2000)观察到机电继电器的特殊重要性(其两个“二进制状态”打开和关闭):

直到从20世纪30年代开始,使用继电器的机电计算器得到发展,机器才被制造出 Babbage所设想的范围。“  [79]

12.5 从19世纪到20世纪中期的数学

符号和规则:接连不断地,   George Boole (1847,1854)、 Gottlob Frege (1879)和 Giuseppe Peano (1888-1889)的数学运算 将算术简化为由规则操纵的符号序列。 Peano的《算术原理》,由一种新方法(1888年)提出,是“用符号语言对数学进行公理化的第一次尝试”。[80]

但是 Heijenoort给了Frege  (1879)这样的 赞誉: Frege  的作品“也许是逻辑史上最重要的一部作品。...其中我们看到了一种“公式语言”,这是一种语言特征,一种用特殊符号写成的语言,“用于纯粹的思考”,也就是说,没有修辞修饰...由根据明确规则操纵的特定符号构成”。[81]Frege 的工作被 Alfred North Whitehead和 Bertrand Russell在其《数学原理》(1910-1913)中进一步简化和 扩充。

悖论:与此同时,一些令人不安的悖论出现在 著作中,特别是 Burali-Forti悖论(1897)、 Russell悖论(1902-03)和 Richard悖论。[82] 由此产生的考虑导致 Kurt Gödel的论文(1931年)——他特别引用了说谎者的悖论——将递归规则完全简化为数字。

有效计算能力:为了解决 Hilbert在1928年精确定义的判定问题 ,数学家们首先开始定义“有效方法”或“有效计算”或“有效计算能力”的含义(即,一个会成功的计算)。接下来,Alonzo Church、Stephen Kleene和J.B. Rosser 的λ演算[83] 根据 Gödel的工作,按照 Jacques Herbrand的建议(参见 Gödel1934年的普林斯顿讲座)和 Kleene后来的简化,对“一般递归”进行了精细的定义。[84] Church的证明是[85] 判定问题 是不可解决的, Emil Post对有效计算能力的定义是,一个工人盲目地遵循一系列指令,在一系列房间里向左或向右移动,在那里或者标记或擦除一张纸,或者观察这张纸,然后对下一条指令做出是或否的决定。[86] Alan Turing用他的“a-[自动-]机器[87]证明判定 问题是无法解决的——实际上几乎与 Post的“公式”相同,J. Barkley Rosser用“机器”来定义“有效方法”。[88] S.C. Kleene提出的“ Church论文”的前身,他称之为“论文一”,[89] 几年后 Kleene重命名他的论文为“Church 的论文”[90] 和提出“ Turing的论文”。[91]

12.6 Emil Post (1936)和 Alan Turing (1936-37,1939)

Emil Post (1936)对“计算机”(人类)的行为描述如下:

"...其中涉及两个概念:一个是符号空间,在这个空间中,从问题到答案的工作将被执行;另一个是一组固定的不可改变的方向。 他的符号空间是 “双向无限序列的空间或盒子...问题解决者或工作人员要在这个符号空间中移动和工作,能够在一个盒子里工作,一次只能在一个盒子里工作....一个盒子只允许两种可能的情况,即空的或未标记的,并且其中有一个标记,比如一个垂直的笔画。 “有一个盒子被挑选出来,叫做起点。...一个 特定的问题是用符号形式在被画上记号的有限数量的盒子[即输入]给出的 。同样,答案[(即输出)将以符号形式由这种被标记的盒子配置给出...

“适用于一般问题的一组 指示在适用于每个特定问题时建立了确定性过程。这一过程只有在达到[类型(C)的方向时才终止,[即停止]”。  [92]

Alan Turing's statue at Bletchley Park

Alan Turing的作品[93] 早于 Stibitz的作品(1937);还不知道 Stibitz是否知道 Turing的工作。 Turing的传记作者认为图灵 Turing使用打字机一样的模型源于 小时候的兴趣:“艾伦小时候就梦想发明打字机;图灵夫人有一台打字机,他 可能是从问自己把打字机叫做‘机械’是什么意思开始的。[94] 鉴于莫尔斯电码和电报、自动收报机和电传打字机的普及,我们[是谁?]可能猜想所有这些都是影响。

Turing——他的计算模型现在被称为图灵机——和 Post一样,开始于对人类计算机的分析,他把分析简化为一组简单的基本运动和“ 思维状态”。但是他更进一步,创造了一台机器作为计算数字的模型。[95]

“计算通常是通过在纸上写下某些符号来完成的。我们可以假设这张纸像一本儿童算术书一样被分成正方形...我假设计算是在一维纸上进行的,也就是说,在分成正方形的磁带上。我还假设可以打印的符号数量是有限的... 计算机在任何时候的行为都是由他观察到的符号和他当时的“思维 状态”决定的。我们可以假设计算机在某一时刻可以观察到的符号或正方形的数量有一个界限。如果他想观察更多,他必须使用连续的观察。我们还将假设需要考虑的 思维状态的数量是有限的... “让我们想象一下,由计算机执行的操作被分解成“简单的操作”,这些操作非常简单,很难想象它们会被进一步分解。”  [96]

Turing的归约产生了以下结果:

“因此,简单的操作必须包括:

"(a)观察到的一个方块上的符号发生变化

"(b)观察到的一个正方形向先前观察到的一个正方形的L个正方形内的另一个正方形的变化。

“可能其中一些变化必然会引起 思维状态的变化。因此,最一般的单一操作必须被视为以下操作之一:

"(A) 符号的可能变化以及 思维状态的可能变化。

(B) 观察到的正方形的可能变化,以及思维状态 的可能变化

"我们现在可以建造一台机器来完成这台计算机的工作."[96]

几年后,图灵用这种有力的表达扩展了他的分析(论文,定义):

如果一个函数的值可以通过一些纯粹的机械过程找到,那么这个函数就被称为是“可有效计算的”。尽管很容易直观地理解这一概念,但还是希望有一些更明确的、数学上可表达的定义...[:他讨论了定义的历史,就像上面提到的 Gödel, Herbrand, Kleene, Church, Turing, and Post一样]...我们可以从字面上理解这句话,理解为一个可以被机器执行纯粹的机械过程 。有可能以某种形式给出这些机器结构的数学描述。这些思想的发展 引出了作者对可计算函数的定义,以及对可有效计算的可计算性 的识别...。

“我们将使用表达式“可计算函数”来表示可由机器计算的函数,并且我们让“可有效计算的”指的是直观的概念,而不与这些定义中的任何一个进行特殊的标识”。[97]

12.7 J.B. Rosser (1939)和S.C. Kleene  (1943)

J. Barkley Rosser以下列方式定义了“有效的[数学]方法”(增加了斜体):

“‘有效方法’在这里是以一种意义相当特殊的方法 来使用的,该方法的每一个步骤都被精确地确定,并且肯定会在有限的步骤中产生答案。有了这种特殊的含义,迄今为止已经给出了三种不同的精确定义。[,他的脚注5;请参见下面的讨论]。其中最简单的陈述( 归功于Post和Turing)说,如果一个人能造出一台机器来解决这组问题,除了插入问题和(稍后)阅读答案之外,不需要任何人的干预,就能解决这组问题,那么这就是解决某些问题的有效方法。这三个定义都是等价的,所以使用哪一个并不重要。此外,这三者都是等价的这一事实是任何一种方法 正确性的有力论据。”( Rosser 1939:225–226)

Rosser的脚注5提到了(1)Church和Kleene 的工作以及他们对λ可定义性的定义,特别是 Church在他的《初等数论的一个无法解决的问题》(1936)中对λ可定义性的使用;(2) Herbrand和 Gödel及其递归的使用,特别是 Gödel在他的著名论文《数学原理及相关系统的形式不可判定命题一》(1931)中的使用;和(3)Post(1936)和Turing (1936-37)在他们的计算机制模型中。

Stephen C. Kleene把他现在著名的“论文一”定义为 Church—— Turing论文。但他是在以下背景下这样做的(原文为黑体):

“12。算法理论...在建立一个完整的算法理论的过程中,我们所做的是描述一个过程,这个过程对于独立变量的每一组值都是可执行的,这个过程必须终止,并且以这样的方式,从结果中我们可以读到一个明确的答案,“是”或“否”,对于这个问题,“这个断言的值 是真的吗?" "( Kleene1943:273)

12.8 1950年后的历史

为了进一步完善“算法”的定义 ,人们付出了大量的努力。由于围绕数学基础(尤其是Church -Turing 论文)和 精神哲学(尤其是关于人工智能的争论)的问题,活动仍在继续。有关更多信息,请参见算法特性。

13 笔记编辑

  1. "Any classical mathematical algorithm, for example, can be described in a finite number of English words" (Rogers 1987:2).
  2. Well defined with respect to the agent that executes the algorithm: "There is a computing agent, usually human, which can react to the instructions and carry out the computations" (Rogers 1987:2).
  3. "an algorithm is a procedure for computing a function (with respect to some chosen notation for integers) ... this limitation (to numerical functions) results in no loss of generality", (Rogers 1987:1).
  4. "An algorithm has zero or more inputs, i.e., quantities which are given to it initially before the algorithm begins" (Knuth 1973:5).
  5. "A procedure which has all the characteristics of an algorithm except that it possibly lacks finiteness may be called a 'computational method'" (Knuth 1973:5).
  6. "An algorithm has one or more outputs, i.e. quantities which have a specified relation to the inputs" (Knuth 1973:5).
  7. Whether or not a process with random interior processes (not including the input) is an algorithm is debatable. Rogers opines that: "a computation is carried out in a discrete stepwise fashion, without the use of continuous methods or analogue devices ... carried forward deterministically, without resort to random methods or devices, e.g., dice" (Rogers 1987:2).
  8. Cooke, Roger L. (2005). The History of Mathematics: A Brief Course. John Wiley & Sons. ISBN 978-1-118-46029-0.
  9. Kleene 1943 in Davis 1965:274
  10. Rosser 1939 in Davis 1965:225
  11. "Al-Khwarizmi biography". www-history.mcs.st-andrews.ac.uk.
  12. "Etymology of algorithm". Chambers Dictionary. Retrieved December 13, 2016.
  13. Hogendijk, Jan P. (1998). "al-Khwarzimi". Pythagoras. 38 (2): 4–5. Archived from the original on April 12, 2009.
  14. Oaks, Jeffrey A. "Was al-Khwarizmi an applied algebraist?". University of Indianapolis. Archived from the original on November 15, 2010. Retrieved May 30, 2008.
  15. Brezina, Corona (2006). Al-Khwarizmi: The Inventor Of Algebra. The Rosen Publishing Group. ISBN 978-1-4042-0513-0.
  16. Foremost mathematical texts in history, according to Carl B. Boyer.
  17. Oxford English Dictionary, Third Edition, 2012 s.v.
  18. Stone 1973:4
  19. Simanowski, Roberto (2018). The Death Algorithm and Other Digital Dilemmas. Untimely Meditations. 14. Translated by Chase, Jefferson. Cambridge, Massachusetts: MIT Press. p. 147. ISBN 9780262536370. Retrieved 27 May 2019. [...] the next level of abstraction of central bureaucracy: globally operating algorithms.
  20. Stone simply requires that "it must terminate in a finite number of steps" (Stone 1973:7–8).
  21. Boolos and Jeffrey 1974,1999:19
  22. cf Stone 1972:5
  23. Knuth 1973:7 states: "In practice we not only want algorithms, we want good algorithms ... one criterion of goodness is the length of time taken to perform the algorithm ... other criteria are the adaptability of the algorithm to computers, its simplicity, and elegance, etc."
  24. cf Stone 1973:6
  25. Stone 1973:7–8 states that there must be, "...a procedure that a robot [i.e., computer] can follow in order to determine precisely how to obey the instruction". Stone adds finiteness of the process, and definiteness (having no ambiguity in the instructions) to this definition.
  26. Knuth, loc. cit
  27. Gurevich 2000:1, 3
  28. Sipser 2006:157
  29. Goodrich, Michael T.; Tamassia, Roberto (2002), Algorithm Design: Foundations, Analysis, and Internet Examples, John Wiley & Sons, Inc., ISBN 978-0-471-38365-9
  30. Knuth 1973:7
  31. Chaitin 2005:32
  32. Rogers 1987:1–2
  33. In his essay "Calculations by Man and Machine: Conceptual Analysis" Seig 2002:390 credits this distinction to Robin Gandy, cf Wilfred Seig, et al., 2002 Reflections on the foundations of mathematics: Essays in honor of Solomon Feferman, Association for Symbolic Logic, A.K. Peters Ltd, Natick, MA.
  34. cf Gandy 1980:126, Robin Gandy Church's Thesis and Principles for Mechanisms appearing on pp. 123–148 in J. Barwise et al. 1980 The Kleene Symposium, North-Holland Publishing Company.
  35. A "robot": "A computer is a robot that performs any task that can be described as a sequence of instructions." cf Stone 1972:3
  36. Lambek's "abacus" is a "countably infinite number of locations (holes, wires etc.) together with an unlimited supply of counters (pebbles, beads, etc). The locations are distinguishable, the counters are not". The holes have unlimited capacity, and standing by is an agent who understands and is able to carry out the list of instructions" (Lambek 1961:295). Lambek references Melzak who defines his Q-machine as "an indefinitely large number of locations ... an indefinitely large supply of counters distributed among these locations, a program, and an operator whose sole purpose is to carry out the program" (Melzak 1961:283). B-B-J (loc. cit.) add the stipulation that the holes are "capable of holding any number of stones" (p. 46). Both Melzak and Lambek appear in The Canadian Mathematical Bulletin, vol. 4, no. 3, September 1961.
  37. If no confusion results, the word "counters" can be dropped, and a location can be said to contain a single "number".
  38. "We say that an instruction is effective if there is a procedure that the robot can follow in order to determine precisely how to obey the instruction." (Stone 1972:6)
  39. cf Minsky 1967: Chapter 11 "Computer models" and Chapter 14 "Very Simple Bases for Computability" pp. 255–281 in particular
  40. cf Knuth 1973:3.
  41. But always preceded by IF–THEN to avoid improper subtraction.
  42. Knuth 1973:4
  43. Stone 1972:5. Methods for extracting roots are not trivial: see Methods of computing square roots.
  44. Leeuwen, Jan (1990). Handbook of Theoretical Computer Science: Algorithms and complexity. Volume A. Elsevier. p. 85. ISBN 978-0-444-88071-0.
  45. John G. Kemeny and Thomas E. Kurtz 1985 Back to Basic: The History, Corruption, and Future of the Language, Addison-Wesley Publishing Company, Inc. Reading, MA, ISBN 0-201-13433-0.
  46. Tausworthe 1977:101
  47. Tausworthe 1977:142
  48. Knuth 1973 section 1.2.1, expanded by Tausworthe 1977 at pages 100ff and Chapter 9.1
  49. cf Tausworthe 1977
  50. Heath 1908:300; Hawking's Dover 2005 edition derives from Heath.
  51. " 'Let CD, measuring BF, leave FA less than itself.' This is a neat abbreviation for saying, measure along BA successive lengths equal to CD until a point F is reached such that the length FA remaining is less than CD; in other words, let BF be the largest exact multiple of CD contained in BA" (Heath 1908:297)
  52. For modern treatments using division in the algorithm, see Hardy and Wright 1979:180, Knuth 1973:2 (Volume 1), plus more discussion of Euclid's algorithm in Knuth 1969:293–297 (Volume 2).
  53. Euclid covers this question in his Proposition 1.
  54. "Euclid's Elements, Book VII, Proposition 2". Aleph0.clarku.edu. Retrieved May 20, 2012.
  55. While this notion is in widespread use, it cannot be defined precisely.
  56. Knuth 1973:13–18. He credits "the formulation of algorithm-proving in terms of assertions and induction" to R W. Floyd, Peter Naur, C.A.R. Hoare, H.H. Goldstine and J. von Neumann. Tausworth 1977 borrows Knuth's Euclid example and extends Knuth's method in section 9.1 Formal Proofs (pp. 288–298).
  57. Tausworthe 1997:294
  58. cf Knuth 1973:7 (Vol. I), and his more-detailed analyses on pp. 1969:294–313 (Vol II).
  59. Breakdown occurs when an algorithm tries to compact itself. Success would solve the Halting problem.
  60. Kriegel, Hans-Peter; Schubert, Erich; Zimek, Arthur (2016). "The (black) art of run-time evaluation: Are we comparing algorithms or implementations?". Knowledge and Information Systems. 52 (2): 341–378. doi:10.1007/s10115-016-1004-2. ISSN 0219-1377.
  61. Gillian Conahan (January 2013). "Better Math Makes Faster Data Networks". discovermagazine.com.
  62. Haitham Hassanieh, Piotr Indyk, Dina Katabi, and Eric Price, "ACM-SIAM Symposium On Discrete Algorithms (SODA) Archived 7月 4, 2013 at the Wayback Machine, Kyoto, January 2012. See also the sFFT Web Page.
  63. Kowalski 1979
  64. Knapsack Problems | Hans Kellerer | Springer (in 英语). Springer. 2004. ISBN 978-3-540-40286-2.
  65. Carroll, Sue; Daughtrey, Taz (July 4, 2007). Fundamental Concepts for the Software Quality Engineer. American Society for Quality. pp. 282 et seq. ISBN 978-0-87389-720-4.
  66. George B. Dantzig and Mukund N. Thapa. 2003. Linear Programming 2: Theory and Extensions. Springer-Verlag.
  67. Tsypkin (1971). Adaptation and learning in automatic systems. Academic Press. p. 54. ISBN 978-0-08-095582-7.
  68. Ast, Courtney. "Eratosthenes". Wichita State University: Department of Mathematics and Statistics.
  69. Aaboe, Asger (2001), Episodes from the Early History of Astronomy, New York: Springer, pp. 40–62, ISBN 978-0-387-95136-2
  70. Davis 2000:18
  71. Bolter 1984:24
  72. Bolter 1984:26
  73. Bolter 1984:33–34, 204–206.
  74. All quotes from W. Stanley Jevons 1880 Elementary Lessons in Logic: Deductive and Inductive, Macmillan and Co., London and New York. Republished as a googlebook; cf Jevons 1880:199–201. Louis Couturat 1914 the Algebra of Logic, The Open Court Publishing Company, Chicago and London. Republished as a googlebook; cf Couturat 1914:75–76 gives a few more details; he compares this to a typewriter as well as a piano. Jevons states that the account is to be found at January 20, 1870 The Proceedings of the Royal Society.
  75. Jevons 1880:199–200
  76. All quotes from John Venn 1881 Symbolic Logic, Macmillan and Co., London. Republished as a googlebook. cf Venn 1881:120–125. The interested reader can find a deeper explanation in those pages.
  77. Bell and Newell diagram 1971:39, cf. Davis 2000
  78. * Melina Hill, Valley News Correspondent, A Tinkerer Gets a Place in History, Valley News West Lebanon NH, Thursday, March 31, 1983, p. 13.
  79. Davis 2000:14
  80. van Heijenoort 1967:81ff
  81. van Heijenoort's commentary on Frege's Begriffsschrift, a formula language, modeled upon that of arithmetic, for pure thought in van Heijenoort 1967:1
  82. Dixon 1906, cf. Kleene 1952:36–40
  83. cf. footnote in Alonzo Church 1936a in Davis 1965:90 and 1936b in Davis 1965:110
  84. Kleene 1935–6 in Davis 1965:237ff, Kleene 1943 in Davis 1965:255ff
  85. Church 1936 in Davis 1965:88ff
  86. cf. "Finite Combinatory Processes – formulation 1", Post 1936 in Davis 1965:289–290
  87. Turing 1936–37 in Davis 1965:116ff
  88. Rosser 1939 in Davis 1965:226
  89. Kleene 1943 in Davis 1965:273–274
  90. Kleene 1952:300, 317
  91. Kleene 1952:376
  92. Turing 1936–37 in Davis 1965:289–290
  93. Turing 1936 in Davis 1965, Turing 1939 in Davis 1965:160
  94. Hodges, p. 96
  95. Turing 1936–37:116
  96. Turing 1936–37 in Davis 1965:136
  97. Turing 1939 in Davis 1965:160

14 文献学编辑

  • Axt, P (1959). "On a Subrecursive Hierarchy and Primitive Recursive Degrees". Transactions of the American Mathematical Society. 92 (1): 85–105. doi:10.2307/1993169. JSTOR 1993169.
  • 艾伦·戈登·贝尔和纽维尔(1971年), 计算机结构:阅读和例子纽约麦格劳希尔图书公司。 ISBN 0-07-004357-4。
  • Blass, Andreas; Gurevich, Yuri (2003). "Algorithms: A Quest for Absolute Definitions" (PDF). Bulletin of European Association for Theoretical Computer Science. 81. 包括56篇参考文献的优秀书目。
  • Bolter, David J. (1984). Turing's Man: Western Culture in the Computer Age (1984 ed.). Chapel Hill, NC: The University of North Carolina Press. ISBN 978-0-8078-1564-9., ISBN 0-8078-4108-0
  • Boolos, George; Jeffrey, Richard (1999) [1974]. Computability and Logic (4th ed.). Cambridge University Press, London. ISBN 978-0-521-20402-6.:参见第3章 图灵机 其中他们讨论“某些不有效(机械地)可枚举的可枚举集合”。
  • Burgin, Mark (2004). Super-Recursive Algorithms. Springer. ISBN 978-0-387-95569-8.
  • 孔帕尼奥洛,M.L .,Moore,c .,Costa,J.F. (2000)一个子正则函数的模拟特征化。在 继续。第四届实数和计算机会议奥登塞大学,页 91–109
  • Church, Alonzo (1936a). "An Unsolvable Problem of Elementary Number Theory". The American Journal of Mathematics. 58 (2): 345–363. doi:10.2307/2371045. JSTOR 2371045. 重印于 不可判定的,p。 89ff。“Church's论文”的第一个表述。具体参见第100页(不可判定的)其中他用“算法”定义了“有效可计算性”的概念,并使用了“终止”等词。
  • Church, Alonzo (1936b). "A Note on the Entscheidungsproblem". The Journal of Symbolic Logic. 1 (1): 40–41. doi:10.2307/2269326. JSTOR 2269326. Church, Alonzo (1936). "Correction to a Note on the Entscheidungsproblem". The Journal of Symbolic Logic. 1 (3): 101–102. doi:10.2307/2269030. JSTOR 2269030. 重印于 不可判定的,p。 110ff。丘奇用大约3页的文字和3页的脚注表明可判定性是不可解决的。
  • Daffa', Ali Abdullah al- (1977). The Muslim contribution to mathematics. London: Croom Helm. ISBN 978-0-85664-464-1.
  • Davis, Martin (1965). The Undecidable: Basic Papers On Undecidable Propositions, Unsolvable Problems and Computable Functions. New York: Raven Press. ISBN 978-0-486-43228-1. 戴维斯在每篇文章之前给出评论。包括哥德尔、阿隆佐·邱奇、图灵、罗塞尔、克莱尼和埃米尔邮报的论文;文章中引用的那些是按作者的名字列出的。
  • Davis, Martin (2000). Engines of Logic: Mathematicians and the Origin of the Computer. New York: W.W. Nortion. ISBN 978-0-393-32229-3. 戴维斯提供了莱布尼茨、布尔、弗雷格、康托尔、希尔伯特、哥德尔和图灵的简明传记,冯·诺伊曼是盗窃表演的恶棍。约瑟夫·玛丽·雅卡尔、巴贝奇、阿达·洛芙莱斯、克劳德·香农、霍华德·艾肯等的简介。
  •  本条目引用的公有领域材料。材料来自NIST的文档:Black, Paul E. "algorithm". 演算法与资料结构辞典(英语:Dictionary of Algorithms and Data Structures).
  • Dean, Tim (2012). "Evolution and moral diversity". Baltic International Yearbook of Cognition, Logic and Communication. 7.
  • Dennett, Daniel (1995). Darwin's Dangerous Idea. Complexity. 2. New York: Touchstone/Simon & Schuster. p. 32. Bibcode:1996Cmplx...2a..32M. doi:10.1002/(SICI)1099-0526(199609/10)2:1<32::AID-CPLX8>3.0.CO;2-H. ISBN 978-0-684-80290-9.
  • Dilson, Jesse (2007). The Abacus ((1968, 1994) ed.). St. Martin's Press, NY. ISBN 978-0-312-10409-2., ISBN 0-312-10409-X
  • 尤里·古列维奇, Sequential Abstract State Machines Capture Sequential Algorithms《计算逻辑交易》,第1卷,第1期(2000年7月),页 77–111。包括33个来源的参考书目。
  • van Heijenoort, Jean (2001). From Frege to Gödel, A Source Book in Mathematical Logic, 1879–1931 ((1967) ed.). Harvard University Press, Cambridge. ISBN 978-0-674-32449-7.,1976年第三版,[?], ISBN 0-674-32449-8 (pbk。)
  • Hodges, Andrew (1983). Alan Turing: The Enigma. Physics Today. 37. New York: Simon and Schuster. p. 107. Bibcode:1984PhT....37k.107H. doi:10.1063/1.2915935. ISBN 978-0-671-49207-6., ISBN 0-671-49207-1。参见“真理的精神”一章,这是一部导致和讨论他的证明的历史。
  • Kleene, Stephen C. (1936). "General Recursive Functions of Natural Numbers". Mathematische Annalen. 112 (5): 727–742. doi:10.1007/BF01565439. 1935年9月提交给美国数学学会。重印于 不可判定的,p。 237ff。克莱尼对“一般递归”(现在称为mu递归)的定义被丘奇在他1935年的论文中使用 初等数论中一个不可解决的问题 这证明了“决策问题”是“不可判定的”(即否定的结果)。
  • Kleene, Stephen C. (1943). "Recursive Predicates and Quantifiers". American Mathematical Society Transactions. 54 (1): 41–73. doi:10.2307/1990131. JSTOR 1990131. 重印于 不可判定的,p。 255ff。克莱尼完善了他对“一般递归”的定义,并在他的第12章继续进行。“算法理论”假设“论文一”(p 274);他后来会重复这篇论文(在克莱尼1952:300)并命名为“Church's论文”(克莱尼1952:317)(即教会论文)。
  • Kleene, Stephen C. (1991) [1952]. Introduction to Metamathematics (Tenth ed.). North-Holland Publishing Company. ISBN 978-0-7204-2103-3.
  • Knuth, Donald (1997). Fundamental Algorithms, Third Edition. Reading, Massachusetts: Addison–Wesley. ISBN 978-0-201-89683-1.
  • Knuth, Donald (1969). Volume 2/Seminumerical Algorithms, The Art of Computer Programming First Edition. Reading, Massachusetts: Addison–Wesley.
  • 科索沃 数理逻辑元素及其在子算法理论中的应用,LSU Publ。列宁格勒,1981年
  • Kowalski, Robert (1979). "Algorithm=Logic+Control". Communications of the ACM. 22 (7): 424–436. doi:10.1145/359131.359136.
  • 马可夫(1954) 算法理论。[译自雅克·舒尔-孔和科普特工作人员]印刻莫斯科,苏联科学院,1954年[,即耶路撒冷,以色列科学翻译方案,1961年;可从华盛顿美国商务部技术服务办公室获得]描述444页 28 cm。苏联科学院数学研究所作品俄文翻译,第五版 42.原标题:Teoriya algerifmov。[QA248。达特茅斯学院图书馆。美国商务部技术服务办公室,电话:OTS 60-51085。]
  • Minsky, Marvin (1967). Computation: Finite and Infinite Machines (First ed.). Prentice-Hall, Englewood Cliffs, NJ. ISBN 978-0-13-165449-5. 明斯基扩展了他的”...算法的想法——一个有效的程序……”在第5.1章中 可计算性、有效程序和算法。无限的机器。
  • Post, Emil (1936). "Finite Combinatory Processes, Formulation I". The Journal of Symbolic Logic. 1 (3): 103–105. doi:10.2307/2269031. JSTOR 2269031. 重印于 不可判定的,第页。 289ff。Post定义了一个简单的类似算法的过程,一个人写标记或擦除标记,然后从一个盒子到另一个盒子,最后停下来,按照简单的指令列表。这被克莱尼引用为他的“论文一”的一个来源,即所谓的邱奇-图灵论题。
  • Rogers, Jr, Hartley (1987). Theory of Recursive Functions and Effective Computability. The MIT Press. ISBN 978-0-262-68052-3.
  • Rosser, J.B. (1939). "An Informal Exposition of Proofs of Godel's Theorem and Church's Theorem". Journal of Symbolic Logic. 4 (2): 53–60. doi:10.2307/2269059. JSTOR 2269059. 重印于 不可判定的,p。 223ff。这是罗斯尔对“有效方法”的著名定义...一种方法,其每一步都是精确预先确定的,并且一定会在有限的步骤中产生答案...一种机器,除了插入问题和(稍后)阅读答案之外,无需人工干预就能解决集合中的任何问题。 225–226, 不可判定的)
  • Santos-Lang, Christopher (2014). "Moral Ecology Approaches to Machine Ethics" (PDF). In van Rysewyk, Simon; Pontier, Matthijs. Machine Medical Ethics. Intelligent Systems, Control and Automation: Science and Engineering. 74. Switzerland: Springer. pp. 111–127. doi:10.1007/978-3-319-08108-3_8. ISBN 978-3-319-08107-6.
  • Scott, Michael L. (2009). Programming Language Pragmatics (3rd ed.). Morgan Kaufmann Publishers/Elsevier. ISBN 978-0-12-374514-9.
  • Sipser, Michael (2006). Introduction to the Theory of Computation. PWS Publishing Company. ISBN 978-0-534-94728-6.
  • Sober, Elliott; Wilson, David Sloan (1998). Unto Others: The Evolution and Psychology of Unselfish Behavior. Cambridge: Harvard University Press.
  • Stone, Harold S. (1972). Introduction to Computer Organization and Data Structures (1972 ed.). McGraw-Hill, New York. ISBN 978-0-07-061726-1. 特别参见第一章,标题为: 算法、图灵机和程序。”他简洁的非正式定义...机器人可以遵循的任何指令序列称为 算法"(p . 4)。
  • Tausworthe, Robert C (1977). Standardized Development of Computer Software Part 1 Methods. Englewood Cliffs NJ: Prentice–Hall, Inc. ISBN 978-0-13-842195-3.
  • Turing, Alan M. (1936–37). "On Computable Numbers, With An Application to the Entscheidungsproblem". Proceedings of the London Mathematical Society. Series 2. 42: 230–265. doi:10.1112/plms/s2-42.1.230.。更正,同上,第43卷(1937)页 544–546。重印于 不可判定的,p。 116ff。图灵的著名论文是在英国美国国王学院剑桥大学完成的硕士论文。
  • Turing, Alan M. (1939). "Systems of Logic Based on Ordinals". Proceedings of the London Mathematical Society. 45: 161–228. doi:10.1112/plms/s2-45.1.161. hdl:21.11116/0000-0001-91CE-3. 重印于 不可判定的,第页。 155ff。图灵定义“神谕”的论文是他在普林斯顿时的博士论文。
  • 美国专利及商标局(2006), 2106.02 **>Mathematical Algorithms: 2100 Patentability《专利审查程序手册》(MPEP)。最新修订于2006年8月

参考文献

  • [1]

    ^"Any classical mathematical algorithm, for example, can be described in a finite number of English words" (Rogers 1987:2)..

  • [2]

    ^Well defined with respect to the agent that executes the algorithm: "There is a computing agent, usually human, which can react to the instructions and carry out the computations" (Rogers 1987:2)..

  • [3]

    ^"an algorithm is a procedure for computing a function (with respect to some chosen notation for integers) ... this limitation (to numerical functions) results in no loss of generality", (Rogers 1987:1)..

  • [4]

    ^"An algorithm has zero or more inputs, i.e., quantities which are given to it initially before the algorithm begins" (Knuth 1973:5)..

  • [5]

    ^"A procedure which has all the characteristics of an algorithm except that it possibly lacks finiteness may be called a 'computational method'" (Knuth 1973:5)..

  • [6]

    ^"An algorithm has one or more outputs, i.e. quantities which have a specified relation to the inputs" (Knuth 1973:5)..

  • [7]

    ^Whether or not a process with random interior processes (not including the input) is an algorithm is debatable. Rogers opines that: "a computation is carried out in a discrete stepwise fashion, without the use of continuous methods or analogue devices ... carried forward deterministically, without resort to random methods or devices, e.g., dice" (Rogers 1987:2)..

  • [8]

    ^Kleene 1943 in Davis 1965:274.

  • [9]

    ^Rosser 1939 in Davis 1965:225.

  • [10]

    ^"Al-Khwarizmi biography". www-history.mcs.st-andrews.ac.uk..

  • [11]

    ^"Etymology of algorithm". Chambers Dictionary. Retrieved December 13, 2016..

  • [12]

    ^Hogendijk, Jan P. (1998). "al-Khwarzimi". Pythagoras. 38 (2): 4–5. Archived from the original on April 12, 2009..

  • [13]

    ^Oaks, Jeffrey A. "Was al-Khwarizmi an applied algebraist?". University of Indianapolis. Archived from the original on November 15, 2010. Retrieved May 30, 2008..

  • [14]

    ^Brezina, Corona (2006). Al-Khwarizmi: The Inventor Of Algebra. The Rosen Publishing Group. ISBN 978-1-4042-0513-0..

  • [15]

    ^Foremost mathematical texts in history, according to Carl B. Boyer..

  • [16]

    ^Oxford English Dictionary, Third Edition, 2012 s.v..

  • [17]

    ^Stone 1973:4.

  • [18]

    ^Simanowski, Roberto (2018). The Death Algorithm and Other Digital Dilemmas. Untimely Meditations. 14. Translated by Chase, Jefferson. Cambridge, Massachusetts: MIT Press. p. 147. ISBN 9780262536370. Retrieved 27 May 2019. [...] the next level of abstraction of central bureaucracy: globally operating algorithms..

  • [19]

    ^Stone simply requires that "it must terminate in a finite number of steps" (Stone 1973:7–8)..

  • [20]

    ^Boolos and Jeffrey 1974,1999:19.

  • [21]

    ^cf Stone 1972:5.

  • [22]

    ^Knuth 1973:7 states: "In practice we not only want algorithms, we want good algorithms ... one criterion of goodness is the length of time taken to perform the algorithm ... other criteria are the adaptability of the algorithm to computers, its simplicity, and elegance, etc.".

  • [23]

    ^cf Stone 1973:6.

  • [24]

    ^Stone 1973:7–8 states that there must be, "...a procedure that a robot [i.e., computer] can follow in order to determine precisely how to obey the instruction". Stone adds finiteness of the process, and definiteness (having no ambiguity in the instructions) to this definition..

  • [25]

    ^Knuth, loc. cit.

  • [26]

    ^Minsky 1967.

  • [27]

    ^Gurevich 2000:1, 3.

  • [28]

    ^Sipser 2006:157.

  • [29]

    ^Goodrich, Michael T.; Tamassia, Roberto (2002), Algorithm Design: Foundations, Analysis, and Internet Examples, John Wiley & Sons, Inc., ISBN 978-0-471-38365-9.

  • [30]

    ^Knuth 1973:7.

  • [31]

    ^Chaitin 2005:32.

  • [32]

    ^Rogers 1987:1–2.

  • [33]

    ^In his essay "Calculations by Man and Machine: Conceptual Analysis" Seig 2002:390 credits this distinction to Robin Gandy, cf Wilfred Seig, et al., 2002 Reflections on the foundations of mathematics: Essays in honor of Solomon Feferman, Association for Symbolic Logic, A.K. Peters Ltd, Natick, MA..

  • [34]

    ^cf Gandy 1980:126, Robin Gandy Church's Thesis and Principles for Mechanisms appearing on pp. 123–148 in J. Barwise et al. 1980 The Kleene Symposium, North-Holland Publishing Company..

  • [35]

    ^A "robot": "A computer is a robot that performs any task that can be described as a sequence of instructions." cf Stone 1972:3.

  • [36]

    ^Lambek's "abacus" is a "countably infinite number of locations (holes, wires etc.) together with an unlimited supply of counters (pebbles, beads, etc). The locations are distinguishable, the counters are not". The holes have unlimited capacity, and standing by is an agent who understands and is able to carry out the list of instructions" (Lambek 1961:295). Lambek references Melzak who defines his Q-machine as "an indefinitely large number of locations ... an indefinitely large supply of counters distributed among these locations, a program, and an operator whose sole purpose is to carry out the program" (Melzak 1961:283). B-B-J (loc. cit.) add the stipulation that the holes are "capable of holding any number of stones" (p. 46). Both Melzak and Lambek appear in The Canadian Mathematical Bulletin, vol. 4, no. 3, September 1961..

  • [37]

    ^If no confusion results, the word "counters" can be dropped, and a location can be said to contain a single "number"..

  • [38]

    ^"We say that an instruction is effective if there is a procedure that the robot can follow in order to determine precisely how to obey the instruction." (Stone 1972:6).

  • [39]

    ^cf Minsky 1967: Chapter 11 "Computer models" and Chapter 14 "Very Simple Bases for Computability" pp. 255–281 in particular.

  • [40]

    ^cf Knuth 1973:3..

  • [41]

    ^But always preceded by IF–THEN to avoid improper subtraction..

  • [42]

    ^Knuth 1973:4.

  • [43]

    ^Stone 1972:5. Methods for extracting roots are not trivial: see Methods of computing square roots..

  • [44]

    ^Leeuwen, Jan (1990). Handbook of Theoretical Computer Science: Algorithms and complexity. Volume A. Elsevier. p. 85. ISBN 978-0-444-88071-0..

  • [45]

    ^John G. Kemeny and Thomas E. Kurtz 1985 Back to Basic: The History, Corruption, and Future of the Language, Addison-Wesley Publishing Company, Inc. Reading, MA, ISBN 0-201-13433-0..

  • [46]

    ^Tausworthe 1977:101.

  • [47]

    ^Tausworthe 1977:142.

  • [48]

    ^Knuth 1973 section 1.2.1, expanded by Tausworthe 1977 at pages 100ff and Chapter 9.1.

  • [49]

    ^cf Tausworthe 1977.

  • [50]

    ^Heath 1908:300; Hawking's Dover 2005 edition derives from Heath..

  • [51]

    ^" 'Let CD, measuring BF, leave FA less than itself.' This is a neat abbreviation for saying, measure along BA successive lengths equal to CD until a point F is reached such that the length FA remaining is less than CD; in other words, let BF be the largest exact multiple of CD contained in BA" (Heath 1908:297).

  • [52]

    ^For modern treatments using division in the algorithm, see Hardy and Wright 1979:180, Knuth 1973:2 (Volume 1), plus more discussion of Euclid's algorithm in Knuth 1969:293–297 (Volume 2)..

  • [53]

    ^Euclid covers this question in his Proposition 1..

  • [54]

    ^"Euclid's Elements, Book VII, Proposition 2". Aleph0.clarku.edu. Retrieved May 20, 2012..

  • [55]

    ^While this notion is in widespread use, it cannot be defined precisely..

  • [56]

    ^Knuth 1973:13–18. He credits "the formulation of algorithm-proving in terms of assertions and induction" to R W. Floyd, Peter Naur, C.A.R. Hoare, H.H. Goldstine and J. von Neumann. Tausworth 1977 borrows Knuth's Euclid example and extends Knuth's method in section 9.1 Formal Proofs (pp. 288–298)..

  • [57]

    ^Tausworthe 1997:294.

  • [58]

    ^cf Knuth 1973:7 (Vol. I), and his more-detailed analyses on pp. 1969:294–313 (Vol II)..

  • [59]

    ^Breakdown occurs when an algorithm tries to compact itself. Success would solve the Halting problem..

  • [60]

    ^Kriegel, Hans-Peter; Schubert, Erich; Zimek, Arthur (2016). "The (black) art of run-time evaluation: Are we comparing algorithms or implementations?". Knowledge and Information Systems. 52 (2): 341–378. doi:10.1007/s10115-016-1004-2. ISSN 0219-1377..

  • [61]

    ^Gillian Conahan (January 2013). "Better Math Makes Faster Data Networks". discovermagazine.com..

  • [62]

    ^Haitham Hassanieh, Piotr Indyk, Dina Katabi, and Eric Price, "ACM-SIAM Symposium On Discrete Algorithms (SODA) Archived 7月 4, 2013 at the Wayback Machine, Kyoto, January 2012. See also the sFFT Web Page..

  • [63]

    ^Kowalski 1979.

  • [64]

    ^Knapsack Problems | Hans Kellerer | Springer (in 英语). Springer. 2004. ISBN 978-3-540-40286-2..

  • [65]

    ^Carroll, Sue; Daughtrey, Taz (July 4, 2007). Fundamental Concepts for the Software Quality Engineer. American Society for Quality. pp. 282 et seq. ISBN 978-0-87389-720-4..

  • [66]

    ^George B. Dantzig and Mukund N. Thapa. 2003. Linear Programming 2: Theory and Extensions. Springer-Verlag..

  • [67]

    ^Tsypkin (1971). Adaptation and learning in automatic systems. Academic Press. p. 54. ISBN 978-0-08-095582-7..

  • [68]

    ^Ast, Courtney. "Eratosthenes". Wichita State University: Department of Mathematics and Statistics..

  • [69]

    ^Cooke, Roger L. (2005). The History of Mathematics: A Brief Course. John Wiley & Sons. ISBN 978-1-118-46029-0..

  • [70]

    ^Davis 2000:18.

  • [71]

    ^Bolter 1984:24.

  • [72]

    ^Bolter 1984:26.

  • [73]

    ^Bolter 1984:33–34, 204–206..

  • [74]

    ^All quotes from W. Stanley Jevons 1880 Elementary Lessons in Logic: Deductive and Inductive, Macmillan and Co., London and New York. Republished as a googlebook; cf Jevons 1880:199–201. Louis Couturat 1914 the Algebra of Logic, The Open Court Publishing Company, Chicago and London. Republished as a googlebook; cf Couturat 1914:75–76 gives a few more details; he compares this to a typewriter as well as a piano. Jevons states that the account is to be found at January 20, 1870 The Proceedings of the Royal Society..

  • [75]

    ^Jevons 1880:199–200.

  • [76]

    ^All quotes from John Venn 1881 Symbolic Logic, Macmillan and Co., London. Republished as a googlebook. cf Venn 1881:120–125. The interested reader can find a deeper explanation in those pages..

  • [77]

    ^Bell and Newell diagram 1971:39, cf. Davis 2000.

  • [78]

    ^* Melina Hill, Valley News Correspondent, A Tinkerer Gets a Place in History, Valley News West Lebanon NH, Thursday, March 31, 1983, p. 13..

  • [79]

    ^Davis 2000:14.

  • [80]

    ^van Heijenoort 1967:81ff.

  • [81]

    ^van Heijenoort's commentary on Frege's Begriffsschrift, a formula language, modeled upon that of arithmetic, for pure thought in van Heijenoort 1967:1.

  • [82]

    ^Dixon 1906, cf. Kleene 1952:36–40.

  • [83]

    ^cf. footnote in Alonzo Church 1936a in Davis 1965:90 and 1936b in Davis 1965:110.

  • [84]

    ^Kleene 1935–6 in Davis 1965:237ff, Kleene 1943 in Davis 1965:255ff.

  • [85]

    ^Church 1936 in Davis 1965:88ff.

  • [86]

    ^cf. "Finite Combinatory Processes – formulation 1", Post 1936 in Davis 1965:289–290.

  • [87]

    ^Turing 1936–37 in Davis 1965:116ff.

  • [88]

    ^Rosser 1939 in Davis 1965:226.

  • [89]

    ^Kleene 1943 in Davis 1965:273–274.

  • [90]

    ^Kleene 1952:300, 317.

  • [91]

    ^Kleene 1952:376.

  • [92]

    ^Turing 1936–37 in Davis 1965:289–290.

  • [93]

    ^Turing 1936 in Davis 1965, Turing 1939 in Davis 1965:160.

  • [94]

    ^Hodges, p. 96.

  • [95]

    ^Turing 1936–37:116.

  • [96]

    ^Turing 1936–37 in Davis 1965:136.

  • [97]

    ^Turing 1939 in Davis 1965:160.

阅读 3.0w
版本记录
  • 暂无