一、度量复杂性
语言: A = { 0 k 1 k ∣ k ≥ 0 } A=\{0^k1^k | k\ge 0\} A={0k1k∣k≥0},显然该语言可判定
- 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)
A∈TIME(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)
A∈TIME(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)
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是确定型单带图灵机在多项式时间内可判定的语言类:
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={w∣对某个字符串c,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))={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不同。
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}) NP⊆EXPTIME=UkTIME(2nk)。但是,不知道NP是否包含在更小的确定型时间复杂度类。
五、NPC问题
\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。
一个规约问题的示例: 3 S A T ≤ p 团 问 题 3SAT \le_p 团问题 3SAT≤p团问题
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
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完全的。