计算复杂性第七章——时间复杂性

一、度量复杂性

语言: A = { 0 k 1 k ∣ k ≥ 0 } A=\{0^k1^k | k\ge 0\} A={0k1kk0},显然该语言可判定

  • M 1 M1 M1:单带图灵机
  • M 2 M2 M2:更快的单带图灵机
  • M 3 M3 M3:双带图灵机

时间复杂度定义:令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的一个上界。

M 1 M1 M1

对于输入串 w w w

  • 1.扫描带子,如果在1的右边发现0,就拒绝
  • 2.如果带子上既有0也有1,就重复下一步
  • 3.扫描带子,删除一个0和一个1
  • 4.如果删除所有1后还有0或者删除所有0后还有1,就拒绝,否则接收

A A A语言在 M 1 M1 M1 A ∈ T I M E ( n 2 ) A \in TIME(n^2) ATIME(n2),
时间复杂度: O ( n 2 ) O(n^2) O(n2)

M 2 M2 M2

对于输入串 w w w

  • 1.扫描带子,如果在1的右边发现0,就拒绝
  • 2.只要带子上还有0和1,就重复下面步骤
  • 3.扫描带子,检查剩余的0,1的总数是偶数还是奇数,若是奇数则拒绝
  • 4.再次扫描带子,从第一个0开始,隔一个删除一个0;然后从第一个1开始,隔一个删除一个1
  • 5.如果袋子上不再有0和1,接收;否则拒绝

A A A语言在 M 2 M2 M2 A ∈ T I M E ( n l o g n ) A \in TIME(nlogn) ATIME(nlogn),
时间复杂度: O ( n l o g n ) O(nlogn) O(nlogn)

$M3$

对于输入串 w w w:

  • 1.扫描带子,如果在1的右边发现0,就拒绝
  • 2.扫描带子1上的0,直到抵达第一个1时停止,同时将0复制到带子2上
  • 3.扫描带子1上的1直到输入的末尾,每次从带子1上读到1个1,就在带子2上删除一个0,如果读完1之前所有的0都被删除,则拒绝
  • 4.如果所有的0都被删除,则接受,如果还有0剩下,则拒绝

A A A语言在 M 2 M2 M2 A ∈ T I M E ( n ) A \in TIME(n) ATIME(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是确定型单带图灵机在多项式时间内可判定的语言类: P = U k T I M E ( n k ) P=U_k TIME(n^k) P=UkTIME(nk)
举例:判断两个数是否是互素、寻找有向图是否存在一条从s到t的路径,这类问题属于P。
定理:每一个上下文无关语言都是P的成员

四、NP类

定义:NP是具有多项式时间验证机的语言类。
验证机定义:语言A的验证机是一个算法V,这里 A = { w ∣ 对 某 个 字 符 串 c , V 接 受 < w , c > } A=\{w|对某个字符串c, V接受<w,c>\} A={wc,V<w,c>}。因为只根据 w w w的长度来度量验证机的时间,所有多项式时间验证机在 w w w的长度的多项式时间内运行。若A有一个多项式时间验证机,则称A语言多项式时间可验证。
定理:一个语言在NP中,当且仅当它能被某个非确定型多项式图灵机判定
定义: N T I M E ( t ( n ) ) = { L ∣ L 是 一 个 被 O ( t ( n ) ) 时 间 的 非 确 定 型 图 灵 机 判 定 的 语 言 } NTIME(t(n))=\{L|L是一个被O(t(n))时间的非确定型图灵机判定的语言\} NTIME(t(n))={LLO(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不同

P与NP问题

  • P=可以多项式时间判定的语言类
  • 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}) NPEXPTIME=UkTIME(2nk)。但是,不知道NP是否包含在更小的确定型时间复杂度类。

五、NPC问题

\quad 定义:NP问题中存在一类问题,这类问题中任何一个存在多项式时间算法,那么所有的NP问题都是多项式时间可解。这类问题称为NP完全问题。
举例:SAT问题(第一个被证明的NPC问题,COOK),团问题,顶点覆盖问题,哈密尔顿路径问题,子集和问题。
定理: S A T ∈ P , 当 且 仅 当 P = N P SAT \in P,当且仅当P=NP SATPP=NP

六、多项式时间可归约性

\quad 多项式时间规约:语言A可多项式时间规约到B,记为 A ≤ p B A \le_pB ApB,若存在多项式时间可计算函数 f f f,对于每一个 w w w,有: w ∈ A    ⟺    f ( w ) ∈ B w\in A \iff f(w)\in B wAf(w)B,函数 f f f称为A到B的多项式时间规约。
定理: 若 A ≤ p B 且 B ∈ P , 则 A ∈ P 若A\le_pB且B\in P,则A\in P ApBBPAP
证明: 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)MM
上面两步都是多项式时间可计算的,两个多项式的合成还是多项式,故而 A ∈ P A\in P AP

一个规约问题的示例: 3 S A T ≤ p 团 问 题 3SAT \le_p 团问题 3SATp

// TODO 截图

NP完全性的定义和定理

定义:如果语言B满足下面两个条件,则称B是NP完全的:

  • 1.B属于NP
  • 2.NP中每个A都可以多项式时间可规约未B

当只满足条件2时称B是NPH问题。
定理:若 B ∈ N P C 且 B ∈ P , 则 P = N P B\in NPC且B\in P,则P=NP BNPCBPP=NP
证明:B是NPC的,故 B ∈ N P B\in NP BNP且NP中每个A都可以归约到B,又因为 B ∈ P B \in P BP,故而 A ∈ P A \in P AP,故而 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 BNPCBpCCNP,则 C ∈ N P C C\in NPC CNPC
证明:核心目的在于证明NP中每个A都可以多项式归约到C。根据可规约性的等价关系,即A可多项式规约到B,B可多项式规约到C,故而A可多项式规约到C,又因为C是NP问题,故而C是NP完全的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值