Algorithm 所有对最短路径,断开连接

Algorithm 所有对最短路径,断开连接,algorithm,graph,shortest-path,tie,Algorithm,Graph,Shortest Path,Tie,我正在创建一个程序,该程序将计算未加权图中所有节点的介数中心。为此,我必须找到ASSSP(所有单源最短路径)。在创建程序的过程中,我意识到最终我会有联系(从源到目标的距离相同,但路径不同)。这就引出了这个问题。我应该如何解决这些关系?如果我使用随机联系断路器,那么对于相同的输入,中间性中心性的每个输出可能略有不同。让我做一个小的示例图: A / \ B C \ / D 现在让我们假设A节点是我们希望找到ASSSP的源。可以清楚地看到,存在两条路径(A->B->D和A-

我正在创建一个程序,该程序将计算未加权图中所有节点的介数中心。为此,我必须找到ASSSP(所有单源最短路径)。在创建程序的过程中,我意识到最终我会有联系(从源到目标的距离相同,但路径不同)。这就引出了这个问题。我应该如何解决这些关系?如果我使用随机联系断路器,那么对于相同的输入,中间性中心性的每个输出可能略有不同。让我做一个小的示例图:

   A
  / \
B    C
  \ /
   D
现在让我们假设A节点是我们希望找到ASSSP的源。可以清楚地看到,存在两条路径(A->B->D和A->C->D),它们的长度相同,都是最短的路径。现在我应该选择哪一个,在什么条件下

随机连接断路器(问题)

如果我使用随机连接断路器,就像第一个被发现的一样,被标记为最短路径(程序是分布式的,所以这个解决方案将以随机方式工作)。然后我会遇到中间性中心性的问题,因为节点B和C的值会有所不同;取决于标记为最短路径的路径


是否有人知道如何解决这个问题,或者我只是遗漏了什么?

是的,SSSP,或单源最短路径,是计算机科学中一个非常常见的问题。一个标准的做法是,你遇到的第一条路比其他同样距离的路要短

例如,在您的示例中,如果在您的算法中,您在
A->B->D
之前处理
A->C->D
,那么
A->B->D
将是最短路径


如果事情还不清楚,我相信Dijkstra的算法就是你想要的。

很大程度上是因为你注意到的问题,中间性中心性实际上不是通过检查源和目标之间的单一路径来计算的,而是通过计算最短路径的数量来计算的。为此,您需要修改一个可适用的最短路径算法,例如Floyd–Warshall算法或Johnson算法。

要正确计算介数中心度,必须考虑图中的每个最短路径。如果两个节点A和B之间有k条最短路径,则每条最短路径将占路径所通过节点的总介数的1/k。通常,您不应该通过实际查找(并存储)网络中的所有最短路径来计算介数中心性;有关更有效的算法,请参阅以下文章:


只是确保:您确实意识到,最短路径的数量可能是指数级的,因此查找所有最短路径的成本很高-我说的对吗?