我不相信存在一种算法,用于在二分图中找到最大独立顶点集,而不是在所有可能的独立集中找到最大值的强力方法。
我想知道找到所有可能的顶点集的伪代码。
假设给出了一个带有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蓝色并且休息红色。
答案 0 :(得分:10)
我不相信存在一种算法,用于在二分图中找到最大独立顶点集,而不是在所有可能的独立集中找到最大值的强力方法。
有:找到最大独立集相当于找到最小顶点覆盖(通过取结果的补码),Konig's theorem表示二分图中的最小顶点覆盖相当于最大匹配,并且可以在多项式时间中找到。我不知道找到所有的匹配,但似乎可能会有很多指数。
答案 1 :(得分:1)
正如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
中的每个顶点1 {}}且B
内无,R
内无B
,b>=r
最大独立集为R
,否则为B
。
一般情况下,R
或{1,2,3,A,B,C}
不起作用。 sdcvvc注意到顶点为{A,1}, {A,2}, {A,3}, {B,3}, {C,3}
和边{1,2,B,C}
的示例。在这种情况下,最大独立集合为{A,B,C}
,大于分区{1,2,3}
或B
。
它可能会改进Robson的算法,从R
或{{1}}的较大者开始,然后从那里开始,但我不确定这将产生多大的差异。
或者,您可以在图的二分补码上使用Hopcroft–Karp algorithm来查找最大匹配,然后将匹配中使用的顶点作为独立集。这给出了一个多项式时间算法来解决这个问题。