有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}分配是可能的。
我该如何解决这个问题?
答案 0 :(得分:3)
假设您想要"使用"尽可能多的人,那么这个问题基本上是最大双分子图的优化变体,即NP-Hard。
最大的双分子问题:
给定图表
G=(V,E)
,找到两组U1,U2 <= V
- 这样:
- 对于
v,u
中的每个U1
,(v,u)
不在E
中(同样适用于U2
)U1 [intersection] U2 = {}
- 对于遵循规则(1),(2),
的所有其他集U1,U2
|U1|+|U2| >= |U1'| + |U2'|
醇>
在你的情况下,&#34; people&#34;是顶点,如果一个人不喜欢另一个人,那么两个人之间就有一条边。
很容易看出,一个问题的最优解也是另一个问题的最优解。
由于问题是NP-Complete,因此没有已知的有效最优解决方案,但是确实存在一些近似算法,如果你的人数相当少,你可能会使用蛮力(指数时间)解决方案。