最大化人与人之间的互动

时间:2011-11-08 08:18:35

标签: algorithm optimization

有圆桌会议。并且有n个人,其中一些人是彼此的朋友。 如果他是朋友,坐在桌子上的人可以与邻近的人互动。

我们必须找到一种算法来安排n个人在桌子上,以便最大化整体互动。

3 个答案:

答案 0 :(得分:7)

此问题可以缩小为Travelling salesman problem

将每个人视为graph中的节点。在朋友之间移动的成本是0,非朋友之间的移动成本是1.现在的任务是找到成本最低的Hamiltonian cycle。这是NP-hard问题。

greedy algorithm是先将朋友放在最少的人身上,然后尝试将他的两个朋友放在他旁边(如果他有两个以上的朋友,请选择那两个朋友,他们自己的朋友最少) 。继续这样做,如果可能的话,将朋友放在朋友旁边,直到每个人都被安置。这不能保证找到最佳解决方案,但计算速度非常快。

答案 1 :(得分:3)

标记,“等效”表示您已将问题A减少到问题B 从问题B减少到问题A.您已将此问题减少为(非度量标准) )TSP,它告诉我们TSP至少和这个问题一样难。

当且仅当朋友图表具有汉密尔顿循环时,所有人都可以同时坐在朋友旁边,所以这个问题实际上是NP难的。

Mark的减少意味着我们可以使用O(n 2 2 n ) - TSP的时间动态程序来解决这个问题。让x成为桌上最年长的人。 DP计算,对于不包括x的每个非空集S和S中每个可能的人y,最好的解决方案是S - {y}中的人坐在从x到y的逆时针弧上。

答案 2 :(得分:1)

我们可以使用拱门来表示友谊,并且可以用在图中找到闭合路径,触及所有人的问题来代替最大化交互的问题。所有拱门都具有相同的重量,例如1。

如果不可能,我们必须找到触及最大人数的路径,然后从其余人员开始。