根据成员分开的人群

时间:2010-04-14 21:03:37

标签: algorithm

我有一群人。我需要尽可能地移动至少有一个相同成员的组。

示例:

GroupA - John, Bob, Nick
GroupB - Jack, Nick
GroupC - Brian, Alex, Steve

正如您所见,GroupA和GroupB重叠(它们都包含Nick) 我需要一种算法来将组设置为GroupA-> GroupC-> GroupB

谢谢

2 个答案:

答案 0 :(得分:2)

这取决于您如何准确定义问题 - 包含重叠和成本等事项。

这可能会减少到Travelling salesman problem - 如果组ij没有任何共同点,您可以将边权重设置为0,并且某些函数f(i,j)依赖于它们之间的共同项目数量。然后,您需要一个从一个组到最后一个组的列表,每个组访问一次,最小化一些重叠功能。

您可以将TSP降低到这个版本(实际上取决于您对“竞争重叠”的“尽可能最远”的具体说法)。

不幸的是,这是NP-complete,这意味着你应该开始寻找“足够好”的东西。

答案 1 :(得分:0)

如果您有任意组,则此问题没有唯一的甚至是有意义的解决方案。例如见:

GroupA = {Alice, Bob}
GroupB = {Bob, David}
GroupC = {David, Alice}