首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >把人分成两个小组,不要把彼此讨厌的人分成同一个小组

把人分成两个小组,不要把彼此讨厌的人分成同一个小组
EN

Stack Overflow用户
提问于 2015-10-24 21:03:52
回答 1查看 469关注 0票数 2

有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}赋值是可能的。

我该如何解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2015-10-24 21:31:50

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

最大二分子图问题:

对于给定的图G=(V,E),找到两个集合U1,U2 <= V --使得:

对于U1中的每个集合,(v,u)不在E中(同样地,对于遵循规则(1)、(2)、|U1|+|U2| >= |U1'| + |U2'|的所有其他集合,U1中的(v,u)不在E

在您的例子中," people“是顶点,如果一个人不喜欢另一个人,那么两个人之间就会有一条边。

很容易看出,一个问题的最优解也是另一个问题的最优解。

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33318528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档