算法
也叫能行方法或能行过程,是一种处理一类问题所能通用的机械化方法,俗称“死办法”。
算法是个相当古老的概念,其历史可上溯到古希腊时代。阿基米德有关求最大公约数的“辗转相除法”和爱拉脱斯散纳制造素数表的“筛法”是古代算法的杰出例子。算法是个直观概念,而不是严格的数学概念,一般说来,它具有以下三个特点:(1)整个过程完全依照事先给定的(有穷多条)法则来进行;(2)过程中,哪一步使用哪一条法则,是由上一步所用的法则及上一步的结果明确、唯一地决定的;(3)整个过程在有穷步之内结束。
使用算法的过程完全是一种照章办事的机械过程,只要了解了相应的法则,任何人作起来其过程和结果都完全一样,并不需要特别的聪明才智。例如,计算两个自然数的和,所靠的就是一个简单的加法表(比如10以内自然数的加法表)和一条进位法则。计算两个自然数的积,所靠的就是一个简单的乘法表(“九九表”)和加法的法则。求两个正整数的最大公约数,可以使用以下的过程(辗转相除法):
用其中一个数去除另一个数;如果余数不为0,则用此余数去除上次除法的除数,直到余数为0;最后一次除法的除数即为所求的最大公约数。
有关算法的问题主要有计算和判定两类。计算问题是设计一个算法来计算某个函数的值。如果有这样的算法存在,则称该函数为能行可计算函数。判定问题是设计一个算法来确定某一类对象中的任何一个(或任何几个之间)是否具有某种性质(或某种关系)。如果有这种的算法存在,则称该问题是能行可判定的。
本世纪20年代以来,逻辑学家和数学家开始考虑用数学语言严格刻画算法这个直观概念。波斯特、哥德尔、图灵、丘奇、马尔科夫等人分别从不同角度使用不同方法作了这项工作,他们的刻画是彼此等价的(参看见丘奇论题),现在人们普遍相信递归函数的概念恰如其份地刻划了算法这个直观概念。