用于安置具有最多共享爱好的人的算法

时间:2010-08-07 21:31:15

标签: algorithm

我的数据是人与爱好,有多对多的关系。 每个人至少有一个爱好。

我需要找到一种方法来安排N座位桌周围的所有人,这样每个桌子上的人之间就有最多的共享爱好。并不要求每个桌子在其周围的所有人之间至少有一个共享的爱好。 此外,表格不一定必须完全填写。

非常感谢任何想法。

1 个答案:

答案 0 :(得分:2)

首先,这是一个NP难问题 - 例如,任何可以解决问题的算法都可以解决加权图的Longest Path问题,如下所示:

  • 每个图形顶点都是一个人
  • 图表的任何边缘都可以通过创建爱好来编码,只由边缘的两个顶点/人共享

(可能会更简单地减少NP完全问题,但我想这样做会。)

Skiena建议Simulated Annealing,从任何安排开始,并做出随机选择。诀窍是逐渐降低你接受恶化变化的可能性(因此,在开始时你允许它有一些自由来避免局部最优,但逐渐地“冷却”并在某个区域稳定并进行小的改进)。您也可以多次运行它并保持最佳解决方案。

你可以用同样的精神手工编写不太复杂的东西。我猜你的问题实例会很小,所以如果你尝试很多它们(并尝试随机优化它们),你一定会找到好的解决方案。

当然,如果您的问题非常很小,您可以枚举所有排列并找到最佳排列。 (如果您有n人,请务必确定某人的位置,并仅为n - 1人生成排列。