- 近似算法作业
- 题目 1 k-center 近似算法
- 题目描述
- 参考答案
- 解答
- 题目 2 均衡负载算法
- 题目描述
- 参考答案
- 解答
- 题目 3 多项式归约
- 题目描述
- 参考答案
- 解答
近似算法–徐小华
近似算法作业
题目 1 k-center 近似算法
题目描述
问题 1:假设给定 n n n 个指定的城市在一个平面图上,想要在不同的城市选择 k k k 个城市建立 k k k 个仓库,目标是最小化每个城市到最近仓库的最大距离。这意味着找到一组 k k k 个顶点的集合,任意点到其集合中顶点的最大距离最小。给定一个算法来确定这 k k k 个顶点的位置,该算法最多是最优解的 3 3 3 倍,并且运行时间是 O ( n ) O(n) O(n)。
参考答案
解答
【贪心算法】反复选择 离任何现有中心最远的 site 作为下一个中心,其中,Center 必须在 site 中选择。
当 k = 1 k=1 k=1 时,即 第一个中心 Center,随机 从所有 site 中选择。
【时间复杂度】这个算法的运行时间是 O ( n k ) O(nk) O(nk),
- 因为每次选择新的中心需要遍历所有的点,计算它们到已有中心的距离,然后找出最大的一个。
- 这个过程需要重复 k k k 次,所以总的时间复杂度是 O ( n k ) O(nk) O(nk)。
如果 k k k 是一个常数,那么这个算法的运行时间就是 O ( n ) O(n) O(n)。
【3-近似 证明】
假设 r ( C ∗ ) < 1 2 r ( C ) r(C^*) < \frac{1}{2}r(C) r(C∗)<21r(C),
对于 C C C 中的每个site c i c_i ci,考虑其周围半径为 1 2 r ( C ) \frac{1}{2}r(C) 21r(C) 的球,
(1) 如果一个球里面没有 C ∗ C^* C∗ 中的中心 c ∗ c^* c∗,那么 c i c_i ci 就不在 C ∗ C^* C∗ 中任何中心的 1 2 r ( C ) \frac{1}{2}r(C) 21r(C) 内,这与 r ( C ∗ ) < 1 2 r ( C ) r(C^*)<\frac{1}{2}r(C) r(C∗)<21r(C) 的假设相矛盾,因此每个球 至少有一个 c ∗ c^* c∗;
(2) 这些球是不相交的,每个球至少包含一个 c ∗ c^* c∗,并且 ∣ c ∣ = ∣ c ∗ ∣ |c|=|c^*| ∣c∣=∣c∗∣,所以每个球 至多有一个 c ∗ c^* c∗ ;
由 (1)、(2) 可知,每个球正好有一个 c i ∗ c_i^* ci∗;
设 c i c_i ci 为与 c i ∗ c^*_i ci∗ 配对的 site,考虑 C ∗ C^* C∗ 中的任何 site s s s 及其最近的中心 c i ∗ c_i^* ci∗,
s s s 到 c i c_i ci 的距离可以用 三角不等式 分解为 s s s 到 c i ∗ c_i^* ci∗ 的距离加上 c i ∗ c_i^* ci∗ 到 c i c_i ci 的距离,而这两个距离都不会超过 r ( C ∗ ) r(C^*) r(C∗),因为 c i ∗ c_i^* ci∗ 是 s s s 和 c i c_i ci 最近的中心,因此
d i s t ( s , C ) ≤ d i s t ( s , c i ) ≤ d i s t ( s , c i ∗ ) + d i s t ( c i ∗ , c i ) ≤ 2 r ( C ∗ ) dist(s, C) ≤ dist(s, c_i) ≤ dist(s, c_i^*) + dist(c_i^*, c_i) ≤ 2r(C^*) dist(s,C)≤dist(s,ci)≤dist(s,ci∗)+dist(ci∗,ci)≤2r(C∗);
即 r ( C ) ≤ 2 r ( C ∗ ) r(C) ≤ 2r(C^*) r(C)≤2r(C∗),这与假设矛盾,因此 r ( C ∗ ) ≥ 1 2 r ( C ) r(C^*) ≥ \frac{1}{2}r(C) r(C∗)≥21r(C),即 r ( C ) ≤ 2 r ( C ∗ ) r(C) ≤ 2r(C^*) r(C)≤2r(C∗),那么 r ( C ) ≤ 3 r ( C ∗ ) r(C) ≤ 3r(C^*) r(C)≤3r(C∗)。
所以贪心算法是 Center selection problem 的 2-近似 算法,也是 3-近似 算法。
题目 2 均衡负载算法
题目描述
问题 2:假设有一个由 m m m 个慢速机器和 k k k 个快速机器。快速机器在单位时间内执行的工作量是慢速机器的两倍。现在你有一组 n n n 个作业,每个作业 i i i 需要时间 t i t_i ti 在慢速机器上处理,在快速机器上处理时间只需要 t i / 2 t_i/2 ti/2。你想将每个作业分配给一台机器,目标是最小化完成时间。给出一种 O ( n ) O(n) O(n) 时间的 3 3 3 倍近似算法。
参考答案
解答
【算法】
当每个作业到达时,将其放在当前最快结束的机器(需要考虑机器的速度)上。这是一个3-近似 算法。
【近似因子证明】
为了证明该算法的近似度,首先证明最优 makespan T ∗ T^* T∗ 的一些下界。
- T ∗ ≥ 1 2 t i . \displaystyle T^*\geq \frac{1}{2} t_i. T∗≥21ti.
证明:必定存在一台机器处理最耗时的作业。
- T ∗ ≥ ∑ i t i m + 2 k . \displaystyle T^*\geq\frac{\sum_it_i}{m+2k}. T∗≥m+2k∑iti.
证明:所有作业的总时间为
∑
i
t
i
\sum_i t_i
∑iti。设
t
=
∑
i
t
i
m
+
2
k
t=\frac{\sum_i t_i}{m+2k}
t=m+2k∑iti
假设作业可以分配给所有机器,使得每台慢速机器都有一组求和小于
t
t
t 的作业,而每台快速机器都有一群求和小于
2
t
2t
2t 的作业,那么就会得到
∑
i
t
i
<
m
t
+
2
k
t
=
∑
i
t
i
\sum_it_i<mt+2kt=\sum_it_i
i∑ti<mt+2kt=i∑ti
矛盾。因此,一些机器至少运行
t
t
t 时间的作业,因此
T
∗
≥
∑
i
t
i
m
+
2
k
T^*\geq\frac{\sum_it_i}{m+2k}
T∗≥m+2k∑iti
考虑瓶颈机器
j
j
j 的负载
T
[
j
]
T[j]
T[j],令
k
k
k 是机器
j
j
j 上的最后一个作业,安排作业
k
k
k 时,机器
j
j
j 的负载是最小的,如果该机器为快机器,则安排作业
k
k
k 前的负载为
T
[
j
]
−
t
k
2
≤
∑
i
t
i
m
+
2
k
≤
T
∗
T[j]-\frac{t_k}{2} \leq \frac{\sum_i t_i}{m+2k}\leq T^*
T[j]−2tk≤m+2k∑iti≤T∗
那么,
T
=
T
[
j
]
=
(
T
[
j
]
−
t
k
2
)
+
t
k
2
≤
T
∗
+
T
∗
=
2
T
∗
.
\begin{aligned} T=T[j]&=(T[j]-\frac{t_k}{2})+\frac{t_k}{2}\\ &\leq T^*+T^*\\ &=2T^*. \end{aligned}
T=T[j]=(T[j]−2tk)+2tk≤T∗+T∗=2T∗.
如果该机器为慢机器,则安排作业
k
k
k 前的负载为
T
[
j
]
−
t
k
≤
∑
i
t
i
m
+
2
k
≤
T
∗
T[j]-t_k \leq \frac{\sum_i t_i}{m+2k}\leq T^*
T[j]−tk≤m+2k∑iti≤T∗
那么,
T
=
T
[
j
]
=
(
T
[
j
]
−
t
k
)
+
t
k
≤
T
∗
+
2
T
∗
=
3
T
∗
.
\begin{align*} T=T[j]&=(T[j]-t_k)+t_k\\ &\leq T^*+2T^*\\ &=3T^*. \end{align*}
T=T[j]=(T[j]−tk)+tk≤T∗+2T∗=3T∗.
【时间复杂度说明】
算法的时间复杂度是 O ( n l o g n ) O(nlogn) O(nlogn),这是因为每次作业到达时,需要找到当前最快结束的机器,这需 O ( l o g n ) O(logn) O(logn) 的时间(如果使用优先队列或堆来存储机器)。因此,对于 n n n 个作业,总的时间复杂度是 O ( n l o g n ) O(nlogn) O(nlogn)。
题目 3 多项式归约
题目描述
问题 3:证明以下命题。
命题 1: T S P TSP TSP 问题是 N P − h a r d NP-hard NP−hard 问题
命题 2:最大加权独立集问题是 N P − h a r d NP-hard NP−hard 问题
参考答案
解答
命题 1 证明:
- TSP 问题是指给定一系列城市和每对城市之间的距离,求解经过每一座城市一次并回到起始城市的最短回路。
- 哈密顿回路问题是指给定一个无向图,判断是否存在一条经过每个顶点一次并回到起点的回路。
要证明 TSP 问题是 NP−hard 问题,利用归约,将哈密顿回路问题转化为 TSP 问题,从而说明 TSP 问题的难度不低于哈密顿回路问题。
具体步骤如下:
-
首先,给定一个哈密顿回路问题的实例,即一个无向图 G = ( V , E ) G=(V,E) G=(V,E),其中 V V V 是顶点集, E E E 是边集。
-
然后,构造一个 TSP 问题的实例,即一个城市集合 C = V C=V C=V ,和一个距离矩阵 D D D,其中 D i j D_{ij} Dij 表示城市 i i i 和城市 j j j 之间的距离,定义如下:
- 如果 ( i , j ) ∈ E (i,j)∈E (i,j)∈E,则 D i j = 1 D_{ij}=1 Dij=1;
- 如果 ( i , j ) ∉ E (i,j) \notin E (i,j)∈/E,则 D i j = n + 1 D_{ij}=n+1 Dij=n+1,其中 n = ∣ V ∣ n=∣V∣ n=∣V∣ 是顶点的个数。
-
最后,证明这个转化是有效的,即如果 G G G 有一个哈密顿回路,那么 C C C 有一个长度为 n n n 的最短回路;反之,如果 C C C 有一个长度为 n n n 的最短回路,那么 G G G 有一个哈密顿回路。
-
充分性证明:如果 G G G 有一个哈密顿回路,那么可以沿着这个回路访问每个城市一次,并返回出发城市,这样的回路的长度为 n n n,因为每条边的距离都是 1;
-
必要性证明:如果 C C C 有一个长度为 n n n 的最短回路,那么可以根据这个回路构造一个哈密顿回路,这样的回路一定存在,因为如果有任何一条边的距离大于 1,那么回路的长度就会超过 n n n。
可证,由于哈密顿回路是 N P − h a r d NP-hard NP−hard 问题,所以 T S P TSP TSP 问题是 N P − h a r d NP-hard NP−hard 问题。
命题 2 证明:
为了证明最大加权独立集是 NP-hard,我们将其约化为最大独立集(已知是 NP-hard 的问题)。
假设我们有一个图
G
=
(
V
,
E
)
G = (V, E)
G=(V,E) 和一个整数
k
k
k,定义权重函数
w
:
V
→
R
w: V \rightarrow \mathbb{R}
w:V→R 如下:
∀
v
∈
V
:
w
(
v
)
=
1
,
\forall v \in V:w(v)=1,
∀v∈V:w(v)=1,
约化的结果是
⟨
G
′
=
(
V
,
E
,
w
)
,
k
⟩
.
\langle G'=(V,E,w),k\rangle.
⟨G′=(V,E,w),k⟩.
如果图
G
G
G有一个大小至少为
k
k
k 的独立集
S
S
S,那么
S
S
S是图
G
′
G'
G′上的独立集,并且
∑
v
∈
S
w
(
v
)
=
∑
v
∈
S
1
=
∣
S
∣
≥
k
.
\sum_{v \in S} w(v) = \sum_{v \in S}1 = |S| \geq k.
v∈S∑w(v)=v∈S∑1=∣S∣≥k.
因此,
G
′
G'
G′ 有一个顶点权重之和至少为
k
k
k 的独立集。
相反地,如果图
G
′
G'
G′ 有一个独立集
S
′
S'
S′,满足
∑
v
∈
S
′
w
(
v
)
≥
k
,
\sum_{v \in S'}w(v) \geq k,
v∈S′∑w(v)≥k,
那么,可以看出
S
′
S'
S′ 也是图
G
G
G 上的独立集,并且
∣
S
′
∣
=
∑
v
∈
S
′
1
=
∑
v
∈
S
′
w
(
v
)
≥
k
.
|S'|=\sum_{v \in S'}1 = \sum_{v \in S'}w(v)\geq k.
∣S′∣=v∈S′∑1=v∈S′∑w(v)≥k.
因此,图
G
G
G 有一个大小至少为
k
k
k 的独立集。
这样,我们证明了如果我们能解决最大加权独立集问题,就能解决最大独立集问题;反之亦然。因此,最大加权独立集问题是 NP-hard 的。