7

我试图找到一组顶点,以最小化它们与加权图上其他顶点的距离。根据粗略的维基百科搜索,我认为这被称为乔丹中心。有什么好的算法可以找到它?

现在,我的计划是获取从给定顶点发出的每个分支的权重列表。权重相对差异最小的顶点将是中心顶点。还有其他想法吗?

我正在使用 Java,但有用的答案不一定需要特定于 Java。

4

3 回答 3

8

我将首先使用Dijkstra 算法(必须为每个顶点运行)来计算所有顶点对之间的最短距离 - 还有一些更有效的算法,例如Floyd-Warshall。然后对于每个顶点 V,您必须找到 Vm - 在从 Dijkstra 算法返回的数据中到任何其他顶点的最大距离。然后,具有最小 Vm 的顶点是图形中心的顶点。伪代码:

int n = number of verticles;
int[][] D = RunDijkstraOrWarshall()
// D[a,b] = length of shortest path from a to b
int[] Vm = new int[n];
for(int i=0; i<n i++)
{
   Vm[i] = 0
   for(int j=0; j<n; j++) 
   {
     if (Vm[i] < D[i,j]) Vm[i] = D[i,j];
   }  
}

minVm = int.Max;
for(int i=0; i<n ;i++)
{
  if (minVm < Vm[i]) minVm = Vm[i];
}

for(int i=0; i<n ;i++)
{
  if (Vm[i] == minVm)
  {
     // graph center contans i
  }

}

于 2009-11-27T08:38:08.653 回答
1

本硕士论文提出了三种图中心问题的算法:图中心问题的分布式算法

于 2009-11-27T08:37:51.993 回答
0

从 JGraphT 版本 1.1.0 开始,您可以简单地使用方法GraphMeasurer.getGraphCenter(). 底层代码使用最短路径方法。用户可以根据图形的某些特征(例如稀疏/密集/...)来选择使用哪种方法。

于 2017-09-08T11:04:43.353 回答