Реализация кратчайшего пути из одного источника: приоритет по сравнению с очередью FIFO

В зависимости от специфики проблемы в контексте задачи о кратчайшем пути с одним источником обычно упоминаются два алгоритма: алгоритм Дейкстры и алгоритм Беллмана-Форда. Алгоритм Дейкстры работает с положительными весами ребер, тогда как алгоритм Беллмана-Форда является обобщением, также допускающим отрицательные веса ребер.

Как реализовано в книге Седжвика «Алгоритмы» (4-е изд.), Алгоритм Дейкстры основан на очереди с приоритетами, тогда как алгоритм Беллмана-Форда основан на простой очереди FIFO. Однако мне не кажется, что для реализации алгоритмов потребуется какой-либо выбор из двух типов очереди. С таким же успехом можно реализовать алгоритм Дейкстры с очередью FIFO и алгоритм Беллмана-Форда с очередью с приоритетом.

По какой причине алгоритм Дейкстры обычно реализуется с приоритетной очередью, а алгоритм Беллмана-Форда с другой стороны - с очередью FIFO? Есть ли функциональная причина или это для оптимизации времени выполнения?


person madison54    schedule 18.04.2015    source источник


Ответы (1)


Алгоритм Дейкстры основан на очереди с приоритетами

Не обязательно. Вы также можете реализовать алгоритм Дейкстры без очереди с приоритетами. Но в этом случае вы должны выбрать наименьшее значение после поиска из вашего массива списка узлов, который вы в настоящее время обрабатываете.

Алгоритм Беллмана-Форда основан на простой очереди FIFO.

Вы можете легко реализовать алгоритм Беллмана-Форда без какой-либо очереди. вот пример реализации. https://kt48.wordpress.com/2015/06/16/bellman-ford-algorithm-c-implementation/

В чем причина того, что алгоритм Дейкстры обычно реализуется с приоритетной очередью, а алгоритм Беллмана-Форда с другой стороны - с очередью FIFO? Есть ли функциональная причина или это для оптимизации времени выполнения?

Да, это оптимизация времени выполнения.

person Community    schedule 16.06.2015