语言: A = { 0 k 1 k ∣ k ≥ 0 } A=\{0^k1^k | k\ge 0\} A={0k1k∣k≥0},显然该语言可判定
时间复杂度定义:令M是一个在所有输入上都停机的确定型图灵机,f(n)是M在所有长度为n的输入上运行时所经过的最大步数,若f(n)是M的运行时间,则称M在时间f(n)内运行,M是f(n)时间图灵机,n是输入长度。
时间复杂性类定义:时间复杂度类 T I M E ( t ( n ) ) TIME(t(n)) TIME(t(n))为由 O ( t ( n ) ) O(t(n)) O(t(n))时间的图灵机判定的所有语言的集合。
由恒等式 n = 2 l o g 2 n n=2^{log_2^n} n=2log2n可得 n c = 2 c l o g 2 n n^c=2^{clog_2^n} nc=2clog2n,故而可以得到 2 O ( l o g n ) 2^{O(logn)} 2O(logn)表示 n c n^c nc的一个上界。
对于输入串 w w w:
A A A语言在 M 1 M1 M1上 A ∈ T I M E ( n 2 ) A \in TIME(n^2) A∈TIME(n2),
时间复杂度: O ( n 2 ) O(n^2) O(n2)
对于输入串 w w w:
A A A语言在 M 2 M2 M2上 A ∈ T I M E ( n l o g n ) A \in TIME(nlogn) A∈TIME(nlogn),
时间复杂度: O ( n l o g n ) O(nlogn) O(nlogn)
$M3$
对于输入串 w w w:
A A A语言在 M 2 M2 M2上 A ∈ T I M E ( n ) A \in TIME(n) A∈TIME(n),
时间复杂度: O ( n ) O(n) O(n)
\quad 可以得到,A语言在单带图灵机上时间复杂度为 O ( n l o g n ) O(nlogn) O(nlogn),在双带图灵机上时间复杂度为 O ( n ) O(n) O(n)。由此可以得到:A的复杂度与选择的计算模型有关。
\quad 考察三种计算模型:单带图灵机、多带图灵机和非确定型图灵机。
定理:设 t ( n ) t(n) t(n)是一个函数, t ( n ) ≥ n t(n)\geq n t(n)≥n。则每一个 t ( n ) t(n) t(n)时间的多带图灵机都和某个 O ( t 2 ( n ) ) O(t^2(n)) O(t2(n))时间的单带图灵机等价。
定义:设 N N N是一个非确定型图灵机,并且是个判定机,则其运行时间 f ( n ) f(n) f(n)是在任何长度为n的输入上所有计算分支中的最大步数。
定理:设 t ( n ) t(n) t(n)是一个函数, t ( n ) ≥ n t(n)\geq n t(n)≥n。则每一个 t ( n ) t(n) t(n)时间的非确定型单带图灵机都和某个 O ( 2 O ( t ( n ) ) ) O(2^{O(t(n))}) O(2O(t(n)))时间的确定型单带图灵机等价。
定义: P P P是确定型单带图灵机在多项式时间内可判定的语言类: P = U k T I M E ( n k ) P=U_k TIME(n^k) P=UkTIME(nk)
举例:判断两个数是否是互素、寻找有向图是否存在一条从s到t的路径,这类问题属于P。
定理:每一个上下文无关语言都是P的成员
定义:NP是具有多项式时间验证机的语言类。
验证机定义:语言A的验证机是一个算法V,这里 A = { w ∣ 对 某 个 字 符 串 c , V 接 受 < w , c > } A=\{w|对某个字符串c, V接受
定理:一个语言在NP中,当且仅当它能被某个非确定型多项式图灵机判定。
定义: N T I M E ( t ( n ) ) = { L ∣ L 是 一 个 被 O ( t ( n ) ) 时 间 的 非 确 定 型 图 灵 机 判 定 的 语 言 } NTIME(t(n))=\{L|L是一个被O(t(n))时间的非确定型图灵机判定的语言\} NTIME(t(n))={L∣L是一个被O(t(n))时间的非确定型图灵机判定的语言}。
推论: N P = U k N T I M E ( n k ) NP=U_kNTIME(n^k) NP=UkNTIME(nk)
NP问题举例:团问题、子集和问题。注意这些问题的补集不是很明显的属于NP,比如,验证某个图中不存在k个点的团,好像比验证它存在更困难。我们定义另外一个复杂类 c o N P coNP coNP,它包括NP中的语言的补语言。目前还不知道 c o N P coNP coNP是否与NP不同。
\quad P=NP?这个问题是目前最大的未解决的问题之一。目前已知最好的判定语言是NP的确定型方法是使用指数时间,既可以证明: N P ⊆ E X P T I M E = U k T I M E ( 2 n k ) NP \subseteq EXPTIME = U_kTIME(2^{n^k}) NP⊆EXPTIME=UkTIME(2nk)。但是,不知道NP是否包含在更小的确定型时间复杂度类。
\quad 定义:NP问题中存在一类问题,这类问题中任何一个存在多项式时间算法,那么所有的NP问题都是多项式时间可解。这类问题称为NP完全问题。
举例:SAT问题(第一个被证明的NPC问题,COOK),团问题,顶点覆盖问题,哈密尔顿路径问题,子集和问题。
定理: S A T ∈ P , 当 且 仅 当 P = N P SAT \in P,当且仅当P=NP SAT∈P,当且仅当P=NP
\quad 多项式时间规约:语言A可多项式时间规约到B,记为 A ≤ p B A \le_pB A≤pB,若存在多项式时间可计算函数 f f f,对于每一个 w w w,有: w ∈ A ⟺ f ( w ) ∈ B w\in A \iff f(w)\in B w∈A⟺f(w)∈B,函数 f f f称为A到B的多项式时间规约。
定理: 若 A ≤ p B 且 B ∈ P , 则 A ∈ P 若A\le_pB且B\in P,则A\in P 若A≤pB且B∈P,则A∈P。
证明: N = 对 输 入 w : 1. 计 算 f ( w ) ; 2. 在 输 入 f ( w ) 上 运 行 M , 输 出 M 的 输 出 。 N=对输入w: 1.计算f(w);2.在输入f(w)上运行M,输出M的输出。 N=对输入w:1.计算f(w);2.在输入f(w)上运行M,输出M的输出。
上面两步都是多项式时间可计算的,两个多项式的合成还是多项式,故而 A ∈ P A\in P A∈P。
定义:如果语言B满足下面两个条件,则称B是NP完全的:
当只满足条件2时称B是NPH问题。
定理:若 B ∈ N P C 且 B ∈ P , 则 P = N P B\in NPC且B\in P,则P=NP B∈NPC且B∈P,则P=NP
证明:B是NPC的,故 B ∈ N P B\in NP B∈NP且NP中每个A都可以归约到B,又因为 B ∈ P B \in P B∈P,故而 A ∈ P A \in P A∈P,故而 P = N P P=NP P=NP。
定理:若 B ∈ N P C 且 B ≤ p C 且 C ∈ N P B\in NPC且B\le_p C且C\in NP B∈NPC且B≤pC且C∈NP,则 C ∈ N P C C\in NPC C∈NPC。
证明:核心目的在于证明NP中每个A都可以多项式归约到C。根据可规约性的等价关系,即A可多项式规约到B,B可多项式规约到C,故而A可多项式规约到C,又因为C是NP问题,故而C是NP完全的。