Disclaimer: From Quack.
☆ 拟阵
拟阵的定义与常见性质 & 拟阵交算法
☆ 拟阵的定义与常见性质
§ 独立集系统和拟阵
定义独立集系统S=(E,I),E是基本元素的集合,I⊆2E,I中的元素称为独立集。
I需要满足遗传性:如果A∈I,B⊆A,那么B∈I。
举例:
定义在无向图G(V,E)上的独立集系统,I是不构成环的边集合,显然满足遗传性。
求无向图的最大生成树,实际上是先给E中每个元素赋予一个权值(边权),然后求一个权值最大的独立集。
回忆一下kruskal算法,每次选一条边权最大的边,如果把它加入答案不形成环,就把它加入答案。
推广一下,给定任意独立系统,任意给每个元素一个非负的权值,要求权值最大的独立集,容易得到下面的贪心算法:
-
将元素按权值从大到小排序。
-
按顺序依次考虑每个元素,如果把这个元素加入答案后仍然是一个独立集,就加入答案。
不幸的是,这个算法只有在特定条件下才会给出最优解。
比如考虑求二分图图的最大权值匹配,定义独立集为可以形成匹配的边集。考虑一个4个点3条边的图V={u_1,u_2,u_3,u_4},w(u_1,u_2)=w(u_3,u_4)=5,w(u_1,u_4)=8,w(u_2,u_3)=1,贪心算法会选择边(u_1,u_4),(u_2,u_3),权值是9,最优解是(u_1,u_2),(u_3,u_4),权值是10。
我们把贪心算法能够使用的独立集系统称为拟阵(matroid),比如上面定义在无向图边集上的独立集系统(一个边集是独立集当且仅当不包含环),贪心算法实际上就是kruskal算法,为了方便,给它一个名字叫图拟阵(graphic matroid)。
特别地,很多问题只要求取一个最大的独立集,即元素权重都是单位1的特殊情况,如果这个独立集系统是拟阵,我们称这种拟阵叫做unweighted matroid。
§ 拟阵的性质
那么如何判定一个独立集系统M是不是拟阵呢?下面三条定义是等价的:
- M是拟阵,任意给元素分配非负的权值,贪心算法能得到最优解。
- 假设有2个独立集I_1,I_2,∣I_2∣=∣I_1∣+1,那么∃e∈I1−I2,I1∪e∈I。 通俗地讲,就是如果2个独立集大小相差1,那么一定可以从大的独立集那里拿一个给小的,使新的集合还是独立集。
- 若A⊆E,I_1,I_2⊆A是A上的极大独立集,那么∣I_1∣=∣I_2∣。也就是E的任意子集上的极大独立集大小相同。
证明
links
接下来引入几个概念:
- 秩(Rank):根据上面第3条,E的任意子集A上的极大独立集大小相等。这个大小就是A的秩,记为r(A)。
- 基(Basis):A的基上的任意极大独立集称为A的基。
- 回路(Circuit):极小的非独立集(相关集),即它本身不是独立集,但删掉任意一个元素后都是独立集。
为了方便理解,我们以图拟阵为例子.
图拟阵中任意边集A⊆E,r(A)是其生成子图的生成森林边数, 基就是任意生成森林,回路就是一个简单环。
再看一个独立集系统,它的元素集合是一些维数相同的向量,独立集的定义就是线性无关的向量集合。根据线性代数的知识,任意向量集合的极大线性无关组大小相同,即满足上面的判断独立集是否是拟阵的第3条,所以该独立集系统是一个拟阵,之后我们称它为线性拟阵。
线性拟阵的秩,基都和线性代数中吻合,回路就是极小的线性相关组。
为了后面证明的方便,再引入一个概念:
- 闭包(closure):cl(A)={e∣r(A+e)=r(A)}。
闭包的性质:若e∈cl(A),则cl(A)=cl(A+e),也就是说,cl(A)=cl(cl(A))。
☆ 拟阵交
§ 问题定义
有两个拟阵M_1=(E,I_1),M_2=(E,I_2),求I∈I_1∩I_2且使得∣I∣尽量大。
注意这里的I_1,I_2是“集合的集合”,I是“集合”。
§ 算法感性认识
∆ 类比二分图最大匹配
许多时候,一个组合优化问题并不能表示成一个拟阵,但是却可以表示成两个拟阵甚至更多拟阵的交。比如二分图匹配,之前我们已经举了一个反例说明它虽然是个独立集系统,但并不是一个拟阵。然而,我们可以把它表示成两个拟阵的交:
我们用G(L,R,E)表示一个二分图,L,R分别是两边的顶点集合,E是边集,也是拟阵的基本元素集合。
定义拟阵M_1=(E,I_1): 边集A∈I_1 当且仅当A中边的左端点互不相同。
定义拟阵M_2=(E,I_2): 边集A∈I_2 当且仅当A中边的右端点互不相同。
M_1,M_2是拟阵这一点可以自行验证。那么I∈I_1∩I_2且∣I∣尽量大的I就是二分图的一组最大匹配。
然后回忆匈牙利算法的过程,实际上就是找增广路。假设我们是从左边的点出发找到了增广路,设这条路的边为e_1,e_2,⋯,e_2k,e_2k+1(下标为偶数的边是之前的一些匹配边),之前的整个匹配边集为I,那么I+e_1−e_2+⋯−e_2k+e_2k+1是新的一个匹配边集。
我们从拟阵的角度来看这个过程,I+e_1仍然是拟阵M_1的独立集,即I+e_1∈I_1。但多了一条边之后,右边的某个点就会和2条边相关,右边的独立性被破坏。所以又变成I+e_1−e_2∈I_2,又让右边满足独立,而且是去掉一个元素,左边肯定还是独立。
最终I+e_1−e_2+⋯−e_2k+e_2k+1在保持左边独立性的前提下让独立集大小增加1,而且右边也是独立的,于是就找到了一条增广路。
这个过程本质上是在奇数步尝试增加一个元素,并且保持M_1的独立性,然而这可能会导致M_2的独立性被破坏,所以在偶数步又去掉一个元素,使得重新满足M_2中的独立性,直到在某个奇数步能找到一个元素,使得加上这个元素也不会破坏右边的独立性。我们也尝试把这种方法应用在一般的拟阵交问题上。
但是有一个问题,用上面的方法找增广路,在第i步找一个元素e_i,它符不符合要求是和e_1,e_2,⋯,e_i−1的选择有关的,这样搜索空间就相当大了,所以我们需要把增广路的条件放宽一点,后面会证明放宽之后找到的解也一定是最优解。
考虑奇数步,原本的条件是I+e_1−e_2+⋯−e_2k+e_2k+1∈I_1,但是这个条件太难了,我们放宽成I−e_2k+e_2k+1∈I1。同理偶数步放宽成I−e_2k+e_2k−1∈I2。
∆ 算法流程
有两个拟阵M_1=(E,I_1),M_2=(E,I_2),求交。
设目前得到的答案集合I,初始时I为空集。显然I是E的子集。
对E中每个元素建一个点,属于I的元素为左部,不属于的为右部,建成二分图。再另建源点S和汇点T。
-
如果e∈E−I,I+e∈I1,连边(S,e)。
-
如果e∈E−I,I+e∈I2,连边(e,T)。
-
如果e_x∈I,e_y∈E−I,I−e_x+e_y∈I1,连边(e_x,e_y)。
-
如果e_x∈I,e_y∈E−I,I−e_x+e_y∈I2,连边(e_y,e_x)。
然后对这个图求S到T的最短路,把最短路中在集合I中的元素从集合I中去掉,把最短路中不在集合I中的元素(S和T除外)加入集合I,进行下一次建图。
易知每次I的大小会增加1,算法在S到T不连通时终止,此时I就是答案。
令r=max(r(M_1),r(M_2)),n=∣E∣,我们每次构建出来的图都是n个点,rn条边的图。由于增广次数不超过r,时间复杂度O(r2n)。
感性理解连边
由于是把左部的点e_x换成右部的点e_y,所以都是I−e_x+e_y。
连边的方向可以先感性理解:有一种想法是就像上面说的一样,奇数步I_1,偶数步I2。还有一种想法是,因为连好之后是从S直接到右部点e_y,e_y相关的一条信息是I+e_y∈I1,这个右部点接下来会向左走增广路,那么和这个右部点相关的另外一条信息就应该和I2有关了。
§ 算法正确性证明
正确性证明分为两个方面:
∆ 一方面
对于这个问题,我们的证明思路是,设增广路上的左部点是x_1,⋯,x_n,右部点是y_1,⋯,y_n,y_n+1。我们想证明的是I−x_1−⋯−x_n+y_1+⋯+y_n+y_n+1∈I1且I−x_1−⋯−x_n+y_1+⋯+y_n+y_n+1∈I2。
先证I−x_1−⋯−x_n+y_1+⋯+y_n+y_n+1∈I1,由于y_1这个点是直接和S相连的,满足I+y_1∈I1,我们只需要证I和I−x_1−⋯−x_n+y_2+⋯+y_n+y_n+1具有相似的性质,以至于在I+y_1∈I1式中,可以直接把I替换为I−x_1−⋯−x_n+y_2+⋯+y_n+y_n+1。
具体来说,可以先证I−x_1−⋯−x_n+y_2+⋯+y_n+y_n+1∈I1。假设我们已经证明了,由于增广路是最短路,所以I+y_i∈/I1(i≥2),所以r(I)=∣I∣=r(I−x_1−⋯−x_n+y_2+⋯+y_n+y_n+1)=r(I+y_2+⋯+y_n+y_n+1)(第三个等号成立是由于两个集合的闭包相等),又因为I+y_1∈I1,那么沿用拟阵上最优化问题的思路,相当于集合里面的元素为I+y_1,加进去不形成环就往里加,最终所有的元素都能加进去。现在集合里面的元素增加了,变成I+y_1+⋯+y_n+y_n+1,在排序的时候把y_i排到x_i前面,加进去不形成环就往里加,最终加进去的元素集合就是I−x_1−⋯−x_n+y_1+⋯+y_n+y_n+1。
所以说剩下就是如何证I−x_1−⋯−x_n+y_2+⋯+y_n+y_n+1∈I1。
对拟阵M=(E,I)定义交换图D_M(I)(I∈I)。交换图是一个二分图,左部是I,右部是E−I,如果对于x∈I,y∈E−I,有I−x+y∈I,那么就连无向边(x,y)。我们证明一个辅助证明的定理:
设I∈I,J是一个大小等于I的由E中元素组成的集合,如果在D_M(I)中存在唯一一个I−J到J−I的完美匹配,则J∈I。
令N为完美匹配,把N中的边重定向,从E−I连向I,其余边从I连向E−I。由于匹配是唯一的,那么图中不存在环,所以可以拓扑排序,即可以把所有点重标号,使得边都是从标号小的指向标号大的。又因为从右部连回左部的边只有匹配大小这么多条,且是一一对应的连边,所以在处理右部连回左部的边时,我们给右部和左部的点相同大小的标号,那么这个图就有一个关键性质:左部点连向的右部点满足右部点的标号都不小于左部点的标号。
接下来使用反证法,设J不是独立集,那么J中必定存在环C,设y_i是环中标号最大(且为i)的右部元素,由于之前的构造,对于环中其他的右部元素y,其匹配点x_i到y是没有边的。没有边就说明I−x_i+y∈/I,也就是说y∈cl(I−x_i),即C−y_i⊂cl(I−x_i)。
两边同时取闭包cl(C−y_i)⊂cl(I−x_i),因为C是环,所以y_i∈cl(C−y_i),所以y_i∈cl(I−x_i),但是这和(x_i,y_i)是交换图的匹配边矛盾。这样我们就证明了这个定理。
证I−x_1−⋯−x_n+y_2+⋯+y_n+y_n+1∈I1,只需让J=I−x_1−⋯−x_n+y_2+⋯+y_n+y_n+1,那么由最短路可知匹配是完美且唯一的,这样就证出来了。
证明另外一边I−x_1−⋯−x_n+y_1+⋯+y_n+y_n+1∈I2也是一样的,容易想到是利用I+y_n+1∈I2,然后证明I和I−x_1−⋯−x_n+y_1+⋯+y_n是差不多的东西。
∆ 另一部分
直接证Min-Max Formula。
max_I∈I∣I∣=min_U⊆Er_1(U)+r_2(E−U)
首先容易证明∀I∈I,∀U⊆E,∣I∣≤r_1(U)+r_2(E−U)。
- 把I分成A=I∩U和B=I−A两部分。
- A⊆U,A∈I_1→r_1(U)≥∣A∣
- B⊆E−U,B∈I_2→r_2(E−U)≥∣B∣
我们设U为交换图中可以到达T的点集。上面我们证了r_1(U)≥∣I∩U∣。现在我们证r_1(U)≤∣I∩U∣。反证法,如果r_1(U)>∣I∩U∣,这就说明能到达T的点组成M1的独立集的大小是要大于在交换图的左部且能到达T的点数,也就是说存在一个交换图中右部的点y,使得I∩U+y∈I_1。有可能是I+y∈I_1,但这说明S要向y连边,而y又能到T,那么S和T依旧连通,矛盾。也有可能是存在一个x∈I−U,使得I−x+y∈I_1,但这说明x要向y连边,而y又能到T,那说明x也能到T,但x∈/U,也矛盾。对于r_2(E−U)≤∣I−A∣的证明也类似,这里就不再重复。
综上,我们证明了算法结束的时候存在一个U,使得∣I∣能取到最大值,这就证明了算法的正确性。
§ 推广
∆ 带权拟阵交
相当于每个元素有权值,求独立集的交,使得权值和最大。
依赖于拓展的Min-Max Formula。
实际的算法中,我们只要在交换图中定义点权,左部点(x∈I)的点权设为−w(x),右部点(y∈E−I)的点权设为w(y),求最短路的过程改为求一条从S到T的路径,第一关键字是点权最大,第二关键字是经过的边数最小即可。证明略。
∆ 多个拟阵交
由于拟阵的交不是拟阵,所以不能两两求交。可以把多个拟阵的交规约到哈密顿路问题上,从而证明多个拟阵的交是NP-hard的。证明略。
§ 例题
∆ 二分图匹配
上面的分析就用的二分图匹配。这里略。
∆ 最小树形图
定义拟阵M_1=(E,I_1): 边集A∈I_1 当且仅当A的边看作无向边时无环。
定义拟阵M_2=(E,I_2): 边集A∈I_2 当且仅当A的边每个点入度不超过一,特别地根入度为零。
∆ Colorful Tree
给定带权无向图 G(V,E) ,每条边拥有一个 1 到 n−1 中的颜色,求一个权最大的生成树,满足每种颜色只出现一次。
定义拟阵M_1=(E,I_1): 边集A∈I_1 当且仅当A的边无环。
定义拟阵M_2=(E,I_2): 边集A∈I_2 当且仅当A的边每种颜色出现次数不超过一。