将人分成两个团队,不要指派彼此讨厌的团队

时间:2015-10-24 13:03:52

标签: algorithm

有n个人,并希望将他们分配给两个队。 但有人互相讨厌,所以不想指派同一个团队。 我希望最大限度地减小团队成员的数量。

例如,有5个人和 1-2,2-3,3-1,4-5彼此讨厌。 然后{1,5},{2,4}分配是可能的。

和5个人和 1-2,1-3,1-4,1-5彼此讨厌。 然后{2,3},{4,5}分配是可能的。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

假设您想要"使用"尽可能多的人,那么这个问题基本上是最大双分子图的优化变体,即NP-Hard

最大的双分子问题:

  

给定图表G=(V,E),找到两组U1,U2 <= V - 这样:

     
      
  1. 对于v,u中的每个U1(v,u)不在E中(同样适用于U2
  2.   
  3. U1 [intersection] U2 = {}
  4.   
  5. 对于遵循规则(1),(2),U1,U2
  6. 的所有其他集|U1|+|U2| >= |U1'| + |U2'|   

在你的情况下,&#34; people&#34;是顶点,如果一个人不喜欢另一个人,那么两个人之间就有一条边。
很容易看出,一个问题的最优解也是另一个问题的最优解。

由于问题是NP-Complete,因此没有已知的有效最优解决方案,但是确实存在一些近似算法,如果你的人数相当少,你可能会使用蛮力(指数时间)解决方案。