【问题标题】:Distance between nodes LightGraphs julia节点之间的距离 LightGraphs julia
【发布时间】:2020-11-30 22:06:43
【问题描述】:

我想知道如何计算给定节点对之间的距离,比如节点“i”和“j” 这是具有 100 个节点和连接性 3 的随机正则图中的节点 2 和 12 的最小示例

julia> using LightGraphs
julia> L = random_regular_graph(100, 3) 
julia> paths= dijkstra_shortest_paths(L, 2)
julia> distances = paths.dists
julia> d = distances[12]

这种方法的问题是我必须计算所有节点和我的节点 2 之间的距离才能知道我感兴趣的两个节点之间的距离

【问题讨论】:

    标签: graph julia distance


    【解决方案1】:

    如果您只需要从特定来源到特定目的地的最短路径,请考虑使用A*

    julia> g = CycleGraph(10)
    {10, 10} undirected simple Int64 graph
    
    julia> a_star(g, 1, 8)
    3-element Array{LightGraphs.SimpleGraphs.SimpleEdge{Int64},1}:
     Edge 1 => 10
     Edge 10 => 9
     Edge 9 => 8
    

    如果您只对(未加权,单位)距离感兴趣,请使用gdistances

    julia> gdistances(g, 1)[8]
    3
    

    在任何情况下,都不要从DijkstraResult 访问.dists 字段。使用dists() 方法作为访问器。 LightGraphs 结构的内部不打算直接使用。

    【讨论】:

    • 谢谢@sbromberger!我认为我正在寻找的解决方案是:length(a_star(g, 1, 8))。不过,gdistances(g, 1)[8] 似乎效率更高
    • 使用gdistances 比使用a_stardijkstra_shortest_paths 更有效。原因是通过使用单位权重,我们可以简单地使用优化的基于边界的 BFS 来计算距离。这节省了周期和分配,并且是 BFS 最快的实现之一。 (参见,例如,Benchmark of popular graph/network packages v2
    猜你喜欢
    • 2018-10-04
    • 1970-01-01
    • 2020-05-29
    • 2019-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多