DennyQi's Log

近似算法

对于一个问题,有时候我们很难高效地求出问题的精确解,却能求出在一定偏差范围内的近似解。以图上的最大独立集问题为例,假设当问题的答案为KK时,我们的算法总能找到一个0.5K\geq 0.5K的解,那么就称这个算法为一个最大独立集问题的0.50.5-近似算法。很多NP-hard问题没有多项式算法,但可以有多项式近似算法。

最小点覆盖的2-近似算法

图的一个点覆盖是一个点集,使得每条边至少有一个端点在这个点集里。最小点覆盖问题是NP-hard问题。

我们任意的一条条选边,同时保证这些边构成一个匹配(已经被选的边两两没有公共顶点),直到没有边能被加进来,这时候我们就得到了一个“极大匹配”。注意“极大”不一定是“最大”。假设这个极大匹配的边数为MM

我们发现“极大匹配”中所有的顶点(2M2M个)一定能构成一个点覆盖,因为如果存在一条边没有被覆盖,那么这条边的两个顶点都不在极大匹配中,那么根据匹配的定义,这条边一定可以被加到极大匹配里,这就与“极大”矛盾了。

同时我们发现,最小点覆盖至少要有MM个点。我们要覆盖所有的边,至少要覆盖这MM条边,因此每条边至少有一个端点要被选进最小点覆盖。而极大匹配中的边是两两独立的,选某条边的一个端点只能覆盖这MM条中的一条。因此每条边至少要选一个点,最小点覆盖至少要有MM个点。

因此答案KMK \geq M,我们已经找到了一个2M2M的答案。2MK2\dfrac{2M}{K} \leq 2,因此“找极大匹配”就是一个2-近似算法。

2MK2\dfrac{2M}{K} \leq 2中的等号会不会其实取不到呢?即我们能否通过“更好的分析”来发现这实际上是一个更好的近似(比如1.9)?答案是否定的,我们只需要找到一个Tight Example:构造这样一张图,它是nn条两两独立的边,最小点覆盖应当是nn,我们的算法会给出2n2n,于是我们说明了等号是会被取到的。那么我们只能说这是个2-近似算法。

考虑另外一种贪心的做法,每次选出度数最大的一个点,然后把与它相连的边全删掉。这似乎也是一种不错的近似算法,但事实证明,可以构造出一个反例使得它的近似系数达到无穷大。

Max-3SAT

我们将3SAT问题“每一项都为true(CNF输出true)”的判定问题改为“最多能使多少项为true”的优化问题,就得到了Max-3SAT问题。这也是NP-hard问题。

首先来考虑这样一个平凡的随机算法——以0.5的概率随机给每个变量赋值。我们来计算这样得到的答案的期望。根据期望的线性性,我们只需计算每项为true的概率。由于每项内部的变量是用\vee连接的,因此false的概率只有1/8,所以true的概率是7/8。假设总共有mm项,我们的随机算法给出的答案期望就是78m\dfrac{7}{8}m

设总共有多少项为true的随机变量为YY。那么成立E(Y)=12E(Yx1=1)+12E(Yx1=0)E(Y)=\dfrac{1}{2}E(Y|x_1=1)+\dfrac{1}{2}E(Y|x_1=0)。于是一定有E(Yx1=1)E(Y)E(Y|x_1=1) \geq E(Y)E(Yx1=0)E(Y)E(Y|x_1=0)\geq E(Y)。我们已经知道算期望的算法是平凡的了(只需按照已知条件算出每一项的期望相加),我们令x1=v1x_1=v_1从而使得E(Yx1=v1)E(Y)E(Y|x_1=v_1) \geq E(Y)的那个值。接下来,成立E(Yx1=v1)=12E(Yx1=v1,x2=0)+12E(Yx1=v1,x2=1)E(Y|x_1=v_1)=\dfrac{1}{2}E(Y|x_1=v_1,x_2=0)+\dfrac{1}{2}E(Y|x_1=v_1,x_2=1),依次类推我们令x2=v2x_2=v_2从而有E(Yx1=v1,x2=v2)E(Yx1=v1)E(Y)E(Y|x_1=v_1,x_2=v_2) \geq E(Y|x_1=v_1) \geq E(Y)。不断迭代,最终我们得到E(Yx1=v1,,xn=vn)E(Y)=78mE(Y|x_1=v_1,\cdots,x_n=v_n)\geq E(Y)=\dfrac{7}{8}m,而左侧已经不是一个随机变量了,它是一个确定的赋值。综上,我们已经得到了一个78\dfrac{7}{8}-近似算法。

Max-Cut

把图上的点集分成两组,把所有“一端在一个点集另一端在另一个点集”的边收集在一起就称为一个Cut(割)。

Max-Cut是NP-hard问题。

考虑这样一个基于贪心的近似算法。首先把点集任意分成A,BA,B两组。此时如果能找到一个点,把它放到另一边会产生更大的Cut,那么就把它放另一边。不断重复上述过程,直到不能找到能产生更大Cut的点。

这个过程是多项式复杂度的,由于Max-Cut不超过总边数,每次更新Max-Cut至少加一,因此不可能更新超过总边数次;每次更新最多找总点数次,判断每个点不超过总边数次复杂度。总复杂度不超过O(VE2)O(|V||E|^2)

