- 算法到底是什么?
非形式地说,算法是为实现某个任务而构造的简单指令集。以日常用语来说,算法又称为 过程或者方法。算法在数学中也起着非常重要的作用。古代数学文献中就包含有执行各种各样计算任务的算法描述。例如,我国古代数学经典《九章算术》中就记述 了包括求最大公约数、最小公倍数、开平方根、开立方根等在内的诸多算法。现代计算机科学中更是充满了各种各样的算法。例如,求解最短路径的狄克斯特拉算法,进行字符串匹配的KMP算法等等。 虽然算法在数学中已有 很长的历史,但在20世纪之前,算法概念本身一直没有精确的定义。1900 年,德国数学家希尔伯特在巴黎举行的世界数学家大会上发表了至今仍著名的演说。在演说中,他提出了 23 个数学问题,并认为它们是对下一个世纪的挑战。其中的第 10 题就是关于算法的。 希尔伯特的第10个问题是要设计一个算法来测试多项式是否有整数根。他没有使用算法这个术语,而是采用了下面这种表述:“通过有限多次运算就可以决定的过程”。有意思的是,从希尔伯特对这个问题的陈述中可以看出,他明确地要求设计一个算法。因此,他显然是假设这样的算法是存在的,人们所要做的只是找到它。现在我们知道,这个任务是无法完成的,即它是算法上不可解的。但对那个时期的数学家来说,以他们对算法的直观认识,得出这样的结论是不可能的。要想破解希尔伯特的第10个问题,人们不得不等待算法之精确定义的出现。 在丘奇和图灵于 1936 年写的文章中,这样的定义终于出现了。丘奇使用称为 λ 演算的记号系统来定义算法。图灵使用机器来做同样的事情(所以现在我们也常说精确