我的数据是关于人和爱好的,有很多对很多的关系。
每个人至少有一个爱好。
我需要找到一种方法来坐在座位周围的所有人,这样在每个桌子上的人之间有最多的共同爱好。不要求每张桌子周围的人至少有一个共同的爱好。
此外,表格不一定要完全填满。
任何想法都将非常感谢。

最佳答案

首先,这是一个np难问题-例如,任何可以解决您的问题的算法,都可以解决加权图的Longest Path问题,如下所示:
每个图顶点是一个人
图的任何边都可以通过创建一个新爱好来编码,该爱好只由边的两个顶点/人共享
(对np完全问题可能有一个更简单的简化,但我想这可以做到)。
斯基纳建议,从任何安排开始,随机选择。诀窍是逐渐降低接受恶化变化的概率(因此,在开始时,您允许它有一些自由来避免局部最优,但逐渐地它“冷却”并在某些区域稳定下来并进行小的改进)。您还可以多次运行它并保留最佳解决方案。
你也许可以用同样的精神手工编写一些不那么复杂的代码。我猜你的问题实例会很小,所以你一定会找到很好的解决方案,如果你尝试其中的许多(并尝试随机优化它们)。
当然,如果你的问题很小,你可以列举所有的排列,找到最佳的排列。(如果您有n人,请确保您确定了某人的位置,并且只生成n - 1人的排列)。

关于algorithm - 兴趣爱好最多的人的座位算法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3432116/

10-12 16:03