我的数据是人与爱好,有多对多的关系。 每个人至少有一个爱好。
我需要找到一种方法来安排N座位桌周围的所有人,这样每个桌子上的人之间就有最多的共享爱好。并不要求每个桌子在其周围的所有人之间至少有一个共享的爱好。 此外,表格不一定必须完全填写。
非常感谢任何想法。
答案 0 :(得分:2)
首先,这是一个NP难问题 - 例如,任何可以解决问题的算法都可以解决加权图的Longest Path问题,如下所示:
(可能会更简单地减少NP完全问题,但我想这样做会。)
Skiena建议Simulated Annealing,从任何安排开始,并做出随机选择。诀窍是逐渐降低你接受恶化变化的可能性(因此,在开始时你允许它有一些自由来避免局部最优,但逐渐地“冷却”并在某个区域稳定并进行小的改进)。您也可以多次运行它并保持最佳解决方案。
你可以用同样的精神手工编写不太复杂的东西。我猜你的问题实例会很小,所以如果你尝试很多它们(并尝试随机优化它们),你一定会找到好的解决方案。
当然,如果您的问题非常很小,您可以枚举所有排列并找到最佳排列。 (如果您有n
人,请务必确定某人的位置,并仅为n - 1
人生成排列。