最大独立集算法
Posted
技术标签:
【中文标题】最大独立集算法【英文标题】:Maximum Independent Set Algorithm 【发布时间】:2012-01-25 11:00:43 【问题描述】:除了在所有可能的独立集合中找到最大值的蛮力方法之外,我不相信存在一种算法可以在二分图中找到最大独立顶点集。
我想知道查找所有可能顶点集的伪代码。
假设给定一个具有 4 个蓝色顶点和 4 个红色顶点的二分图。目前我会
Start with an arbitrary blue,
find all red that don't match this blue
put all these red in Independent Set
find all blue that dont match these red
put these blue in Independent Set
Repeat for next vertex in blue
Repeat all over again for all blue then all vertices in red.
我知道这种方式根本不会给我所有可能的独立集组合,因为在第一步之后,我选择了所有不匹配的下一个颜色顶点,而不是逐步遍历所有可能的颜色。
例如给定一个匹配的图
B R
1 1
1 3
2 1
2 3
3 1
3 3
4 2
4 4
Start with blue 1
Choose red 2 and 4 since they dont match
Add 2, 4 to independent Set
Choose 2 and 3 from blue since they dont with 2 or 4 from red
Add 2 and 3 from blue to independent set as well.
Independent Set = 1,2,3 from blue 2,4 from red
Repeat for blue 2, blue 3, ... red n (storing the cardinality for each set)
有没有办法改进这个算法,以更好地搜索所有可能性。我知道|二部图的最大集| = |红色| + |蓝色| - |最大匹配|。
问题出现的可能性是,通过在第一次选择所有可能的红色以获得给定的蓝色,如果这些红色连接到所有其他可能的蓝色,那么我的集合只有所有 1 个蓝色和其余红色。
【问题讨论】:
图表有多大?节点数和边数?可以在标准的最大团算法中提供图形的补码。 【参考方案1】:除了在所有可能的独立集合中找到最大值的蛮力方法之外,我不相信存在一种算法可以在二分图中找到最大独立顶点集。
有:找到最大独立集相当于找到最小顶点覆盖(通过对结果进行补码),并且Konig's theorem指出二分图中的最小顶点覆盖相当于最大匹配,并且可以在多项式时间内找到。我不知道找到所有匹配项,但似乎可以成倍增加。
【讨论】:
我看不到顶点覆盖和独立集之间的联系。我认为顶点覆盖的补集不是独立集。 顶点覆盖:对于所有边 (u,v),要么是 C 中的 u,要么是 C 中的 v。独立集:对于所有边 (u,v),要么 u 不在 I 中,要么 v 在不在 I 中。如果你把 I 作为 C 的补码,则条件是等价的。 Konig's theorem 上的文章展示了一个矛盾的例子。在右上角,您可以看到两个红色节点之间的边缘。这演示了一个不独立的(最小)顶点覆盖。 顶点覆盖:对于所有边 (u,v):要么是 C 中的 u,要么是 C 中的 v,或者 u 和 v 都在 C 中。 1.找到最大匹配(例如 Hopcroft-Karp) 2. 使用 Wikipedia on Konig theorem 中给出的算法来获得顶点覆盖 3. 输出不在覆盖中的顶点以获得独立集【参考方案2】:正如 Aaron McDaid 在他现在已删除的答案中提到的那样,寻找最大独立集的问题等同于寻找最大集团。等价的是,在图 G 中找到一个最大独立集与在 G 的补集中找到一个最大团是相同的。已知该问题是 NP 完全的。
你提到的蛮力解决方案需要O(n^2 2^n)
,但你可以做得比这更好。 Robson 在 1986 年发表了一篇题为“最大独立集的算法”的论文,该论文给出了一个将 O(2^c*n)
用作常数 0<c<1
的算法(我相信 c
大约是 1/4
,但我可能弄错了)。无这是特定于二部图的。
如果您有一个二分图,需要注意的一点是任何一边都形成一个独立的集合。在完整的二分图K_b,r
中,B x R
与|B|=b
和|R|=r
分区,其中从B
中的每个顶点到R
中的每个顶点都有一条边,在B
中没有边,在B
中也没有边R
,如果b>=r
,则最大独立集为B
,否则为R
。
使用B
或R
通常不会起作用。 sdcvvc 用顶点1,2,3,A,B,C
和边A,1, A,2, A,3, B,3, C,3
记录示例。在这种情况下,最大独立集是1,2,B,C
,它大于分区A,B,C
或1,2,3
。
它可能会改进 Robson 的算法,从 B
或 R
中的较大者开始,然后从那里继续,尽管我不确定这会产生多大的不同。
或者,您可以在图的二分补上使用Hopcroft–Karp algorithm 来找到最大匹配,然后将匹配中使用的顶点作为独立集。这给出了一个多项式时间算法来解决这个问题。
【讨论】:
如果没有 Konig 定理,我认为最后一段是不正确的。例如,如果图是完全二分图,那么它的二分补集是空的,Hopcroft-Karp 算法将找不到任何匹配,而最优是取所有蓝色(或红色)顶点。 PengOne,我删除了我的答案,因为一旦我理解了@sdcvvc 的答案,我就决定人们应该用那个答案而不是我的答案。据我所知,这是正确的。 Robson算法有软件实现吗?以上是关于最大独立集算法的主要内容,如果未能解决你的问题,请参考以下文章
POJ 1466 Girls and Boys (匈牙利算法 最大独立集)