时间复杂性
问题:一个单带图灵机 M 1 M_1 M1多少时间能够判决一个输入是否满足语言 A = { 0 k 1 k ∣ k ≥ 0 } A=\{0^k1^k|k\geq0\} A={0k1k∣k≥0}?
一种语言:可以看作一类判决问题(其他问题可以转化为判决问题)
Solution 1:(单带图灵机)
- 从左到右扫描,如果0出现在1的右边,则拒绝该输入为语言 A A A
- 循环步骤1,直至扫描完毕,仍无法判决。
- 继续扫描,每遇到一个0就相应删除一个1
- 如果最终0和1都被删除,则接受该输入为语言 A A A,否则拒绝该输入为语言 A A A
上述方案的时间复杂度:
我们用
n
n
n表示输入的长度
Note:在渐近分析中,我们只考虑表达式的最高阶项作为算法的运行时间,而忽略了该项的系数和任何低阶项
O
O
O表示小于等于,
o
o
o表示严格小于
T
I
M
E
(
t
(
n
)
)
TIME(t(n))
TIME(t(n))表示图灵机能够在
O
(
t
(
n
)
)
O(t(n))
O(t(n))时间内可判决的语言(问题)集合。
上述方案的瓶颈在步骤3,复杂度为
O
(
n
2
)
O(n^2)
O(n2)
Solution 2:(单带图灵机)
- 从左到右扫描,如果0出现在1的右边,则拒绝该输入为语言 A A A
- 循环步骤1,直至扫描完毕,如仍无法判决,执行步骤3.4。
- 从左至右,检查1和0的总数。如果为奇数则拒绝该输入为语言 A A A,如果为偶数则进行步骤4.
- 每隔一个0删除一个,每隔一个1删除一个
- 经过上述循环后,如果没有0或1在带子上
上述方案的时间复杂度:
T
I
M
E
(
n
l
o
g
n
)
TIME(nlogn)
TIME(nlogn),步骤4规模每次以2倍的速度减少,每次扫描时间为
O
(
n
)
O(n)
O(n),因此是
(
n
l
o
g
n
)
(nlogn)
(nlogn)
Solution 3:(双带图灵机)
- 从左到右扫描,如果0出现在1的右边,则拒绝该输入为语言 A A A
- 将带子1中的0拷贝到带子2中,然后从带子1中的第一个1开始,带子2从第一个0开始。
- 每读带子1中一个1,则删除带子2中一个0。
- 重复步骤3的操作,最后如果带子1中的1和带子2中的0同时不存在,则接受该输入为语言 A A A,否则拒绝该输入为语言 A A A。
上述方案的时间复杂度: O ( n ) O(n) O(n)
计算模型的选择如何影响语言的计算复杂性
多带图灵机:
- 每个 t ( n ) t(n) t(n)时间的多带图灵机有一个等效的 O ( t 2 ( n ) ) O(t^2(n)) O(t2(n))的单带图灵机(复杂度至多不超过 t 2 ( n ) t^2(n) t2(n))
- 扩展:所有确定图灵机都是多项式等价的
非确定图灵机
- 非确定性图灵机的复杂度按最大运行时间分支对应的复杂度来定义
- 每个 t ( n ) t(n) t(n)时间的非确定图灵机有一个等效的 2 O ( t ( n ) ) 2^{O(t(n))} 2O(t(n))的确定单带图灵机(复杂度至多不超过 2 O ( t ( n ) ) 2^{O(t(n))} 2O(t(n)))
经证明:在量子计算机下,RSA密码系统可以在多项式时间解决
P问题:多项式时间可判决
P是在确定性单带图灵机上可以在多项式时间内确定的语言(问题)类别,确定性多带图灵机可以多项式等价于确定性单带图灵机。
如:
1. 路径问题:有向图中是否存在一条从
s
s
s到
t
t
t的路径。判定性问题
从s到t进行深度优先搜索(用栈模拟),广度优先搜索(用队列模拟,出队,标记,扩展,入队)
2. 互质问题:两个数是否是互质的
3. 合数问题:判断一个数是否是合数
结论:每种上下文无关的语言都可以在多项式时间判定,即上下文无关语言属于 P P P
NP问题:多项式时间可验证
1. 哈密尔顿路问题:有向图中是否存在经过每个顶点恰好一次的路径(不是哈密尔顿圈不过实际等效,可以不走完所有的边)
找到一个证据
c
c
c即可
非确定图灵机在多项式时间内确定哈密尔顿问题:
N
T
I
M
E
(
t
(
n
)
)
NTIME(t(n))
NTIME(t(n)):表示非确定图灵机在
O
(
t
(
n
)
)
O(t(n))
O(t(n))时间内可以判定的语言(问题)集合
2.团问题:确定图中是否包含指定大小
k
k
k的集团
3. 子集和问题:集合中是否存在一个子集,该子集内所有元素之和为
t
t
t
NP问题一定能在指数时间内判定:
co-NP问题:complement,由NP问题的补问题组成
co-NP问题仍可能为P问题
验证某问题不存在似乎比验证其存在更困难,有可能难度是一样的,比如P问题
1. 哈密尔顿路的补问题:有向图中是否不存在经过每个顶点恰好一次的路径
2. 团问题的补问题
3. 子集和的补问题
NPC问题:NP中最难的一类问题
尽管我们没有证明 P P P是否等于 N P NP NP,但是我们仍相信 P P P是不等于 N P NP NP的,因此我们一旦将一个问题归为NPC问题,那么我们暂且认为该问题没有多项式解法
1. SAT问题:测试布尔公式是否可满足
→
\rightarrow
→:可以看作电路中的≤符号,满足则为1,否则为0
↔
\leftrightarrow
↔:可以看作两个逻辑同时满足,即相当于
=
=
=符号
规约: 如果能将
A
A
A规约到
B
B
B,则
B
B
B问题更难,可以用解决
B
B
B问题的方法解决A问题。
多项式规约: 如果能将
A
A
A多项式规约到
B
B
B,记作
A
≤
p
B
A\leq_p B
A≤pB,则多项式次调用问题
B
B
B的解决方法就可以解决问题
A
A
A。
w
∈
A
↔
f
(
w
)
∈
B
w\in A \leftrightarrow f(w)\in B
w∈A↔f(w)∈B 描述了实例转化的过程。
证明一个问题是NPC问题: 先证明该问题是NP问题,然后将一个现有的NPC问题规约到该问题,因为NPC是最难的了,所以它也是最难的问题,即它是NPC问题。
2. 3SAT问题:
文字,句子,合取范式(CNF),可以多项式时间规约到3SAT问题
团内互连说明这几种状态可以保证不冲突的条件下,使每一部分都为真。
将SAT多项式时间规约到3SAT,并证明3SAT是NP问题,则可以说明3SAT是NPC的
3. 独立集问题:
是否存在一个大小为
k
k
k的顶点集合,集合中任意两个顶点之间在原图中不存在边
4.顶点覆盖问题:
是否存在一个大小为 k k k的顶点集合,集合所有顶点覆盖原图中所有的边
举个例子:
- 最大独立集:由3个节点构成,249
- 最大团:由4个节点构成,5689
- 最小顶点覆盖:与最大独立集互补,由6个节点构成,135678
5. 最大割问题:
无向图中,是否存在一个大小至少为
k
k
k,使集合分离成两部分
6. 哈密尔顿回路: 图中是否存在一个回路,恰好经过每个顶点一次。
Note: 欧拉回路:图中是否存在一个回路,恰好经过每条边一次。欧拉回路问题是P问题,连通图中,每个顶点的出度和入度相等就存在欧拉回路
7. 着色问题: 相邻节点不能着同样的颜色
如果图中存在一个
k
k
k团,则要对该图着色至少要
k
k
k种颜色
8.旅行商问题: 问题基于完全图,找到一个回路,使访问所有顶点的总费用最少
4.其他NPC问题:
NPH问题
所有NPC问题都可以规约到该问题,但是不要求该问题是NP问题。
庞加莱猜想:任一单连通(没有洞)的、封闭的三维流形与三维球面同胚。
形象理解:如果绳索能收回地球,则宇宙是球形
费马最后定理(费马猜想):当
n
>
2
n>2
n>2时,不存在三个正整数满足
a
n
+
b
n
=
c
n
a^n+b^n=c^n
an+bn=cn