定义
近似算法是一种用来处理NP-完全优化问题的一种方法。
特点
- NP-难问题
- 在大多数情况下是多项式算法
- 近似比
近似比
ρ
(
n
)
≥
m
a
x
(
C
C
∗
,
C
∗
C
)
\rho(n) \ge {max({C \over{C^*}},{C^* \over{C}})}
ρ(n)≥max(C∗C,CC∗)
第一项为求极小值时,第二项为求极大值时。
近似比越大,算法性能越差。
近似策略/近似结构
优化问题的近似策略是一种近似算法,它的输入不仅是问题的一个实例,而且是一个值 ϵ \epsilon ϵ,因此对于任何确定的 ϵ \epsilon ϵ,该策略是一个 ( 1 + ϵ ) (1+\epsilon) (1+ϵ)-近似算法。
PTAS
多项式时间近似策略
对任意确定的
ϵ
>
0
\epsilon>0
ϵ>0,运行时间与输入算例的大小
n
n
n呈多项式关系。
FPTAS
完全多项式时间近似策略
对任意确定的
ϵ
>
0
\epsilon>0
ϵ>0,运行时间与输入算例的大小
n
n
n和
1
/
ϵ
1/\epsilon
1/ϵ都呈多项式关系。
例1.顶点覆盖问题
目标
对给定无向图,寻找一个最小的顶点集合使之满足“顶点覆盖”。
算法
证明
- (1)多项式性
已证明其在多项式时间内运行。 - (2)正确性
算法返回的集合C中的顶点是“顶点覆盖”,因为该算法的循环直到所有的边的某一顶点都存在集合C中才结束。 - (3)近似度
C ∗ C^* C∗:精确解集合
A A A: 算法第四行被挑选的边的集合
C C C:近似算法解
由于 A A A中的边都是不连通的,即 A A A中不存在两条边被 C ∗ C^* C∗中的同一个顶点覆盖
∣ C ∗ ∣ ≥ ∣ A ∣ |C^*|\ge{|A|} ∣C∗∣≥∣A∣
∣ C ∣ = 2 ∣ A ∣ |C|=2|A| ∣C∣=2∣A∣
由以上两式推出
∣ C ∣ = 2 ∣ A ∣ ≤ 2 ∣ C ∗ ∣ |C|=2|A|\le{2|C^*|} ∣C∣=2∣A∣≤2∣C∗∣
例2.满足三角不等式的旅行商问题
TSP是NP-完全问题
目标
假设有一个旅行商人要拜访N个城市,他必须选择所要走的路径,路径的限制是每个城市只能拜访一次,而且最后要回到原来出发的城市。路径的选择目标是要求得的路径路程为所有路径之中的最小值。
算法
证明
(1)多项式性
(2)正确性
(3)近似度
H
∗
H^*
H∗:精确解
T
T
T:最小生成树
W
W
W:T的"full work"
H
H
H:近似解
c
(
T
)
≤
c
(
H
∗
)
c(T)\le{c(H^*)}
c(T)≤c(H∗)
c
(
W
)
=
2
c
(
T
)
c(W)=2c(T)
c(W)=2c(T)
以上两式推出
c
(
W
)
≤
2
c
(
H
∗
)
c(W)\le{2c(H^*)}
c(W)≤2c(H∗)
c
(
H
)
≤
c
(
W
)
c(H)\le{c(W)}
c(H)≤c(W)
可以推出
c
(
H
)
≤
2
c
(
H
∗
)
c(H)\le{2c(H^*)}
c(H)≤2c(H∗)
哈密顿环
NP-完全问题
近似难
近似难有解就证明了
P
=
N
P
P=NP
P=NP
如果
P
!
=
N
P
P !=NP
P!=NP,则对于任意常数
ρ
>
1
\rho > 1
ρ>1,对于一般的旅行商问题,不存在近似比为
ρ
\rho
ρ的多项式时间近似算法。
证明过程
(1)先建立全图
E
‘
=
{
(
u
,
v
)
:
u
,
v
∈
V
a
n
d
u
≠
v
}
E^`=\{{(u,v):u,v \in {V} and \space u \ne{v}}\}
E‘={(u,v):u,v∈Vand u=v}
(2)对所有的边加上权值,原来的边权值为1
c
(
u
,
v
)
=
{
n
,
i
f
(
u
,
v
)
∈
E
ρ
∣
V
∣
+
1
,
o
t
h
e
r
w
i
s
e
c(u,v)= \begin{cases} n, if (u,v) \in E\\ \rho|V| + 1, otherwise \end{cases}
c(u,v)={n,if(u,v)∈Eρ∣V∣+1,otherwise
(3)如果原图中有哈密顿环,把H环作为正确解
∣
V
∣
|V|
∣V∣,否则
>
ρ
∣
V
∣
>\rho|V|
>ρ∣V∣。
例3. 子集和问题
目标
在 S S S中寻找合适的子集,子集中元素的和为 t t t。