【发布时间】:2016-08-01 19:38:16
【问题描述】:
假设我有一个由NxN 节点组成的常规网络。两个节点之间的最短路径是从源节点到达一个目标节点所需的最小跳数。现在,每条最短路径都会沿途经过许多节点。
我的目标:对于网络中的每个节点,我想计算通过特定节点的最短路径的数量,并将该数字保存在 dict 中。
在这个小例子中,节点 B 有 4 条最短路径通过它:
A -> B、A -> C、C -> B、C -> A。 我希望能够为通用图中的每个节点计算这个数字。
我知道我可以使用nx.betweenness_centrality(),但这会给我一个分子(即,对于每个节点,我想要的)除以一个分母,该分母存储两个节点之间所有可能的最短路径。我什至访问了源代码,但我无法弄清楚除法是在哪里进行的。
我知道这是一个冗长的问题,但我没有其他方法来解释我的问题。感谢任何愿意提供帮助的人。
编辑
这是nx.betweenness_centrality() 的源代码。我的图表是无向的。目前尚不清楚哪条线路承载我上面介绍的部门:
def betweenness_centrality(G, k=None, normalized=True, weight=None,
endpoints=False,
seed=None): #G is the graph
betweenness = dict.fromkeys(G, 0.0)
if k is None:
nodes = G
else:
random.seed(seed)
nodes = random.sample(G.nodes(), k)
for s in nodes:
# single source shortest paths
if weight is None: # use BFS
S, P, sigma = _single_source_shortest_path_basic(G, s)
else: # use Dijkstra's algorithm
S, P, sigma = _single_source_dijkstra_path_basic(G, s, weight)
# accumulation
if endpoints:
betweenness = _accumulate_endpoints(betweenness, S, P, sigma, s)
else:
betweenness = _accumulate_basic(betweenness, S, P, sigma, s)
# rescaling
betweenness = _rescale(betweenness, len(G),
normalized=normalized,
directed=G.is_directed(),
k=k)
return betweenness #Returns a dict with the node ID as a key and the value
【问题讨论】:
-
你能链接到源代码或指向一些模块/行号吗?
-
为了更清楚,我将包含源代码。
标签: python networkx shortest-path