我在思考如何定位图的中心点时遇到了一些麻烦;也就是说,图表上的节点最小化了与所有其他节点的最大距离。
例如:
假设我有一个包含3个节点的图表,排成一行(如1-2-3
)。
显然,很容易看出此图的中心点是2
。我怎样才能实现类似的东西呢?
我所知道的唯一算法是BFS / DFS / Prim's /和Kruskal。 Prim和Kruskal的算法并不适用于这种情况。我想我需要在这里使用BFS吗?唯一的问题是,BFS是否会根据您从哪个节点返回不同的顺序?
答案 0 :(得分:3)
对于相当密集的图表:
复杂度O(V ^ 3)(小常数)
如果图表稀疏,您可以使用每个顶点的BFS或Johnson's algorithm
(O(V ^ 2 + V * E),O(V ^ 2 * logV + V * E))
FYE:
0 1 2 //ecc = 2
1 0 1 //ecc = 1 - central point
2 1 0 //ecc = 2
如果您使用树(因为消失的评论中提到了MST) - 有更快的方法:
O(V + E)
答案 1 :(得分:0)
Python模块 NetworkX 提供此类API center(G, e=None)
。有关实现,请参阅其源代码here。
以佛罗伦萨家族图为例,中心节点用红色着色。
import networkx as nx
G = nx.florentine_families_graph()
center_nodes = nx.center(G)