问题描述
我正在使用networkx和single_source_dijkstra在加权图上计算从一个源到一个目标的最短路径。
但是,我遇到了内存问题。
有没有更有效的方法来计算? Networkx的替代品?查看我的代码:
cost,shortestpath = nx.single_source_dijkstra(graph,startpointcoords,secondptcoords,cutoff=10000000)
解决方法
显然,networkx的A *算法效率更高。然后,我使用发布的dijkstra算法计算所得路径的长度。
,也许尝试使用其他算法?您的图可能有太多的顶点,但边却很少,在这种情况下,您可以在networkX中使用Bellman-Ford 1
1
1
...
link
另一种解决方案是使用另一个python包,例如this question的答案具有不同的可能库。
最后一个解决方案是实现自己的算法!也许是Gabow的算法,但是您必须非常高效,例如通过将numpy与numba结合使用
,双向dijkstra算法应产生重大改进。这是the documentation。
一个很好的类比是在3D中:将一个气球放置在点x处并将其展开直到到达点y。您放入的空气量与它们之间的距离的立方成正比。现在,在每个点放一个气球,使两个气球充气,直到它们接触为止。合并的空气量仅为原始空气的1/4。在更高的维度上(与大多数网络更接近),减少的幅度更大。