【问题标题】:NetworkX: Djikstra's shortest path vs Brandes algorithm for betweeness centralityNetworkX:Dijkstra 的最短路径与 Brandes 算法的中介中心性
【发布时间】:2017-03-24 13:32:34
【问题描述】:

我有几个 Python 脚本可以计算各种网络度量。

给定一个图 (G​​),第一个脚本计算从每个节点到所有其他节点的平均最短路径,并将其存储在 Nx1 矩阵 (L) 中。来自NetworkX Python 库的 Djikstra 算法的实现用于此:

for i in range(num_nodes):
    for j in range(num_nodes):
        dj_path_matrix[i,j] = nx.dijkstra_path_length(G, i, j)

L = np.sum(dj_path_matrix, axis=0)/(num_nodes - 1)

给定相同的图 (G),第二个脚本使用 NetworkX 库中 Brande 算法的实现来计算中介中心性并将其存储在 Nx1 矩阵 (BC) 中:

BC = nx.betweenness_centrality(G, normalized=True)

我的问题是:与 BC 相比,为什么计算 L 需要这么长时间?

按照我的理解,节点的 BC 是衡量最短路径通过该节点的频率。因此,要计算 BC,您肯定需要计算图中所有可能的最短路径。那么,当然,BC 至少应该和 L 一样长?使用我的脚本,给定相同的图表,计算 BC 需要几秒钟,但计算 L 最多需要半小时。

【问题讨论】:

    标签: graph-theory networkx


    【解决方案1】:

    如果我要求您找到从给定节点 u 到图中每个其他节点的最短路径,您可能不会选择您在这里所拥有的技术。如果我们同时完成所有这些路径长度,则可以更有效地计算所有这些路径长度。我们找到所有长度为 1 的路径。然后我们找到所有长度为 2 且不重新访问先前找到的节点的路径。然后是长度为 3 的所有路径,等等。

    这将比计算从u 到一个节点的路径,然后重新开始并找到到下一个节点的路径要高效得多。中介中心性的计算方法是一次性查找uG 中所有节点之间的所有最短路径,而不是依次查找每个节点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      相关资源
      最近更新 更多