2014-05-05 3 views
3

В чем разница между алгоритмом NetworkX all shortest paths и алгоритмом scipy floyd warshall? Есть ли какие-то причины предпочесть друг другу? Что быстрее?NetworkX vs Scipy все алгоритмы кратчайшего пути

+0

Согласно источнику для NetworkX, они используют алгоритм, найденный в R. Sedgewick, «Алгоритмы в C, часть 5: Алгоритмы графа», Addison Wesley Professional, 3-е изд., 2001. https: // github. com/networkx/networkx/blob/7d9682a07dcae30acab3c4841e33d31f727a3fb2/networkx/algorithmms/simple_paths.py – drum

+0

Я сравнивал scipy и networkx. Тестирование на случайной плотной матрице 'numpy.random.exponential (size = (1000,1000))' Я нашел 'scipy.sparse.csgraph.floyd_warshall()' примерно в 10 раз быстрее, чем 'networkx.algorithms.floyd_warshall_numpy'. Другая функция 'networkx.algorithms.floyd_warshall' не завершилась в течение разумного периода времени. –

ответ

2

(для тех, кто не знает алгоритм NumPy Флойда-Воршалла доступен в NetworkX)

NetworkX description из floyd_warshall_numpy состояний:

алгоритм Флойда подходит для нахождения кратчайших путей в плотной графики или графики с отрицательными весами, когда алгоритм Дейкстры терпит неудачу. Этот алгоритм может по-прежнему терпеть неудачу, если есть отрицательные циклы. Он имеет время работы O (n^3) с пробегом O (n^2).

Networkx single_source_shortest_path работает лучше на разреженных графиках. Вы должны знать, что если вы используете различные алгоритмы «shortest_path», они игнорируют вес границ. Различные алгоритмы Дейкстры включают в себя веса ребер.

Описание: here.

Смежные вопросы