Richard Karp发明了缩写记号P,用来表示有好算法的判定问题。P类的正式定义是指,能在多项式时间内由一台单带图灵机解决的问题,换言之,如果输入带上的符号数目为n,那么必定存在指数k和常数C,保证图灵机经过至多Cnk步以后必然停机。当然,这种定义相当好,单带图灵机可以替换为多带图灵机,甚至换成功能强大的现代数字计算机,也不会影响问题的分类。诚然,用图灵机模拟先进计算机会拖慢计算机速度,但是速度放慢的系数关于n仍然只是多项式关系。所以,我们如果有先进计算机上的多项式时间算法,就同样拥有单带图灵机上的多项式时间算法。——《迷茫的旅行商:一个无处不在的计算机算法问题》

图灵机(TM)与线性界限自动机(LBA)

  一般图灵机,假定带右边无限长,内存无限制。

LBA

————————————————————————————————————————

  为了算法复杂性分析具有普适性,即一个算法的性能与具体的计算机无关,我们需要选定一种可用于描述计算的计算机模型。

图灵机

  图灵机本质上是一个具有存储载体(通常用一个有无限多个方格线性带表示)的、按照具体指令可完成向左或右移动、放置标记、抹去标记以及在计算终止时停机等四种基本操作的、用于描述算法的语言。

  图灵机在原理上,与我们用于和计算机交流的更为复杂的各种程序语言同样有力。

确定性单带图灵机(deterministic one-tape Turing machine),简称确定图灵机,记为DTM。一个DTM由一个有限状态控制器、一个读写头和一条双向的具有无限多个格的线性带所组成。

python确定性因子理论代码实现 确定性算法有哪些_时间复杂度

单带确定性图灵机示意图

  一个DTM程序应详细规定以下信息:

python确定性因子理论代码实现 确定性算法有哪些_确定型图灵机_02

非确定性单带图灵机(non-deterministic one-tape Turing machine),简记为NDTM,是一种假想的机器。通常有两种方式描述它:多值模型和猜想模块模型。

  多值模型认为它和确定性图灵机的共同之处是也包括:

python确定性因子理论代码实现 确定性算法有哪些_确定型图灵机_03

  不同之处在于

python确定性因子理论代码实现 确定性算法有哪些_多项式时间_04

表现在转移函数的多值性),这显然不现实。

  通过允许作不受限制的并行运算可以对不确定性算法做出明确的解释。每当要作某种选择时,算法就好像给自己复制了若干副本,每种可能的选择有一个副本,于是,许多副本同时被执行。第一个获得成功的副本将引起对其它副本计算的结束。如果一个副本获得不成功的完成则只改副本终止。

python确定性因子理论代码实现 确定性算法有哪些_确定型图灵机_05

非确定性算法与确定性算法比较

除多了一个猜想模块外,NDTM与DTM有着完全相同的结构,而这个猜想模块带有自己的仅可对带进行写操作的猜想头,它提供写下猜想的方法,仅此而已。

  

python确定性因子理论代码实现 确定性算法有哪些_python确定性因子理论代码实现_06

NDTM猜想模块模型示意图

python确定性因子理论代码实现 确定性算法有哪些_确定型图灵机_07

python确定性因子理论代码实现 确定性算法有哪些_时间复杂度_08

python确定性因子理论代码实现 确定性算法有哪些_确定型图灵机_09

因为任何现有的计算模型都可以通过加上一个类似于NDTM中的带有只写头的猜想模块来扩充,然后相对于所得的模型重新描述上述的正式定义,而且所有如此得到的计算模型在多项式时间内可相互转换的意义下将是等价的。因此,也没有必要特别提及NDTM模型,我们将简单地说“多项式时间不确定性算法”,并将NP类语言与所有可用多项式时间不确定性算法求解的判断问题等同看待。

