介绍一种语言,称为简单语言,通过它可以看到计算机解决任何问题所需要的最少语句是三条。介绍一种工具,称为图灵机的计算机模型,可以看到简单语言可以解决的问题也可以用图灵机解决。证明没有任何程序可以知道另一个程序终止与否。证明本身也表明了有些问题计算机是无法解决的。
目录
简单语言
这里的简单语言只有三条语句:递增语句,递减语句,循环语句。可以用这三条简单语句模拟出现代复杂语言的功能。比如,清空,+=, *=, 指数计算,判断语句等。
图灵机
图灵机是现代计算机的基础,图灵机由三部分组成:磁带,控制器,读写头,这里不展开讲图灵机。
书中显示了图灵机能模拟简单的上面提到的单个语句,这就意味着图灵机能模拟我们为简单语句定义的所有的宏。如果存在一个能完成一个符号操纵任务的算法,那么也存在一台完成这个任务的图灵机(邱奇-图灵论题)。基于这样的观点,能用写一个算法来完成的任何符号操纵任务也可以用图灵机完成。
哥德尔数
在计算机科学理论中,一个无符号数能被分配给任何用特定语句编写的程序,通常称为哥德尔数。
这种分配有很多优点:
1、程序可以作为单一数据项输入给其他程序。
2、陈旭可以通过它的整数表示来引用。
3、改编号方式可以用来证明有一些问题计算机并不能解决,从而说明世界上问题的数量远远比曾经编写的程序数量要多得多。
停机问题
几乎所有的简单语言编写的程序都包含某种形式的重复(循环或递归),一个重复结构可能永远都不会结束(停机),这就是说无限循环的程序可以永远运行。
停机问题是无法解决:不存在一个可以测试用哥德尔数表示的程序是否已经终止。书中给出的是非正式证明(反证)。停机问题无法解决就能证明许多其他问题也是不可解的。
问题的复杂度
在计算机科学领域,一般把问题可以分为两类:可解问题和不可解问题,可解问题又可以分为多项式问题和非多项式问题。
不可解问题
比如停机问题
可解问题
主要关心计算机解决这类问题需要花多长时间。也就是这个问题的时间复杂度。
可解问题的时间复杂度
衡量可解问题复杂度的一个方法是找出计算机运行该程序时要执行的运算数量。这样复杂度问题不是依赖运行程序的计算机速度,而是依赖于输入的数目。
效率的简化以大O表示法最为著名,在该表示中,运算数量表示为输入量的函数,符号 表示有n个输入,执行n次运算;符号
表示有n个输入,执行
次运算。
1、多项式问题
如果程序的复杂度为、
、
、
、
或
(k为常数),这里只有n是变量,则被称为多项式问题。
2、非多项式问题
如果一个程序的复杂度远比多项式问题复杂,例如 或
,当输入量很小时(小于100),这种问题可以解决,如果输入量很大则需要等上很长的时间才能看到多项式问题的解决结果。
凡是过往,即为序章