计算复杂度基础
时间复杂度的刻画
P
c
l
a
s
s
代
表
的
是
所
有
的
多
项
式
时
间
复
杂
可
解
问
题
的
集
合
P
问
题
:
有
多
项
式
时
间
可
解
算
法
的
问
题
,
比
如
:
欧
拉
回
路
N
o
n
−
d
e
t
e
r
m
i
n
i
s
t
i
c
P
问
题
:
可
以
在
多
项
式
的
时
间
里
验
证
一
个
解
的
问
题
。
N
P
−
c
o
m
p
l
e
t
e
:
最
“
完
整
的
”
N
P
问
题
哈
密
顿
回
路
N
P
−
h
a
r
d
P
r
o
b
l
e
m
:
对
于
判
定
问
题
A
,
若
A
满
足
:
所
有
的
N
P
问
题
都
可
以
约
化
到
它
。
(
N
P
−
H
a
r
d
问
题
要
比
N
P
C
问
题
的
范
围
广
)
P\ \ class 代表的是所有的多项式时间复杂可解问题的集合\\ P问题:有多项式时间可解算法的问题,比如: 欧拉回路\\ Non-deterministic\ \ P问题:可以在多项式的时间里验证一个解的问题。 \\ NP-complete :最“完整的”NP问题 哈密顿回路\\ NP-hard Problem: 对于判定问题A,若A 满足: 所有的 NP 问题都可以约化到它。(NP-Hard问题要比 NPC问题的范围广)
P class代表的是所有的多项式时间复杂可解问题的集合P问题:有多项式时间可解算法的问题,比如:欧拉回路Non−deterministic P问题:可以在多项式的时间里验证一个解的问题。NP−complete:最“完整的”NP问题哈密顿回路NP−hardProblem:对于判定问题A,若A满足:所有的NP问题都可以约化到它。(NP−Hard问题要比NPC问题的范围广)
问题的转换
任何一个问题都是一个“问题”与“解”的二元对应
优化问题能不能写成判定问题,是否所有问题都能转化成判定问题?是。
优化问题提:找G中两个定点间的最短路
判定问题:是否存在路径最小为k的路径,k为正数(连续问一群这样的问题)
编码与转换(同一个算法解决一个问题是否为P与编码无关)
判定问题的回答有0与1,这样就产生了“编码”{0,1}*(由0,1组成的序列)
编
码
会
改
变
复
杂
度
吗
?
−
−
−
N
o
编码会改变复杂度吗?\ \ \ --- \ \ No \ \ \
编码会改变复杂度吗? −−− No
例:整数k的编码:
11111
k
个
1
,
算
法
A
使
用
O
(
k
)
可
解
二
进
制
编
码
长
n
=
l
o
g
2
k
下
取
整
+
1
,
使
用
算
法
A
是
2
n
,
指
数
复
杂
度
问
题
这
与
实
际
好
像
不
符
1 1 1 1 1 k个1,算法A使用O(k)可解\\ 二进制编码 长n={log_2k}_{下取整}+1,使用算法A是2^n,指数复杂度问题\\ 这与实际好像不符
11111k个1,算法A使用O(k)可解二进制编码长n=log2k下取整+1,使用算法A是2n,指数复杂度问题这与实际好像不符
多 项 式 相 关 的 两 个 问 题 的 编 码 , 其 一 多 项 式 可 解 , 另 一 个 也 可 多 项 式 时 间 复 杂 度 两 个 编 码 多 项 式 相 关 : 两 个 编 码 如 果 存 在 一 个 多 项 式 时 间 可 计 算 的 函 数 f , f ( e 1 ) = e 2 多项式相关的两个问题的编码,其一多项式可解,另一个也可多项式时间复杂度\\ 两个编码多项式相关:\color{red}两个编码如果存在一个多项式时间可计算的函数f,f(e_1)=e_2 多项式相关的两个问题的编码,其一多项式可解,另一个也可多项式时间复杂度两个编码多项式相关:两个编码如果存在一个多项式时间可计算的函数f,f(e1)=e2
语言
集合\sigma ={0,1},二进制语言(词典)\sigma^是由\sigma 中元素构成的
可以通过一个问题提来定义一种语言L:L是\sigma^ 的子集{x\in L,\Sigma(x)=1}
P复杂度的语言:对于任意一个长为n的串,算法A能判定其是否再语言L中。
可以通过一个算法提来定义一种语言L:L={x\in L,A(x)=1}
P class 的另一个表述 Pclass={L\subset {0,1}^*}
NP类问题将问题分为求解和验证两个阶段,问题的求解是非确定性的,无法在多项式时间内得到答案,而问题的验证却是确定的,能够在多项式时间里确定结果。添加链接描述
规约
一个问题A可以约化为问题B的含义即是,问题A可以“变成”问题B,可以用问题B的解法解决问题A。
B的时间复杂度高于或者等于A的时间复杂度。也就是说,问题A不比问题B难。
A | B | AtoB(规约可以理解为小于等于,与离散中的偏序关系类似。) |
---|---|---|
求解一个一元一次方程 | 求解一个一元二次方程 | |
Hamilton回路 | TSP问题(Travelling Salesman Problem,旅行商问题) | 在Hamilton回路问题中,两点相连即这两点距离为0,两点不直接相连则令其距离为1,于是问题转化为在TSP问题中,是否存在一条长为0的路径。Hamilton回路存在当且仅当TSP问题中存在长为0的回路。 |
NPC问题
如何证明一个问题是NP-Hard或NP-Complete?
NPC问题的定义非常简单。同时满足下面两个条件的问题就是NPC问题。首先,它得是一个NP问题;然后,所有的NP问题都可以约化到它。
A
i
s
N
P
C
{
A
i
s
N
P
B
i
s
N
P
C
,
B
≤
p
A
A\;is\;NPC\;\left\{\begin{array}{l} A\; is\; NP\\ B\; is \; NPC , B \leq_p A\end{array}\right.
AisNPC{AisNPBisNPC,B≤pA
NPC问题de证明
SAT问题:逻辑电路满足问题。第一个NPC问题。
所有的算法都是可以编码为boolean formula问题,这意味着所有算法都可以使用SAT的求解器去求解,因为他们本质上就是boolean formula问题即(…∨…∨…)∧(…∨…∨…)∧…。
证明略。
3-CNF-SAT
证明方法:
仅
需
证
S
A
T
≤
p
3
−
N
C
F
−
S
A
T
仅需证SAT\leq_p 3-NCF-SAT
仅需证SAT≤p3−NCF−SAT
ϕ
为
一
个
逻
辑
电
路
公
式
\phi为一个逻辑电路公式
ϕ为一个逻辑电路公式
使
用
德
莫
根
律
等
定
律
划
归
使用德莫根律等定律划归
使用德莫根律等定律划归
Shortest Clique Problem(最短团问题)
送分题:
C
l
i
q
u
e
问
题
描
述
:
就
是
找
到
一
个
图
大
小
为
k
的
团
,
其
中
团
是
一
个
完
全
图
(
每
个
结
点
相
互
联
结
)
。
Clique问题描述\\ :就是找到一个图大小为k的团,其中团是一个完全图(每个结点相互联结)。
Clique问题描述:就是找到一个图大小为k的团,其中团是一个完全图(每个结点相互联结)。
1.先证明多项式时间可以验证
ϕ
=
C
1
∧
C
2
…
…
∧
C
k
,
每
个
子
句
C
有
3
个
文
字
如
以
下
的
情
况
,
将
ϕ
=
(
x
1
∨
¬
x
2
∨
x
3
)
∧
(
¬
x
1
∨
x
2
∨
x
3
)
∧
(
x
1
∨
x
2
∨
x
3
)
转
化
为
一
个
图
G
,
用
ϕ
的
每
个
子
句
中
的
三
个
点
代
表
图
G
中
的
一
个
点
,
若
使
得
ϕ
为
真
,
只
需
要
每
组
(
每
个
括
号
内
)
存
在
一
个
真
值
ϕ
的
一
个
可
满
足
性
赋
值
,
可
以
构
成
一
个
k
团
\phi=C_1\wedge C_2 …… \wedge C_k,每个子句C有3个文字\\ \color{red}如以下的情况,将\phi=(x_1\vee \neg x_2 \vee x_3)\wedge(\neg x_1\vee x_2 \vee x_3)\wedge(x_1\vee x_2 \vee x_3)\\转化为一个图G,用\phi的每个子句中的三个点代表图G中的一个点,\\ 若使得\phi为真,\\只需要每组(每个括号内)存在一个真值\\ \phi的一个可满足性赋值,可以构成一个k团
ϕ=C1∧C2……∧Ck,每个子句C有3个文字如以下的情况,将ϕ=(x1∨¬x2∨x3)∧(¬x1∨x2∨x3)∧(x1∨x2∨x3)转化为一个图G,用ϕ的每个子句中的三个点代表图G中的一个点,若使得ϕ为真,只需要每组(每个括号内)存在一个真值ϕ的一个可满足性赋值,可以构成一个k团
按 照 以 上 规 则 , ϕ 的 一 个 可 满 足 性 赋 值 , 可 以 构 成 一 个 k 团 按照以上规则,\phi的一个可满足性赋值,可以构成一个k团 按照以上规则,ϕ的一个可满足性赋值,可以构成一个k团
subset sum子集和问题
subset sum
给定一个包含N个非负数的set, 并且给定K, 从集合中找出一组元素子集, 使得这组子集的各个元素相加起来和是K。
vertex cover无向图的顶点覆盖问题:
顶点覆盖问题的例子
以
上
例
子
中
w
和
z
是
一
个
顶
点
覆
盖
,
并
且
是
最
小
的
,
k
=
2
顶
点
覆
盖
问
题
的
描
述
:
V
E
R
T
E
X
−
C
O
V
E
R
=
(
G
,
k
)
:
G
r
a
p
h
G
有
大
小
为
k
的
顶
点
覆
盖
以上例子中w和z是一个顶点覆盖,并且是最小的,k=2\\ 顶点覆盖问题的描述:\\ VERTEX-COVER=\\{(G,k):Graph G有大小为k的 顶点覆盖}\\
以上例子中w和z是一个顶点覆盖,并且是最小的,k=2顶点覆盖问题的描述:VERTEX−COVER=(G,k):GraphG有大小为k的顶点覆盖
1. 首 先 其 应 该 是 一 个 N P 问 题 对 所 有 边 进 行 遍 历 即 可 , 判 断 边 是 否 与 顶 点 相 连 1.首先其应该是一个NP问题\\ 对所有边进行遍历即可,判断边是否与顶点相连 1.首先其应该是一个NP问题对所有边进行遍历即可,判断边是否与顶点相连
2. 转 化 ( 规 约 ) 团 问 题 : 无 向 图 中 找 最 大 定 点 集 合 称 为 完 全 图 C L I Q U E ≤ p V E R T E X − C O V E R 2.转化(规约)\\ 团问题:无向图中找最大定点集合称为完全图\\ CLIQUE \leq_{p} VERTEX-COVER 2.转化(规约)团问题:无向图中找最大定点集合称为完全图CLIQUE≤pVERTEX−COVER
G = ( V , E ) , G 的 边 的 补 G ˉ = { V , E ˉ } , E ˉ 为 G 中 的 补 边 集 E ˉ = { ( u , v ) : u , v ∈ V , a n d ( u , v ) ∉ E } G=(V,E),G的边的补\bar G =\{V,\bar E \},\bar E为G中的补边集\\ \tiny \bar E=\{ (u,v):u,v\in V,and(u,v)\notin E \} G=(V,E),G的边的补Gˉ={V,Eˉ},Eˉ为G中的补边集Eˉ={(u,v):u,v∈V,and(u,v)∈/E}
r e d u c t i o n a l g o r i t h m 输 入 为 ( G , k ) 的 团 问 题 , 能 在 多 项 式 时 间 求 出 G ˉ , 输 出 为 ( G ˉ , ∣ V ∣ − ∣ V ′ ∣ ) 的 顶 点 覆 盖 问 题 V ′ 为 G ˉ 中 团 的 点 , “ G ˉ 中 的 非 团 中 ” 的 顶 点 为 顶 点 覆 盖 的 顶 点 G ˉ 中 的 边 都 是 不 用 覆 盖 的 , G ˉ 中 的 边 至 多 有 一 个 顶 点 不 属 于 团 reduction \ \ algorithm \\ 输入为(G,k)的团问题,能在多项式时间求出\bar G,输出为(\bar G,|V|-|V'|)的顶点覆盖问题\\ V'为\bar G中团的点,“\bar G中的非团中”的顶点为顶点覆盖的顶点\\ \bar G中的边都是不用覆盖的,\bar G中的边至多有一个顶点不属于团 reduction algorithm输入为(G,k)的团问题,能在多项式时间求出Gˉ,输出为(Gˉ,∣V∣−∣V′∣)的顶点覆盖问题V′为Gˉ中团的点,“Gˉ中的非团中”的顶点为顶点覆盖的顶点Gˉ中的边都是不用覆盖的,Gˉ中的边至多有一个顶点不属于团
Hamiltonian Cycle(哈密顿回路):
TSP
参考
Algorithms and Networks by Hans L. Bodlaender Johan M. M. van Rooij
算法导论的chapter34,35