证明NP=P?

  1.证明NP类中的某些问题是难解的,从而得到P≠NP。但是这同原问题的难度几乎相当,也许只有建立一套全新的数学论证方法才有希望解决。

  2.考虑NP类中问题之间的关系,从中找到一些具有特定性质的、与P中问题有显著不同的问题。沿此路线人们已经证明了在NP类中存在一个称为NP-完全的子类,并由此发展出一套著名的NP-完全理论。而证明一个问题是NP-完全的通常被认为一个告诉我们应该放弃寻找、设计求解该问题的有效算法(多项式时间算法)的强有力证明。

 

确定型图灵机与非确定型图灵机

确定型图灵机

非确定型图灵机

 

python确定性因子理论代码实现 确定性算法有哪些_确定型图灵机_10

单带图灵机与多带图灵机

  1936年,图灵描述了一个计算机模型,后称图灵机。他并不是想将其设计成一项实际的计算技术,而是要用表示思维实验中的计算机器。图灵机主要是帮助计算机科学家研究机器计算的能力。

  一个多带确定型图灵机(DTM)有k条带,每一条都有一个起始单元,而它的右侧有无限多个单元。它还有一个有限字符集合,每一个单元可存储其中的一个字符。每一条带都有一个读写头,它可对带上的单元进行逐一扫描,并读出单元所存储的字符或者将一个字符存储到该单元中。图灵机是由一个有限控制所操作,每一个控制都是处于有限状态中的某个状态。

python确定性因子理论代码实现 确定性算法有哪些_确定型图灵机_11

  图灵机接受输入的字符串当且仅当它在系列操作以后达到最终状态sf。否则图灵机在某一步不进行任何操作;它会处于某个非接受状态。

举例

  一个简单的2-带图灵机,可以确定字符集{0,1}上的一个字符串是回文。

python确定性因子理论代码实现 确定性算法有哪些_确定型图灵机_12

  这个例子表明,我们可以将一个图灵机视为一个仪器,用它可以确认输入的字符串是否有某种特定的性质。

时间复杂度

  一个图灵机M的时间复杂度T(n)等于它计算输入规模为n的所有实例中,所需要进行的操作的最多次数。如果对于输入规模为n的某些实例,图灵机不能终止操作,则称时间复杂度T(n)没有定义。

空间复杂度

  一个图灵机M的空间复杂度S(n)等于它计算输入规模为n的所有实例中,从每个带的最左端到最右端移动的最长距离值。如果图灵机在某一个带上,向右无穷远地移动,那么称空间复杂度S(n)没有定义。

多带图灵机与单带图灵机

定理1:若判定问题P0可被一个时间复杂度为T(n)的k-带图灵机M接受,则它可被一个时间复杂度为O(T2(n))的单带图灵机M1接受。

证明思路:设计一个时间复杂度为O(T2(n))的单带图灵机M1,用它来模拟时间复杂度为T(n)的k-带图灵机M。主要思想是:将M1的一个带想象成由2k个“轨道”构成,换言之,M1的一个字符是一个2K元组。

定理2:若判断问题P0可被一个空间复杂度为S(n)的k-带图灵机M接受,则它可被一个具有同样空间复杂度的单带图灵机M1接受。

图灵-丘奇假设

每一个可计算的量都可用某个图灵机来计算。

非确定图灵机

  计算复杂性理论的一个核心概念是非确定型图灵机,Non-Deterministic Turing Machine(NDTM)。

  确定型图灵机与非确定型图灵机之间最重要的区别在于:在要执行每一次(运算)操作时,后者有有限多个(移动)方式可以选择,究竟选择哪一个是不确定的;而前者仅有一个可以选择,亦即(移动)方式是完全确定的。

并行地执行所有可能的(运算)操作,直到达到接受状态或者无法再进行操作。

定理3:设一个非确定型图灵机M在时间T(n)内可以接受判定问题P0,且T(n)是一个时间可构造的复杂性函数。则存在一个确定型图灵机M',它可在时间O(cT(n))内接受P0,其中c是一个常数。

确定型图灵机与非确定型图灵机之间的关系,它们可以模拟彼此的(运算)操作。然而,当后者模拟前者时,不需要增加运行的时间和空间。但是,当前者模拟后者时,时间复杂度应会增加很多,增加的时间复杂度有一个指数阶的上界。算法复杂性分界函数——多项式