代码之家  ›  专栏  ›  技术社区  ›  tevch

基于成员的不同人群

  •  0
  • tevch  · 技术社区  · 14 年前

    我有一群人。我需要移动至少有一个相同成员的组,尽可能远离彼此。

    例子:

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

    如您所见,GroupA和GroupB重叠(它们都包含Nick) 我需要一个算法将组设置为groupa->groupc->groupb

    谢谢你

    2 回复  |  直到 14 年前
        1
  •  2
  •   Larry    14 年前

    这取决于你如何准确地定义问题——有重叠、成本和事情。

    这可能会减少到 Travelling salesman problem --可以将边权重设置为0 if group i j 没有共同点,也有一些功能 f(i,j) 这取决于它们之间的公共项的数量。然后,您需要一个从一个组到最后一个组的列表,访问每个组一次,最小化一些重叠的功能。

    您可能也可以将TSP降低到这个版本(实际上取决于您所说的“尽可能远”的具体含义,关于竞争重叠)。

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

        2
  •  0
  •   Danvil    14 年前

    如果您有任意的组,这个问题就没有一个唯一的甚至有意义的解决方案。例如,请参见:

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