一、度量复杂性
语言:,显然该语言可判定
- :单带图灵机
- :更快的单带图灵机
- :双带图灵机
时间复杂度定义:令M是一个在所有输入上都停机的确定型图灵机,f(n)是M在所有长度为n的输入上运行时所经过的最大步数,若f(n)是M的运行时间,则称M在时间f(n)内运行,M是f(n)时间图灵机,n是输入长度。
时间复杂性类定义:时间复杂度类为由时间的图灵机判定的所有语言的集合。
由恒等式可得,故而可以得到表示的一个上界。
对于输入串:
- 1.扫描带子,如果在1的右边发现0,就拒绝
- 2.如果带子上既有0也有1,就重复下一步
- 3.扫描带子,删除一个0和一个1
- 4.如果删除所有1后还有0或者删除所有0后还有1,就拒绝,否则接收
语言在上,
时间复杂度:
对于输入串:
- 1.扫描带子,如果在1的右边发现0,就拒绝
- 2.只要带子上还有0和1,就重复下面步骤
- 3.扫描带子,检查剩余的0,1的总数是偶数还是奇数,若是奇数则拒绝
- 4.再次扫描带子,从第一个0开始,隔一个删除一个0;然后从第一个1开始,隔一个删除一个1
- 5.如果袋子上不再有0和1,接收;否则拒绝
语言在上,
时间复杂度:
$M3$
对于输入串:
- 1.扫描带子,如果在1的右边发现0,就拒绝
- 2.扫描带子1上的0,直到抵达第一个1时停止,同时将0复制到带子2上
- 3.扫描带子1上的1直到输入的末尾,每次从带子1上读到1个1,就在带子2上删除一个0,如果读完1之前所有的0都被删除,则拒绝
- 4.如果所有的0都被删除,则接受,如果还有0剩下,则拒绝
语言在上,
时间复杂度:
可以得到,A语言在单带图灵机上时间复杂度为,在双带图灵机上时间复杂度为。由此可以得到:A的复杂度与选择的计算模型有关。
二、模型间的复杂性关系
考察三种计算模型:单带图灵机、多带图灵机和非确定型图灵机。
定理:设是一个函数,。则每一个时间的多带图灵机都和某个时间的单带图灵机等价。
定义:设是一个非确定型图灵机,并且是个判定机,则其运行时间是在任何长度为n的输入上所有计算分支中的最大步数。
定理:设是一个函数,。则每一个时间的非确定型单带图灵机都和某个时间的确定型单带图灵机等价。
三、P类
定义:是确定型单带图灵机在多项式时间内可判定的语言类:
举例:判断两个数是否是互素、寻找有向图是否存在一条从s到t的路径,这类问题属于P。
定理:每一个上下文无关语言都是P的成员
四、NP类
定义:NP是具有多项式时间验证机的语言类。
验证机定义:语言A的验证机是一个算法V,这里。因为只根据的长度来度量验证机的时间,所有多项式时间验证机在的长度的多项式时间内运行。若A有一个多项式时间验证机,则称A语言多项式时间可验证。
定理:一个语言在NP中,当且仅当它能被某个非确定型多项式图灵机判定。
定义:。
推论:
NP问题举例:团问题、子集和问题。注意这些问题的补集不是很明显的属于NP,比如,验证某个图中不存在k个点的团,好像比验证它存在更困难。我们定义另外一个复杂类,它包括NP中的语言的补语言。目前还不知道是否与NP不同。
P与NP问题
- P=可以多项式时间判定的语言类
- NP=可以多项式时间验证的语言类
P=NP?这个问题是目前最大的未解决的问题之一。目前已知最好的判定语言是NP的确定型方法是使用指数时间,既可以证明:。但是,不知道NP是否包含在更小的确定型时间复杂度类。
五、NPC问题
定义:NP问题中存在一类问题,这类问题中任何一个存在多项式时间算法,那么所有的NP问题都是多项式时间可解。这类问题称为NP完全问题。
举例:SAT问题(第一个被证明的NPC问题,COOK),团问题,顶点覆盖问题,哈密尔顿路径问题,子集和问题。
定理:
六、多项式时间可归约性
多项式时间规约:语言A可多项式时间规约到B,记为,若存在多项式时间可计算函数,对于每一个,有:,函数称为A到B的多项式时间规约。
定理:。
证明:
上面两步都是多项式时间可计算的,两个多项式的合成还是多项式,故而。
一个规约问题的示例:
NP完全性的定义和定理
定义:如果语言B满足下面两个条件,则称B是NP完全的:
- 1.B属于NP
- 2.NP中每个A都可以多项式时间可规约未B
当只满足条件2时称B是NPH问题。
定理:若
证明:B是NPC的,故且NP中每个A都可以归约到B,又因为,故而,故而。
定理:若,则。
证明:核心目的在于证明NP中每个A都可以多项式归约到C。根据可规约性的等价关系,即A可多项式规约到B,B可多项式规约到C,故而A可多项式规约到C,又因为C是NP问题,故而C是NP完全的。