[置顶] 计算复杂性学习0-图灵机介绍

图灵机貌似笨拙无力,但它可以模拟任意算法而不损失效率。

图灵机的神奇之处,在于只需要很少的预设便可以表达一切。作为程序语言,图灵机只有单一的数据结构,而且它是颇为原始的字符串。允许的操作包括读写头在字符串上左移,右移,在当前位置写和根据当前位置选择下一步操作。总而言之,都是极其原始弱小的语言。但是其本身可以表达任意算法,可以模拟任意程序语言。

[置顶] 计算复杂性学习0-图灵机介绍_第1张图片
上图描述了一个三带图灵机的运行快照。

图灵机可以看成是现代计算机的简化,它的带是计算机的内存,而转移函数和寄存器是计算机的CPU。虽然如此,但最好还是将图灵机视为描述算法的一种简单的形式化方法。尽管描述算法的最佳方法是用白话,但这种形式化描述方法将有助于对算法的数学分析。

图灵机是一个四元组M=( K,Σ,δ,s )。K代表有限状态集(这些是隐含的指令) sK 为初始状态, Σ 为有限字符集,(称 Σ 为M的字符表)。假设K和 Σ 无交集, Σ 总包含特殊字符 :空格符和首字符。最后 δ 是从 K×Σ 到(K {“yes”,”no”,h} ×Σ×{,,} 的转移函数,并假定h(停机状态)、yes接受状态、no拒绝状态,以及读写头的方向 ,, 表示左移、右移和停留,这三个字符不在 K×Σ 之中。
函数 δ 相当于机器的执行器,它为每个当前状态q K 和每个字符 σΣ 的组合指定了三元组 δ(q,σ)=(p,ρ,D) 。p表示下一个状态, ρ 表示覆写在 σ 上的字符, D{,,} 表示读写头的移动方向。对于 规定,若任意 pq 满足 δ(q,)=(p,ρ,D) ,那么 p=D= 。也就是说, 总是让读写头向右移动,且绝不会被删除。

程序如何启动?初始状态是s,字符串以 开始,然后是有限长的字符串 x(Σ{}) 。我们称x为为图灵机的输入。读写头初始总指向第一个字符
从初始格局来看,机器根据 δ 运行一步,改变其状态,输出字符,移动读写头。然后是下一步,再下一步。注意 δ(p,) 规定,字符串总是以 开始,因此读写头从不会溢出字符串的左端。

尽管读写头不会溢出字符串的左端,但它会远离右端。在这种情况下,读写头扫描到的被认为是 ,并可能马上被覆写。因此串也就变得更长-这是必要特性,如果机器进行的是通用计算,传总会变长。

由于 δ 是完全明确的函数,而读写头不会溢出左端,所以机器停止的原因只有一个:其状态是三个停止状态之一:h、yes和no。如果这些发生了,我们就说停机了。而且,如果状态为yes,我们称机器为接收收入;状态为no是拒绝输入。如果机器在x下停止,就可以定义M在x下的输出,记为 M(x) 。如果M接受或者拒绝x,那么 M(x) 分别等于yes或no;否则,如果停止在h,则输出是停机时M上的字符串。因为经过有限步计算之后,字符串由一个 紧跟尾字母非 的有限字符串y构成,也可能紧跟全为 的字符串(y可能为空)。我们将y看成是计算的输出,记为 M(x)=y 。自然,M可能在输入x不停机,在这种情况下记为 M(x)=

你可能感兴趣的:(计算复杂性-计算理论)