Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 最大独立集算法_Algorithm_Max_Graph Theory_Np_Independent Set - Fatal编程技术网

Algorithm 最大独立集算法

Algorithm 最大独立集算法,algorithm,max,graph-theory,np,independent-set,Algorithm,Max,Graph Theory,Np,Independent Set,除了在所有可能的独立集中寻找最大值的蛮力方法之外,我不相信存在一种在二部图中寻找最大独立顶点集的算法 我想知道找到所有可能顶点集的伪代码 假设给定一个具有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 r

除了在所有可能的独立集中寻找最大值的蛮力方法之外,我不相信存在一种在二部图中寻找最大独立顶点集的算法

我想知道找到所有可能顶点集的伪代码

假设给定一个具有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个蓝色和其余的红色

除了在所有可能的独立集中寻找最大值的蛮力方法之外,我不相信存在一种在二部图中寻找最大独立顶点集的算法


有:求最大独立集等价于求最小顶点覆盖(取结果的补),并指出二部图中的最小顶点覆盖等价于最大匹配,并且可以在多项式时间内找到。我不知道如何找到所有匹配项,但似乎可以找到成倍多的匹配项。

正如Aaron McDaid在他现在删除的答案中提到的那样,找到最大独立集的问题相当于找到最大集团。等价性在于,在图G中找到一个最大独立集与在图G的补集中找到一个最大团是一样的。这个问题被称为NP完全问题


您提到的暴力解决方案需要
O(n^2^n)
,但您可以做得更好。Robson在1986年发表了一篇题为“最大独立集的算法”的论文,该论文给出了一个采用
O(2^{c*n})的算法
对于常数
0图有多大?节点数和边数?可能可以在标准的最大团算法中填充图的补码。我看不到顶点覆盖和独立集之间的联系。我认为顶点覆盖的补码不是独立集。顶点覆盖:对于所有edges(u,v),C中的u或C中的v。独立集:对于所有边(u,v),u不在I中或v不在I中。如果将I作为C的补充,则条件是等效的。上的文章显示了一个矛盾的示例。在右上角可以看到两个红色节点之间的边。这显示了(最小值)非独立的顶点覆盖。顶点覆盖:对于所有边(u,v):C中的u或C中的v,或者u和v都在C.1中。查找最大匹配(例如Hopcroft-Karp)2.使用维基百科中给出的关于Konig定理的算法获得顶点覆盖3.输出不在覆盖范围内的顶点以获得独立集我认为没有Konig定理的最后一段是不正确的。例如,如果图是完全二部图,那么它的二部补是空的,Hopcroft-Karp算法将找不到任何m我删除了我的答案,因为一旦我理解了@sdcvvc的答案,我就决定人们应该用这个答案而不是我的。就我所知,它是正确的。罗布森算法有软件实现吗?