带有需求的分组算法

时间:2014-10-06 01:28:48

标签: algorithm grouping

所以我正在编写一个算法,当给出一组来自不同地方的人时,它会根据一些参数将它们组织成三个一组:

  1. 一组中没有两个人来自同一个地方
  2. 小组中没有两个人见面
  3. 小组中的每个人都可以在同一天见面
  4. 不超过一个人未满18岁
  5. 我的数据结构中包含上述所有必需先决条件的变量。我想知道是否有一个很好的方法来解决这个问题?目前我正在使用Gale-Shapely算法的变体(稳定婚姻问题的解决方案)。这个解决方案效果相对较好,但更多时候不是这样,它需要我进入并对最终组进行一些小的调整。

    任何人都有任何想法/建议?

    我提前感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

这是一个graph partitioning问题,因此它几乎可以肯定是NP-Hard(当你只有一个约束时,问题可以在多项式时间内解决 - 这类似于稳定的婚姻问题 - 但是当你有多个限制因素时,复杂性就会提高。)解决这些问题的一个好方法是应用一个启发式(你正在使用Gale-Shapely算法),然后解决与本地回溯搜索的任何冲突(听起来你现在正在手工做) 。我的建议是保持你当前的启发式,如果它似乎对你有用,并添加一个自动的本地回溯算法来解决启发式引起的任何冲突(例如,如果你有一个有两个人的团队谁18岁以下,然后将这些人中的一个与18岁以上的人交换,并且不违反其他三个限制;如果不可能,则选择18岁以上违反最少限制的人,然后交换从群组中取出其他人以满足现在违反的约束;在N次迭代失败后,算法会抛出手并请求人为干预)