洛瓦兹局部引理(Lovász Local Lemma, LLL)
给定一个“坏事件”的集合B={B1,⋯,Bm},其中Pr[Bi]<1。当我们希望一个坏事件都不发生的时候,我们等价于希望有坏事件发生的概率<1,即Pr[i=1⋃mBi]<1。根据以往的做法,我们可以根据Union Bound直接放缩为i=1∑mPr[Bi],证明它小于1即可。
Union Bound是对任何事件集都成立的,也就是说Union Bound的放缩一定没能利用到“坏事件”本身之间的联系。这将会导致用Union Bound处理问题经常会放过头。
LLL就是这样一个利用了事件本事之间联系的定理。我们定义一个关于坏事件集合的“依赖图”G([m],E),满足:如果Bi与Bj不独立,则i,j之间必须连一条边。这里我们没有要求如果i,j有边必须能推出Bi,Bj不独立,因此依赖图是不唯一的。一个完全图一定是一个合法的依赖图。设d是依赖图的最大度数,直观上d越小说明事件之间的相关性越低。LLL指出,如果∃0≤p<1使得Pr[Bi]≤p恒成立(即坏事件的概率存在上界p),且存在某个度数为d的依赖图,使得p,d满足p(d+1)<e1,那么可以推出坏事件都不发生的概率大于0,即Pr[i=1⋂mBi]>0。其中e是自然对数。
我们之后将会对更一般的情况给出证明,这里我们先来通过例子来进一步LLL在说什么。
如果所有事件都互斥(互斥即没有交集。我们知道两个互斥事件不可能同时发生,所以同时发生的概率为0,而两个事件的概率相乘不等于0,因此互斥事件一定不独立),此时的依赖图只能是完全图。因此d=m−1。因此如果p<em1,那么满足洛瓦兹定理的条件,坏事件有可能都不发生。
如果所有事件都相互独立,那么d可以取0。此时如果p<e1就可以推出坏事件可能都不发生。
我们看到,LLL告诉我们只要确定出每个事件与其相关的事件个数(局部性)的一个上界,我们就有一种方法来分析是否能使所有事件都不发生。当我们用Union Bound放缩时,我们利用的是每个事件的概率加和;使用洛瓦兹引理时,我们利用的是事件之间的相关性。
Ramsey数的更好下界
我们给出过R(s,s)>2s/2。其实它是由Pr[S∈(k[n])⋃BS]≤(kn)21−(2k)<1推得的,可以解出更精确的下界n≤(e21+o(1))k⋅22k。我们做的工作就是为了使Pr[i=1⋂mBi]>0,当时我们使用的是Union Bound。
现在我们可以用LLL了!两个k子图S,T如果只有不超过1个公共点,那么它们没有公共边, 所以是独立的。所以只有可能那些有超过1个公共点的子图间不独立,所以某个k子图最多可能拥有(2k)(k−2n−2)个与它不独立的子图,对应的依赖图上度数不可能超过它。所以d≤(2k)(k−2n−2)。我们的坏事件是子图的边同色,所以Pr[Bi]恒为2×2(2k)1。所以取p=21−(2k),代入p(d+1)<e1解得只要n≤(e2+o(1))k⋅22k就能保证不存在同色子图,这样我们就找到了一个新的更大的下界。
k-SAT
对于一个m个clause的CNF,每个clause的literals都为k,它由n个变量构成:ϕ=C1∧C2∧⋯∧Cm。定义d(xi)表示有多少个clause里出现了变量xi,d(xi)的最大值称为这个CNF的度数Δ。我们现在想通过LLL求出当Δ满足什么条件时,一定能找到一组变量的赋值使得CNF满足。
定义坏事件Bi表示clause[i]不满足,由于clause内部是“或”,不满足当且仅当自变量的赋值使得每个参与运算的都为0,因此Pr[Bi]=2−k。Bi,Bj如果没有公共变量就一定独立,而由于Δ的限制一个clause最多只能与k(Δ−1)个clause不独立,因此在依赖图上d≤k(Δ−1)。直接代入LLL可得:只要2−k⋅kΔ<e1就能使得所有坏事件都不发生的概率大于0,等价于,只要Δ<ek2k时一定能找到一组变量的值使得CNF为true。
独立集
假设图G(V,E)上点的最大度数为Δ,将V划分成m个集合V1,⋯,Vm,且∣Vi∣≥k。当k满足什么条件时,存在一种方案从每个Vi中挑出一个点ui使得{ui}构成一个独立集?
不妨设每个∣Vi∣都为k,因为如果某些∣Vi∣>k,我们可以删点后分析,删点后的图中的独立集一定也是原图中的独立集,因为遗失的边都是关于那些删掉的点的。接下来我们用概率法,随机从每个集合中挑一个点,因此每个点被挑中的概率就恰好是k1。我们对每条端点不属于同一个Vi的边定义坏事件,根据条件坏事件应当是这条边的两个点都被挑中了,这发生的概率为k21。按照惯例,接下来我们要分析依赖图来使用LLL,两个坏事件(两条边)如果没有公共点,并且四个点分属不同的Vi,那么这两个事件独立;如果存在两个点在同一个集合,那么这两个事件是互斥的,不可能独立;如果存在公共点,也即存在一个公共点, 那么可能不独立。后面两种情况可以统一为“不能存在两条边中有两个端点处于同一个集合”的情况,因此对于每一个坏事件(一条边)与其不独立的≤2[(k−1)Δ+Δ−1]=2kΔ−2<2kΔ−1个(稍微放松了)。于是代入LLL可得k21⋅2kΔ<e1,解得k>2eΔ。
非对称洛瓦兹局部引理
在我们成功应用洛瓦兹局部引理的案例中,我们定义的坏事件都具有对称性,甚至坏事件发生的概率都相等,因此给出的概率上界就是概率本身。而如果坏事件的概率本身具有某种较大的波动性,那么用上界放缩就不那么有效了。对于这样的问题我们也用相应的改进办法,就称为“非对称的洛瓦兹局部引理”:
如果每个Bi都对应着一个x(Bi),它在(0,1)实数范围内取值,记Nei(Bi)表示依赖图上Bi的邻居节点,那么如果概率满足Pr[Bi]≤x(Bi)Nei(Bi)∏(1−x(Bi)),就可以推出Pr[i=1⋂mBi]≥i=1∏m(1−x(Bi))>0。
函数x(Bi)在这里没有明确的组合意义。实际上在其它研究中人们已经找出了一些它的意义,但这些意义比较复杂,这里就不讨论了。
我们大致能够看出这是一个比原来的定理更一般的定理。实际上,令x(Bi)恒等于d+11,那么条件可以写为Pr[Bi]≥x(Bi)Nei(Bi)∏(1−x(Bi)) ≥d+11⋅(1−d+11)d>(d+1)e−1。所以只要p(d+1)>e1就能推出结论。
下面我们来证明。
根据链式法则,我们可以把Pr[i=1⋂mBi]写作i=1∏mPr[Bi∣j<i⋂Bj]。记FS:=i∈S,S∈[n]⋂Bi,即坏事件集合S通通不发生这一事件,那么又可以把它写作i=1∏m(1−Pr[Bi∣F[i−1]])。那么要证Pr[i=1⋂mBi]≥i=1∏m(1−x(Bi)),只需证Pr[Bi∣F[i−1]]≤x(Bi)。为此,我们可以转而证明Pr[Bi∣FS]≤x(Bi)对所有i∈/S成立。
对S的大小归纳。当S=∅时,FS=1,那么根据Pr[Bi]≤x(Bi)Nei(Bi)∏(1−x(Bi))直接得到Pr[Bi∣FS]=Pr[Bi]≤x(Bi)。
当S=∅时,如果S中的所有坏事件Bj都和Bi独立,此时也有Pr[Bi∣FS]=Pr[Bi]≤x(Bi)。否则,我们把S划分成两部分S1,S2,其中S1是所有与Bi不独立的坏事件构成的(在依赖图上必须与i有边),S2是所有独立的构成的。那么Pr[Bi∣FS]现在写作Pr[Bi∣FS1∩FS2] =Pr[FS1∩FS2]Pr[Bi∩FS1∩FS2]。它等价于Pr[FS2]Pr[Bi∩FS1∩FS2]⋅Pr[FS1∩FS2]Pr[FS2]=Pr[Bi∩FS1∣FS2]⋅Pr[FS1∣FS2]1。我们分别放缩分子和分母,为了证明它小于x(Bi),分子应当放大,分母应当放小。分子Pr[Bi∩FS1∣FS2]≤Pr[Bi∣FS2],而根据我们的分类Bi与FS2是独立的,于是Pr[Bi∣FS2]=Pr[Bi]≤x(Bi)Nei(Bi)∏(1−x(Bi))。而对于分母,Pr[FS1∣FS2],不妨设S1={1,2,⋯,r},那么它写作Pr[i=1⋂rBi∣FS2]。它可以根据链式法则写作i=1∏rPr[Bi∣FS2∩i=k⋂i−1Bk]。其中FS2∩i=k⋂i−1Bk对应着某个更小的S′的FS′,所以把每个Pr[Bi∣FS2∩i=k⋂i−1Bk]写作Pr[Bi∣FS′]=1−Pr[Bi∣FS′],用归纳假设Pr[Bi∣FS′]≤x(Bi)得Pr[Bi∣FS2∩i=k⋂i−1Bk]≥1−x(Bi)。因此综上Pr[FS1∣FS2]≥i=1∏r(1−x(Bi))。在依赖图上考虑,不仅这些不独立事件会连边,独立事件也可能连边,乘上更多小于1的数以后它变得更小,因此写出≥j∈Nei(Bi)∏(1−x(Bj))。综上Pr[FS1∣FS2]Pr[Bi∩FS1∣FS2]≤j∈Nei(Bi)∏(1−x(Bj))x(Bi)Nei(Bi)∏(1−x(Bi))−x(Bi)。证毕。
非对称Ramsey数
我们到目前为止都只给出了R(s,s)的下界。现在通过非对称的LLL,我们能给出R(r,s)的下界。先来研究R(k,3)。
要使得Kn的任何边染色方案都不能存在K3的全红子图和Kk的全蓝子图,我们定义坏事件AS为大小为3的子图S全红,坏事件BT为大小为k的子图T全蓝,整个坏事件集合就由这两种坏事件构成。对于某个AS,在依赖图中与它相邻的AS′不超过(23)×(n−3)=3(n−3)个(即统计与S公共点超过两个的S′),与它相邻的BT不超过(23)(k−2n−3),尽管如此,我们可以把它放松成(kn);与BT相邻的BT′不超过(2k)(k−2n−k),我们也把它放松成(kn),与BT相邻的AS不超过(2k)(n−2)=2k(k−1)(n−2),把它放松成2nk2。现在随机给图上的边染色,以p的概率染红色,1−p的概率染蓝色。于是Pr[AS]=p3,Pr[BT]=(1−p)(2k)。现在我们设两个实数0<α,β<1使得p3≤α(1−α)3(n−3)(1−β)(kn);(1−p)(2k)≤β(1−α)2nk2(1−β)(kn),那么如果把α,β分别视为我们的神秘函数x(AS),x(BT),我们就符合非对称LLL的条件了——因为我们先前把指数放大了,把指数缩小为依赖图上的真正度数以后,如果α,β可以作为函数的取值,我们就真的满足了非对称LLL的条件。现在的问题是,当n取什么样的值时可以解出这样的α,β?我们的全部要求就是,解出0<p,α,β<1这三个量使得以上两个不等式满足,这样就能直接得到一个能满足LLL要求的条件。我们发现,当n=O(logkk2)这是可以做到的,于是我们得到了R(k,3)的一个下界Clogkk2。
用类似的方法,我们还可以求得R(k,4)>k25+o(1),这已经是目前全世界已知的R(k,4)的最好下界了。
算法化洛瓦兹局部引理
我们之前讨论的洛瓦兹局部引理都只给出了“存在性”,那么我们能不能给出一个高效地找到这个解的算法呢?以寻找k-SAT为例,我们希望能找到一个使得CNF为true的赋值。一个最简单的想法是不停的随机生成变量的赋值,直到CNF满足为止。如果CNF被满足的概率是poly(n)1级别的,那么这个方法确实可以期望在多项式时间内找到解。遗憾的是,这个概率是指数级别的,所以我们必须寻找更高效的算法。
2009 年R. Moser给出了一个非常简单的找到k-SAT问题的解的算法,并成功证明了这个算法在期望线性的时间内就可以找到一组可满足解——在生成了一组随机的赋值以后,如果不满足,相比于直接对全部变量进行重新赋值,该算法考虑只对没被满足的子句上的变量进行重新赋值。具体过程如下:
如果当前的赋值不能满足题目条件,那么找到第一个不满足的clause,记为Ci,调用"fix(i)":对于Ci中所涉及到的所有变量重新随机赋值,接着对于分布在各个其它的Cj里的这些变量,找到第一个不满足的Cj(包括它自己)调用"fix(j)"。
Moser证明了当d<2k−3−1时(这时符合LLL的条件的)期望只调用O(m)次fix就能找到一组解。
先来看这个算法的正确性。这个算法的fix函数的执行过程可以看作是一棵树,树的一个节点就是对某个clause的fix。对于某个节点,假设它代表fix(x),那么它还将有一个子树, 因为当我们给如果一个clause重新赋值以后,我们还将找到许多不满足的其它“相邻”clause来调用fix。显然在整个子树执行完毕之后clause(x)一定已经满足了,并且在回到父节点之后clause(x)不会再次不满足,否则说明在其它过程中x的值再次被修改了,而我们知道递归地,只要修改我们就一定会把其内部的所有变量改对为止。
下面来分析复杂度。当我们谈Moser算法的期望的时候,我们的样本空间是什么呢?样本空间应当是我们每一次选择的随机赋值的所有可能形,如果把它想象成一段C++程序,样本空间就是我们的“随机种子”的取值范围。假设一个Moser算法执行了至少T次fix,那么我们就生成了T次clause的赋值,对应着kT个01随机数,以及最初的n个赋值。所以我们的样本空间大小为2n+kT。只要我们能求出“会使得算法执行至少T次fix的概率”是多少,我们就可以根据定义求出期望了。但这是不容易直接求出的。我们来考虑用一个二进制串来表示我们的“DFS树”的形态:对于每个节点把它的子节点用二进制从0开始编码,而所需要的二进制的位数只需要O(logd)。我们再单独用一个0代表向下往儿子方向走,1表示像父节点走,我们就可以用一个二进制串模拟出一个DFS树,而这个二进制串只需要n+m+(log(d+1)+2)(T−1)位。这说明符合要求的超过T次fix的算法过程不超过2n+m+(log(d+1)+2)(T−1)个,所以概率Pr[fix≥T]≤2n+kT2n+m+(log(d+1)+2)(T−1)≤2m−T。即运行了T次fix以后算法仍不能停止的概率≤2m−T,等价于运行了m+T次以后不停止的概率≤2−T,这样我们就保证了概率小于1。我们计算算法执行每一次fix的期望——总的执行次数等于执行每一次的概率之和。而执行第m+i次fix的概率一定不超过2−i。因此期望E[T]≤m+i=1∑+∞2−i=O(m)。