【发布时间】: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