【例 1】(活动选择问题)有 n 项活动 a1,a2,⋯,an 对应开始结束时间 [s1,t1),⋯,[sn,tn),从所有活动中选出最多数量的活动满足不相互重叠活动时间的要求。
【解】优先选择结束时间最早的活动。贪心算法的正确性证明:如果一个最优解不符合要求,那么一定可以通过交换使其符合要求。
【例 2】(最大独立集问题)对 n 个点 m 条边的图 G=(V,E),求一个点集的子集 V′⊆V,使得 V′ 中任意两点没有边相连,最大化 ∣V′∣。
【解】这个问题是一个 NP-hard 问题,因此我们采用贪心算法求近似解。
(贪心算法)优先选择度数小的点,删除该点、以及相邻点的子图后继续选择。
【定理 1】令 δ=m/n 表示图 G 的密度,那么使用上面贪心算法获得的点的数量满足
mGr(G)≥2δ+1n 【证明】假设第 i 步选择了点 vi,其当前度数为 d(vi),那么我们这一步将会删除 d(vi)+1 个点和至少 d(vi)(d(vi)+1)/2 条边(刚好的情况下,这些点构成了一个团),于是
i=1∑mGr(G)(d(vi)+1)=ni=1∑mGr(G)2d(vi)(d(vi)+1)≤m=nδ 令下式 * 2 加到上式中,有
i=1∑mGr(G)(d(vi)+1)2≤n(2δ+1) 根据 Cauchy-Schwarz 不等式,有
mGr(G)i=1∑mGr(G)(d(vi)+1)2=i=1∑mGr(G)(d(vi)+1)2⋅i=1∑mGr(G)12≥(i=1∑mGr(G)(d(vi)+1)⋅1)2=n2 从而
mGr(G)n2≤n(2δ+1) 于是,
mGr(G)≥2δ+1n 【定理 2】若 m∗(G) 为图 G 的最大独立集数(最优解),那么
mGr(G)m∗(G)≤δ+1 【证明】假设 V∗ 是一个最优解。考虑每次删点时,假设删除的 d(vi)+1 个点中有 ki 个 V∗ 中的点,那么:
i=1∑mGr(G)(d(vi)+1)=ni=1∑mGr(G)ki=m∗(G) 在删边时,在贪心算法时我们提到过最少情况下,这些点构成了一个团,至少删去 d(vi)(d(vi)+1)/2 条边。但是在这里,有 ki 个 V∗ 中的点,他们之间不可能有边相连,因此应该去掉他们之间连的边,即 ki(ki−1)/2 条边;但同时需要满足他们的度数依然不比 d(vi) 小,于是这 ki 个点每个点需要从外面补上 ki−1 条边,即需要多删除 ki(ki−1) 条边,因此总共来说,至少删去了
2d(vi)(d(vi)+1)−2ki(ki−1)+ki(ki−1)=2d(vi)(d(vi)+1)+2ki(ki−1) 条边,于是类似地有
i=1∑mGr(G)2d(vi)(d(vi)+1)+2ki(ki−1)≤m=nδ 用和定理 1 类似的方法,我们可以得到:
i=1∑mGr(G)(d(vi)+1)2+ki2≤n(2δ+1)+m∗(G) 同样的,利用柯西不等式有
i=1∑mGr(G)(d(vi)+1)2≥mGr(G)n2,i=1∑mGr(G)ki2≥mGr(G)m∗(G)2 于是,
mGr(G)n2+m∗(G)2≤n(2δ+1)+m∗(G) 故,
mGr(G)≥n(2δ+1)+m∗(G)n2+m∗(G)2=(2δ+1)+m∗(G)/nn+m∗(G)2/n=(2δ+1)/m∗(G)+1/nn/m∗(G)+m∗(G)/n≥(2δ+1)/m∗(G)+1/n2 于是,
mGr(G)m∗(G)≤2(2δ+1)+m∗(G)/n≤2(2δ+1)+1=δ+1
【例 3】(最小生成树问题)
验证方法:cut-and-paste,对于任意 cut (V′,V\V′),原图中 cut 的边的最小值应该等于最小生成树中对应 cut 的边权。
Kruskal 算法:初始 E′=∅,每次选择两个未连通的分量之间连通所需的最小边权对应的边 e 加入 E′ 中,重复至 ∣E′∣=∣V∣−1,即得最小生成树 (V,E′);
Krim 算法:初始点集合 V′={vi},E=∅(从任意一个点出发),每次找到连接 V′ 和 V\V′ 所需要的最小边权对应的边 e 加入 E′ 中,并将 e 的属于 V\V′ 的顶点加入 V′ 中,重复至 V′=V 即得最小生成树 (V,E′)。
【例 4】(背包问题贪心算法)有 n 个物品,背包容量 W,每个物品重量 w1,w2,⋯,wn,价值 p1,p2,⋯,pn,在重量不超过 W 的情况下最大化价值和。
【解】在原有启发式算法优先选择 pi/wi 更大物品的基础上,最后返回
mH(X)=max(mGr(X),pmax) 【定理 3】背包问题贪心算法得到的 mH(X) 满足:
mH(X)m∗(X)<2 【证明】假设物品已经按照 pi/wi 从大到小排序,并重编号为 1,2,⋯,n,假设:
wi+k=1∑i−1wk>W,k=1∑i−1wk≤W 那么,当前剩余空间为 W−∑k=1i−1wk<wi,于是有:
m∗(X)<k=1∑i−1pk+(W−k=1∑i−1wk)wipi<k=1∑i−1pk+pi≤mGr(X)+pmax≤2mH(X) 于是,
mH(X)m∗(X)<2
【定理 4】(The Stein-Lovasz Theorem,SL 定理)设 A 是一个 N×M 的 0-1 矩阵,每行至少 v 个 1,每列最多 a 个 1,则存在一个 N×K 的子矩阵不包含全 0 行,且
K≤aN+vMlna≤vM(1+lna) 可以理解为,挑选 K 列完成对 N 行的覆盖。
【证明】贪心。假设初始 N×M 矩阵为 Aa,其中每行至少 v 个 1,每列最多 a 个 1。记 Ka 表示这个矩阵中每列恰有 a 个 1、且有 1 的位置互不相交的列的个数。找到这 Ka 个列并删除之,同时删除其中含有的 1 对应的所有行,得到新矩阵 Aa−1,其中每行至少 v 个 1,每列最多 a−1 个 1,并且我们可以计算出此时 Aa−1 的大小应该为 (N−aKa)×(M−Ka)。如此递归进行,直到全被覆盖,我们可以得到 Ai 的大小应该为:
(N−t=i+1∑atKt)×(M−t=i+1∑aKt) 那么考虑令 ki=N−∑t=iatKt,即为 Ai−1 的行数,那么我们知道
ki+1−ki=iKi,ka+1=N,k1=0 于是,
K=i=1∑aKi=1k2−k1+2k3−k2+⋯+aka+1−ka=aN+i=2∑a(i−11−i1)ki=aN+i=2∑a(i−1)iki 我们考虑对 Ai 进行双计数,根据上述定义,其大小为 ki+1×(M−∑t=i+1aKt),且其中每行至少 v 个 1,每列最多 i 个 1,于是对 1 的个数进行双计数,有
ki+1v≤i(M−t=i+1∑aKt)<Mi⟹iki+1<vM 于是有
K=aN+i=2∑a(i−1)iki<aN+vMi=2∑ai1<aN+vMlna 又,对 A 双计数有 Nv≤Ma,即 N/a≤M/v,于是
K<aN+vMlna<vM(1+lna) 注:SL 定理有许多应用,比如【例 5】、【例 6】。
【例 5】(完美哈希族)一个 (n,m,w) 完美哈希族是一组函数 F,其中 Y={1,2,⋯,n}, ∣Y∣=n,∣X∣=m,对于所有的 f∈F 有 f:Y→X,对任意的 C⊆{1,2,⋯,n} 且 ∣C∣=w,存在一个函数 f∈F 使得 f∣C(f 在定义与 C 上)是单射。当 ∣F∣=N 时,一个 (n,m,w) 完美哈希族可以表示为 PHF(N;n,m,w).
【定理 5】存在一个 PHF(N;n,m,w) 满足
N≤w!(wm)mw(1+ln(wn)) 【证明】(SL 定理)我们将 SL 定理中的 N,M,a,v 在本题中进行一个映射。
- N:=(wn) 表示有多少个 w 元子集合;
- M:=mn 表示有多少种映射关系;
- 那么,我们需要对每一行(每个 w 元子集合),选择尽量少的函数完成单射;矩阵第 i 行第 j 列若为 1,则表示第 i 个 w 元子集合能否在第 j 种映射关系下形成单射。
- v:每一行的 1 至少有多少个,相当于每个 w 元子集合(至少)有多少个不同的单射?
- 从 m 个元素的集合 X 中选出 w 个用来完成单射,即 (wm);
- 这 w 个元素可以全排列,即 w!;
- 剩下的 n−w 个元素可以任意映射,即 mn−w;
- 综上所述,即为 (wm)w!mn−w。
- a:每一列的 1 最多有多少个,相当于每个映射关系(最多)能将多少个子集映射成单射?
- 最多的子集数量为 N,即 (wn);
于是,至少存在一个 N×K 的子矩阵不包含全 0 的行,即每个 w 元子集合都能被覆盖,根据 SL 定理,有
K≤vM(1+lna)=(wm)w!mn−wmn(1+ln(wn))=w!(wm)mw(1+ln(wn)) 即
N≤w!(wm)mw(1+ln(wn)) 【定理 5(改)】存在一个 PHF(N;n,m,w) 满足
N≤1+ln(1−mw(wm)w!)−ln(wn) 【证明】(概率方法)共有 mn 个函数,随机选择 N 个函数,对一个固定的 w-元子集合,则其中一个随机的函数使得子集合为单射的概率为
P=mn(wm)w!mn−w=(wm)w!m−w 那么,这 N 个函数都无法完成单射的概率为 (1−P)N。总共有 (wn) 个 w 元子集合,那么没有完成单射的子集合数期望为 (wn)(1−P)N。根据平均值原理,必然有一个方案,没有完成单射的子集合数至多为 (wn)(1−P)N,于是我们只要保证 (wn)(1−P)N<1,那么由于“没有完成单射的子集合数”是非负整数,其只能等于 0,也就是说对所有子集合都能完成单射。于是条件为:
N>ln(1−mw(wm)w!)−ln(wn) 只要满足这个条件,就必然存在对应的 PHF(N;n,m,w)。那么定理显然得证。
【例 6】(分割系统)设 n,t 为偶数且 0<t<n,一个 (n,t) 分割系统是 (X,{Bi}),满足:
- ∣X∣=n,且 Bi 为 X的 n/2 元子集合 Bi⊆X,∣Bi∣=n/2,我们把 B 称为“块”;
- 对每个 X 的 t 元子集合 Y⊆X,∣Y∣=t,都存在一个块 B 满足 ∣B∩Y∣=t/2。
问题是选择最少的 ∣{Bi}∣ 满足条件。
【解 1】(SL 定理)我们将 SL 定理中的 N,M,a,v 在本题中进行一个映射。
- N:=(tn) 表示有多少个 t 元子集合 Y。
- M:=(n/2n) 表示有多少个可能的块 B。
- 矩阵 A 的第 i 行第 j 列表示第 j 个块能不能满第 i 个子集合的要求,那么我们需要选择一个 N×K 的子矩阵(选择 K 个块)。满足每一行(每一个 t 元子集合),都有一个 1(都有一个块满足要求)。
- v:每一行的 1 至少有多少个,即每个 t 元集合 Y (至少)能有多少个块 B 满足要求。
- 从每个 t 元集合中选出 t/2 个元素作为公共元素,即 (t/2t);
- 从剩下 n−t 个元素中选出 n/2−t/2 个元素作为 B 的剩余元素,即 ((n−t)/2n−t);
- 那么 v:=(t/2t)((n−t)/2n−t)。
- a:每一列的 1 最多有多少个,即每个块 B (最多)能有多少个 Y 满足要求。
- 类似地,从每个块中选出 t/2 个元素作为公共元素,即 (t/2n/2);
- 从剩下 n−n/2=n/2 个元素中选出 t/2 个元素作为 Y 的剩余元素,即 (t/2n/2);
- 那么 a:=(t/2n/2)(t/2n/2)。
于是,根据 SL 定理,有
K≤vM(1+lna)=(t/2t)((n−t)/2n−t)(n/2n)(1+2ln(t/2n/2)) 【解 2】(概率方法)共有 (n/2n) 个函数,随机选择 K 个函数,对于一个固定的 t 元子集合 Y,被一个随机的 n/2 元子集合分割的概率为:
P=(n/2n)(t/2t)((n−t)/2n−t) 那么,这 K 个函数都无法分割的概率为 (1−P)K。总共有 (tn) 个集合,因此没有被分割的 t 元集合的期望个数为 (tn)(1−P)K,与【定理 5(改)】证明类似地,我们只需要满足
(tn)(1−P)K<1⟹K≥ln(1−P)−ln(tn)=ln(1−(n/2n)(t/2t)((n−t)/2n−t))−ln(tn)
【定理 6】(Mantel 定理)在一个不含 3-圈 (triangle-free) 的 2n 个点的图中,最多有 n2 条边。
💡
Mantel 定理的等价表述:- 在 2n 个顶点和 n2+1 条边的图中,必然含有 3-圈
- 在一个不含 3-圈 (triangle-free) 的 n 个点的图中,最多有 n2/4 条边。
- 在一个不含 3-团 (3-clique) 的 n 个点的图中,最多有 n2/4 条边。
【证明 1】(数学归纳法)设 n−1 情况成立,下证明 n 情况也成立。即我们知道 2(n−1) 个点,包含 (n−1)2+1 条边的图中必然含有 3-圈。考虑 2n 个和 n2+1 条边时,取出两个点 (u,v)∈E,剩下的图为 H。若存在 w∈H 使得 (u,v,w) 为 3-圈,那么显然成立;若不存在,则 H 的每一个点最多只能与 u,v 其一连边,因此 (u,v) 与 H 间最多有 2(n−1) 条边,于是 H 至少有 n2+1−2(n−1)−1=n2−2n+2=(n−1)2+1 条边,则根据归纳假设,一定存在 3-圈。综上,根据归纳法,原命题成立。
【证明 2】任取一条边 (u,v)∈E,一定不会出现 w∈G 且 w 为 u,v 的公共邻居,那么剩下每个点最多只能与 u,v 其一连边,于是 d(u)+d(v)≤2n。
根据 Lecture 2 【例 3】,我们有
v∈V∑d2(v)=(u,v)=e∈E∑d(u)+d(v)≤2n∣E∣ 又根据 Cauchy-Schwarz 不等式有,
v∈V∑d2(v)≥2n1(v∈V∑d(v))2=2n(2∣E∣)2=n2∣E∣2 于是,
n2∣E∣2≤2n∣E∣⟹∣E∣≤n2 【证明 3】(最大独立集)设 A 为最大独立集,令 B=V\A。则对任意 x 的邻居点集为独立集(因为不存在 3-圈),独立集大小为 d(x),于是有 d(x)≤∣A∣,∀x,故
∣E∣≤x∈B∑d(x)≤∣A∣∣B∣≤(2∣A∣+∣B∣)2=n2
【定理 7】(Turan 定理)对于一个含有 n 个点的图 G=(V,E),若图中不存在 (k+1)-团 (k≥2),那么有:
∣E∣≤(1−k1)2n2 【证明 1】(数学归纳法)假设结论对 ≤n−1 均成立,下面证明 n 也成立。假设图的边数达到最多,那么图中已经存在 k-团(若不存在可以加边使其存在,但不满足变数最多的假设)。记这个 k-团为 A,剩下部分 B=V\A,那么:
- A 中的边数为 (2k);
- B 中的边数根据归纳假设不超过
(1−k1)2(n−k)2
- 连接 A,B 的边数:由于 B 中每个点最多只能连 (k−1) 个 A 中的点(否则就出现了 (k+1)-团),所以不超过 (n−k)(k−1)。
综上,
∣E∣≤(2k)+(1−k1)2(n−k)2+(n−k)(k−1)=2k(k−1)+(1−k1)2(n+k)(n−k)=21(k2−k+kk−1(n2−k2))=21kk−1n2=(1−k1)2n2 【证明 2】(等价关系思想)假设图中边数已经最多,且不存在 (k+1)-团,【证明 1】中说明了一定存在 k-团,那么我们首先证明 (u,v)∈/E 这个关系是等价关系,即:
- 自反性,由于图中没有自环,因此显然 (u,u)∈/E;
- 对称性,由于是无向图,因此 (u,v)∈/E 自然有 (v,u)∈/E;
- 传递性,对于 (u,v)∈/E,(v,w)∈/E,一定有 (u,w)∈/E;
【证明】反证,假设 (u,v)∈/E,(v,w)∈/E 但 (u,w)∈E;
- 若 d(u)>d(v),则删除 v,新增一个 u 的拷贝 u′(连边方式和 u 完全相同),但 u 和 u′ 不连边,则新图的边数为 ∣E∣−d(v)+d(u′)=∣E∣+(d(u)−d(v))>∣E∣,与图中边数最多矛盾。
- 若 d(w)>d(v),则类似可导出矛盾。
- 若 d(u)≤d(v),d(w)≤d(v),那么删除 u,w,添加 v 的两个拷贝 v′,v′′,但 v,v′,v′′ 三点之间不连边,则新图的边数为
∣E∣−(d(u)+d(w)−1)+2d(v)=∣E∣+1+(2d(v)−2d(u)−d(w))>∣E∣ 同样导出矛盾。
综上,传递性成立。
因此 (u,v)∈/E 这个关系是等价关系,且图中存在 k-团,不存在 (k+1)-团,故需要 k 个等价类。下面说明等价类是平均的,即每个等价类的个数之间至多差 1:若两个等价类 A,B 出现 ∣A∣≥∣B∣+2,那么从 ∣A∣ 移动 1 个点到 ∣B∣ 中,边数变化 ∣A∣−1−∣B∣≥1,增加边数,与图中边数已经最多矛盾。因此,边数为:
∣E∣=k classesk⋅#node/classkn⋅link to other nodes except the same class(n−kn)⋅duplicate21=(1−k1)2n2 【证明 3】(团数定理)Lecture 3 中【定理 4】阐述了最大团 ω(G) 和图 G 的关系:
ω(G)≥v∈V∑n−d(v)1 那么,
k(n2−2∣E∣)≥ω(G)(n2−2∣E∣)≥(v∈V∑n−d(v)1)(u∈V∑(n−d(u)))≥n2 这是因为:
- ω(G)≤k
- ∑u∈V(n−d(u))=n2−2∣E∣
- 当 u=v 时 n−d(v)n−d(u)=1;当 u=v 时考虑 (u,v),(v,u),于是 n−d(v)n−d(u)+n−d(u)n−d(v)≥2;因此对于所有 (u∈V,v∈V),求和大于等于 n2。
化简得:
∣E∣≤(1−k1)2n2 【证明 4】(Turan 图结构)假设图中边数已经最多,且不存在 (k+1)-团,【证明 1】中说明了一定存在 k-团。令 vm∈V 为 G 中度数最大的点,令 S 为 vm 点邻居集合,于是 ∣S∣=d(vm),设剩下的点集合为 T=V\S。那么我们把 T 内部的边全部删除,然后把 T 中的所有点与 S 中的所有点都连起来。
下面我们说明:
- 这样操作后仍然不会有 (k+1)-团。首先 S 中一定不存在 k-团(若存在,加上 vm 就是 (k+1)-团)。其次,操作后 T 中所有点都是 vm 的拷贝,因此原来不存在 (k+1)-团,现在也不存在 (k+1)-团。
- 这样操作后边数不会减少。在新图中 S 中每一个点连的边不会减少,因此度数没有减少;同时 T 中每一个点的度数直接设为了最大度数 d(vm),因此度数也不会减少;根据握手定理,图的总度数没有减少,那么边数一定不会减少。
操作之后得到一个新的独立集 T,我们接下来对 S 这个子图继续做同样的事情即可,直到图 G 变成一个 Turan 图结构,即包含若干独立集的“完全图”。接着,用【证明 2】一样的思路说明 (1) 独立集个数为 k;(2) 独立集之间平均,接着计算边数即可。
【证明 5】(概率分布)对每一个点 u 分配一个概率 pu∈[0,1] 满足 ∑u∈Vpu=1,问题是如何分配概率使得 ∑(u,v)∈Epupv 最大,即转化为下面的优化问题:
{pu}u∈VmaxF=(u,v)∈E∑pupvs.t. pu∈[0,1],∀uu∈V∑pu=1 下面我们说明:
- 概率分布向团集中。对于两个点 u,v,设其邻居节点的概率和为 S(u),S(v),不妨 S(u)≥S(v),那我们可以把 pv 全部转移给 pu 而不会让优化目标变得更差,即 pu←pu+pv,且 pv←0:
ΔF=pvS(u)−pvS(v)≥0
- 概率分布在团上均匀分配。假如在 r-团上两个点 u,v 满足 pu>pv,那么 S(u)=S+pv,S(v)=S+pu,其中 S 为团上除了 u,v 两个点外其他点的概率,那我们可以将 pu,pv 均调整至 (pu+pv)/2 使目标增大:
ΔF=2pu+pv(S(u)+S(v))−puS(u)−pvS(v)=2pu+pv(2S+pu+pv)−pu(S+pv)−pv(S+pu)=21(pu−pv)2>0
因此,概率在最大的 r-团上均匀分配时目标最大,此时
F=(r1)2(2r)=21(1−r1) 并且 r 越大 F 越大;又因为 r 最大为 k,因此
Fmax=21(1−k1) 这样分配一定大于在 ∣E∣ 上均匀分配,于是
21(1−k1)≥∣E∣n21⟹∣E∣≤(1−k1)2n2