在图中找到具有最大距离/距离的N个节点

时间:2015-04-23 11:39:47

标签: java algorithm graph cluster-computing maximize

给定具有N个节点(数千)的图,我需要找到K个节点,以便K的每对(K1,K2)之间的平均路径长度最大化。所以基本上,我想把它们放在尽可能远的地方。

我将使用哪种算法/如何在不必尝试K的单个组合的情况下对其进行编程?

同样作为扩展:如果我现在有N个节点,我需要在图中放置2组节点K和L,使每对(L,K)之间的平均路径长度最大化,我该怎么做此?

我目前的尝试是只做几个随机放置,然后计算K和L对之间的平均路径长度,但这个计算开始花费很多时间,所以我不想花费那么多时间来评估随机选择的组合。我宁愿花一些时间来获得真实最普及的组合。

有没有针对此的算法?

1 个答案:

答案 0 :(得分:4)

坏消息是,通过独立集的减少,这个问题是NP难的。 (假设单位权重。添加一个连接到所有其他顶点的新顶点;然后我们正在寻找平均距离为2的K的集合。)

如果您确定要获得一个确切的解决方案(而且我不确定您不应该这样做),那么我尝试分支绑定,使用node is / is不是K作为分支决策和粗略界限之一(给定K的子集,找到最大化它们之间的距离和到子集的距离的适当组合的两个节点,然后将界限设置为适当的加权平均值结合已知的节点间距离。)

如果上面的确切算法在千位节点图上窒息,因为Evgeny担心它会,那么使用farthest-point clustering(链接转到设施位置上的维基百科页面,描述FPC)将图形切割为可管理的大小,产生一个希望小的近似误差。