对于终态我们观察到,对于AA中的每个点,假设它有aa条边连向点集AA,有bb条边连向点集BB。那么一定有aba \leq b。如果a>ba>b,那么把它放到BB中一定能产生更大的Max-Cut。BB中的点同理。我们可以这样统计Max-Cut——考虑每个点对Max-Cut的贡献,那么每条边会恰好被算两次。根据我们得到的不等关系,我们的算法得到的答案至少12uV12deg(u)\geq \dfrac{1}{2}\sum\limits_{u \in V}\dfrac{1}{2}\deg(u)。而根据握手定理,uVdeg(u)=2E\sum\limits_{u \in V}\deg(u)=2|E|,因此我们得到了一个大小至少为E2\dfrac{|E|}{2}的Cut。

而显然Max-CutE\leq |E|。因此这至少是一个0.5-近似算法。我们可以给出一个Tight Example证明这就是一个0.5-近似算法。

这并不是最优的多项式近似算法,对于Max-Cut问题,最优的多项式近似算法可以做到0.878。

kk-centers

定义一个点uu到无向图上一个点集SS的距离d(u,S)=minvS{d(u,v)}d(u,S)=\min\limits_{v \in S}\{d(u,v)\},这个vv就是uu对应的center。问怎么选这个SS才能让maxuV{d(u,S)}\max\limits_{u \in V}\{d(u,S)\}最小。显然SS中点越多答案就可以做到越小,k-centers规定SS中只能有kk个点,要求最小化答案。

考虑这样一个贪心的算法:首先任选一个点加入SS。然后找到使得d(u,S)d(u,S)最大的那个点uu加进SS里。直到选完kk个。

我们来证明这是一个近似算法。我们找到的这个点集记为AA,标准答案的点集记为OO。并且设我们的答案是ALGALG,标准答案是OPTOPT。设OO中的第ii个点为oio_i,所有以oio_i作为center的点组成点集XiX_iX1X_1XkX_k就构成了对VV的一个划分。

如果AA与每个XiX_i都有交集,那么根据鸽巢原理每个XiX_i里面恰好有一个AA中的点,记为aia_iXiX_i里的每个点vv一定满足d(oi,v)OPTd(o_i,v) \leq OPT,因此也有d(oi,ai)OPTd(o_i,a_i) \leq OPT。相加得到d(ai,v)d(ai,oi)+d(oi,v)2OPTd(a_i,v)\leq d(a_i,o_i)+d(o_i,v) \leq 2OPT。也就是说,vXi,d(ai,v)2OPT\forall v\in X_i,d(a_i,v)\leq 2OPT。因此vXi,d(v,A)d(v,ai)2OPT\forall v\in X_i,d(v,A)\leq d(v,a_i)\leq 2OPT。所以令ii取遍11kk,得到uV,d(u,A)2OPT\forall u\in V,d(u,A)\leq 2OPT,也即maxuVd(u,A)=ALG2OPT\max\limits_{u\in V}d(u,A)=ALG\leq 2OPT

如果存在一个XiX_iAA没有交集,那么根据鸽巢原理会有一个XjX_j里有ap,aqa_p,a_q。根据我们的贪心算法,假设aqa_q是后被选进来的那个点,这意味着d(ap,aq)ALGd(a_p,a_q) \geq ALG。而d(ap,aq)d(ap,oj)+d(aq,oj)2OPTd(a_p,a_q) \leq d(a_p,o_j)+d(a_q,o_j) \leq 2OPT,因此也有ALG2OPTALG \leq 2OPT

综上,ALGOPT2\dfrac{ALG}{OPT} \leq 2,这是一个2-近似算法。一个Tight Example就是一条三个点的链,如果第一步选了边上的点那么就得到答案是2,正确答案是1。

不可近似性

我们如何证明不存在一个更优的多项式时间复杂度的近似算法呢?我们用反证法,假设这样的算法存在,然后证明它可以用来解决NP-hard问题。这就会导致P=NP,就是我们认定的“矛盾”。

Dominating Set

如果能选出图上的一个点集SS,使得所有不在SS中的点都至少有一个相邻点在SS中,就称SS为一个Dominating Set。

我们证明点覆盖判定问题可以归约为Dominating Set判定问题。对于GG,我们可以这样构造一个GG':将GG中的每条边拆成两条边,中间加上一个新的点;然后让所有旧点之间两两连边。假设GG有一个kk个点的点覆盖,那么在GG'中选同样的点一定能构成一个Dominating Set。如果GG’里有一个kk个点的Dominating Set,假设它包含了新点,由于新点只连接两个旧点且不连别的新点,所以每个被选的新点如果被换成相邻的旧点依然能构成一个Dominating Set。所以我们在GG'中一定有一个至多kk个点(向下兼容)的Dominating Set,相应的这一定构成GG中的一个点覆盖。

因此Dominating Set问题是NP-hard问题。

k-centers的(2ε)(2-\varepsilon)-不可近似性

如果GG有一个kk个点的Dominating Set,那么k-centers的答案就是1。(不考虑0)。如果没有,那么答案至少为2。

我们知道k-centers的2-近似算法复杂度是多项式的。如果我们能有一个多项式复杂度的(2ε)(2-\varepsilon)-近似算法,如果ALG=1ALG=1,那么OPT=1OPT=1,我们能判定GG有一个kk个点的Dominating Set;如果ALG2ALG \geq 2,那么OPTALG2ε>ALG21OPT \geq \dfrac{ALG}{2-\varepsilon} > \dfrac{ALG}{2} \geq 1,那么OPT2OPT \geq 2,说明GG不存在kk个点的Dominating Set。于是,我们竟然可以在多项式时间复杂度内判定Dominating Set了!这将会导致P=NP,我们相信这是不可能的。