是否有一种算法可以找到有向图的所有独立集合? 从我所读到的,独立集表示由不相邻的节点形成的集合。
因此,对于此示例,我将{1} {2} {1,3} 那么怎么可能找到所有这些,我正在考虑递归的东西,但我真的不知道算法,如果有人能指出我正确的方向,那将非常感激!
谢谢!
答案 0 :(得分:2)
查找独立集的典型方法是考虑图的补码。图的补充被定义为具有相同顶点集和一对之间的边的图,当且仅当原始图中它们之间没有边时。图中的独立集对应于补语中的集团。找到所有派系的复杂性是指数级的,所以你不能太多地改善蛮力。我仍然认为,考虑到图表的补充可能会使问题更容易处理。
答案 1 :(得分:2)
除了补充和发现派系之外,我还可以考虑“图形着色”,你以某种方式为顶点着色,没有两个相邻的顶点具有相同的颜色(你可以用一个非常简单的启发式算法来做到这一点,比如SL = Smallest Last ),然后选择每种颜色中的顶点作为子集(作为最大独立子集)。
唯一的问题是图形着色的方法可能太多了。你必须保留所有找到的(最大的)独立集合并继续前进,直到你得到足够的集合!
答案 2 :(得分:1)
Bron-Kerbosch算法通常用于此问题,请参阅Wikipedia article以获取描述和伪代码,这些伪代码可以转换为可用程序而不会出现太多问题。在最坏的情况下,输出的大小是顶点数量的指数,但是如果输出是多项式,则强力将始终是指数的,而BK将是多项式。换句话说,如果你知道输出是合理的,那么BK将在合理的时间内产生它。这是一个活跃的研究领域,并且有许多其他算法根据图形的类型和大小以不同的效率执行相同的操作。有几个领域的应用,特别是遗传学。