分开断开的二分图的顶点

时间:2011-04-21 10:56:51

标签: algorithm graph bipartite

我给出了一个包含许多单独组件的图表。每个组件都是二分的。如何将顶点分布为两组AB,以使两组之间的差异最小?

示例:

1:1 -> 2 ->3 -> 4 -> 5

2:6 -> 7 -> 8

最佳解决方案是

A = {1, 3, 5, 7}

B = {2, 4 ,6, 8}

另一个(非最佳)解决方案是

A = {1, 3, 5, 6, 8}

B = {2, 4, 7}

当图表有许多单独的二分组件时,你如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

这是Partition Problem,略带伪装。对于每个二分组件,取独立集中元素数量的差异(实际上,它是绝对值。)这是分区问题的输入。对于你的例子,它将是[1,1](从(3-2)和(2-1)。)

现在将解决方案转换回图表。对于编号以集合S1结尾的每个图表,将其较大的集合放在A(以及B中的较小集合)中,对于编号以S2结尾的每个图表,将其较小的集合放在{{1}中}(和A中的较大者。)在您的示例中,解决方案是S1 = [1]和S2 = [1]。回到关联的图表,您可以从示例中获得最佳解决方案。

答案 1 :(得分:2)

这是分区问题的变体,它是NP完成的。

对于每个组件,找到两边的顶点数,比如[m,n],然后你必须决定是将m放在池A还是池B中,这样池A中术语总和之间的差异并且在B池中是最小的。

现有技术通过动态编程以及IPP的变化来解决这类问题。但是,如果有大量的组件,那么你就会注定NP的完整性。