【例 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 的密度,那么使用上面贪心算法获得的点的数量满足
【证明】假设第 i 步选择了点 vi,其当前度数为 d(vi),那么我们这一步将会删除 d(vi)+1 个点和至少 d(vi)(d(vi)+1)/2 条边(刚好的情况下,这些点构成了一个团),于是
令下式 * 2 加到上式中,有
根据 Cauchy-Schwarz 不等式,有
从而
于是,
【定理 2】若 m∗(G) 为图 G 的最大独立集数(最优解),那么
【证明】假设 V∗ 是一个最优解。考虑每次删点时,假设删除的 d(vi)+1 个点中有 ki 个 V∗ 中的点,那么:
在删边时,在贪心算法时我们提到过最少情况下,这些点构成了一个团,至少删去 d(vi)(d(vi)+1)/2 条边。但是在这里,有 ki 个 V∗ 中的点,他们之间不可能有边相连,因此应该去掉他们之间连的边,即 ki(ki−1)/2 条边;但同时需要满足他们的度数依然不比 d(vi) 小,于是这 ki 个点每个点需要从外面补上 ki−1 条边,即需要多删除 ki(ki−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 更大物品的基础上,最后返回
【定理 3】背包问题贪心算法得到的 mH(X) 满足:
【证明】假设物品已经按照 pi/wi 从大到小排序,并重编号为 1,2,⋯,n,假设:
那么,当前剩余空间为 W−∑k=1i−1wk<wi,于是有:
于是,
【定理 4】(The Stein-Lovasz Theorem,SL 定理)设 A 是一个 N×M 的 0-1 矩阵,每行至少 v 个 1,每列最多 a 个 1,则存在一个 N×K 的子矩阵不包含全 0 行,且
可以理解为,挑选 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 的大小应该为:
那么考虑令 ki=N−∑t=iatKt,即为 Ai−1 的行数,那么我们知道
于是,
我们考虑对 Ai 进行双计数,根据上述定义,其大小为 ki+1×(M−∑t=i+1aKt),且其中每行至少 v 个 1,每列最多 i 个 1,于是对 1 的个数进行双计数,有
于是有
又,对 A 双计数有 Nv≤Ma,即 N/a≤M/v,于是
注: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) 满足
【证明】(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 定理,有
即
【定理 5(改)】存在一个 PHF(N;n,m,w) 满足
【证明】(概率方法)共有 mn 个函数,随机选择 N 个函数,对一个固定的 w-元子集合,则其中一个随机的函数使得子集合为单射的概率为
那么,这 N 个函数都无法完成单射的概率为 (1−P)N。总共有 (wn) 个 w 元子集合,那么没有完成单射的子集合数期望为 (wn)(1−P)N。根据平均值原理,必然有一个方案,没有完成单射的子集合数至多为 (wn)(1−P)N,于是我们只要保证 (wn)(1−P)N<1,那么由于“没有完成单射的子集合数”是非负整数,其只能等于 0,也就是说对所有子集合都能完成单射。于是条件为:
只要满足这个条件,就必然存在对应的 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 定理,有
【解 2】(概率方法)共有 (n/2n) 个函数,随机选择 K 个函数,对于一个固定的 t 元子集合 Y,被一个随机的 n/2 元子集合分割的概率为:
那么,这 K 个函数都无法分割的概率为 (1−P)K。总共有 (tn) 个集合,因此没有被分割的 t 元集合的期望个数为 (tn)(1−P)K,与【定理 5(改)】证明类似地,我们只需要满足
【定理 6】(Mantel 定理)在一个不含 3-圈 (triangle-free) 的 2n 个点的图中,最多有 n2 条边。
【证明 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】,我们有
又根据 Cauchy-Schwarz 不等式有,
于是,
【证明 3】(最大独立集)设 A 为最大独立集,令 B=V\A。则对任意 x 的邻居点集为独立集(因为不存在 3-圈),独立集大小为 d(x),于是有 d(x)≤∣A∣,∀x,故
【定理 7】(Turan 定理)对于一个含有 n 个点的图 G=(V,E),若图中不存在 (k+1)-团 (k≥2),那么有:
【证明 1】(数学归纳法)假设结论对 ≤n−1 均成立,下面证明 n 也成立。假设图的边数达到最多,那么图中已经存在 k-团(若不存在可以加边使其存在,但不满足变数最多的假设)。记这个 k-团为 A,剩下部分 B=V\A,那么:
- A 中的边数为 (2k);
- B 中的边数根据归纳假设不超过
- 连接 A,B 的边数:由于 B 中每个点最多只能连 (k−1) 个 A 中的点(否则就出现了 (k+1)-团),所以不超过 (n−k)(k−1)。
综上,
【证明 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′′ 三点之间不连边,则新图的边数为
同样导出矛盾。
综上,传递性成立。
因此 (u,v)∈/E 这个关系是等价关系,且图中存在 k-团,不存在 (k+1)-团,故需要 k 个等价类。下面说明等价类是平均的,即每个等价类的个数之间至多差 1:若两个等价类 A,B 出现 ∣A∣≥∣B∣+2,那么从 ∣A∣ 移动 1 个点到 ∣B∣ 中,边数变化 ∣A∣−1−∣B∣≥1,增加边数,与图中边数已经最多矛盾。因此,边数为:
【证明 3】(团数定理)Lecture 3 中【定理 4】阐述了最大团 ω(G) 和图 G 的关系:
那么,
这是因为:
- ω(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。
化简得:
【证明 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 最大,即转化为下面的优化问题:
下面我们说明:
- 概率分布向团集中。对于两个点 u,v,设其邻居节点的概率和为 S(u),S(v),不妨 S(u)≥S(v),那我们可以把 pv 全部转移给 pu 而不会让优化目标变得更差,即 pu←pu+pv,且 pv←0:
- 概率分布在团上均匀分配。假如在 r-团上两个点 u,v 满足 pu>pv,那么 S(u)=S+pv,S(v)=S+pu,其中 S 为团上除了 u,v 两个点外其他点的概率,那我们可以将 pu,pv 均调整至 (pu+pv)/2 使目标增大:
因此,概率在最大的 r-团上均匀分配时目标最大,此时
并且 r 越大 F 越大;又因为 r 最大为 k,因此
这样分配一定大于在 ∣E∣ 上均匀分配,于是