2014-05-05 63 views
3

NetworkX所有最短路徑算法和scipy floyd warshall算法之間有什麼區別?有沒有什麼理由可以相互比較?哪個最快?NetworkX vs Scipy所有最短路徑算法

+0

根據NetworkX的來源,他們正在使用R. Sedgewick的「Algorithm in C,Part 5:Graph Algorithms」,Addison Wesley Professional,3rd ed。,2001. https:// github。 com/networkx/networkx/blob/7d9682a07dcae30acab3c4841e33d31f727a3fb2/networkx/algorithms/simple_paths.py – drum

+0

我比較了scipy和networkx。測試一個隨機密集矩陣'numpy.random.exponential(size =(1000,1000))'我發現'scipy.sparse.csgraph.floyd_warshall()'比'networkx.algorithms.floyd_warshall_numpy'快10倍。其他函數'networkx.algorithms.floyd_warshall'沒有在合理的時間內完成。 –

回答

2

(對於那些誰不知道numpy的Floyd-Warshall算法是networkx可用)

floyd_warshall_numpy狀態的networkx description

弗洛伊德的算法適合發現在茂密的最短路徑Dijkstra算法失敗時負權重的圖形或圖形。如果存在負循環,則該算法仍可能失敗。它的運行時間爲O(n^3),運行空間爲O(n^2)。

networkx single_source_shortest_path在稀疏圖上效果更好。你應該知道,如果你使用各種「最短路徑」算法,這些忽略邊權重。各種Dijkstra算法都包含邊權重。

還有更多說明here