【问题标题】:All-pairs shortest paths, tie breaking全对最短路径,平局
【发布时间】:2012-07-12 02:21:51
【问题描述】:

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

   A
  / \
B    C
  \ /
   D

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

随机决胜局(问题)

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

有谁知道如何解决这个问题,还是我错过了什么?

【问题讨论】:

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

标签: algorithm graph shortest-path tie


【解决方案1】:

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

A Faster Algorithm for Betweenness Centrality

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多