Вы находитесь на странице: 1из 2

Каковы различия между алгоритмами Беллмана Форда и Дейкстры?

Алгоритм Беллмана Форда


Как и другие проблемы динамического программирования, алгоритм
вычисляет кратчайшие пути снизу вверх. Сначала он рассчитывает
кратчайшие расстояния, которые имеют не более одного ребра на пути.
Затем он вычисляет кратчайшие пути с не более чем 2 ребрами и так далее.
После i-й итерации внешнего цикла вычисляются кратчайшие пути с не более
чем i ребрами. Там может быть максимум | V | - 1 ребро в любом простом
пути, поэтому внешний цикл выполняет | v | - 1 раз. Идея состоит в том, что
при условии отсутствия цикла с отрицательным весом, если мы вычислили
кратчайшие пути с не более чем i ребрами, то итерация по всем ребрам
гарантирует получение кратчайшего пути с не более (i + 1) ребрами.
Алгоритм Дейкстры
Алгоритм Дейкстры очень похож на алгоритм Прима для минимального
остовного дерева. Как и MST Prim, мы генерируем SPT (дерево кратчайшего
пути) с заданным источником в качестве root. Мы поддерживаем два
набора: один набор содержит вершины, включенные в дерево кратчайшего
пути, другой набор включает вершины, еще не включенные в дерево
кратчайшего пути. На каждом шаге алгоритма мы находим вершину, которая
находится в другом наборе (набор еще не включен) и имеет минимальное
расстояние от источника.

Различия между алгоритмом Беллмана Форда и Дейкстры:


Алгоритм Беллмана Форда и алгоритм Дейкстры оба являются алгоритмом
кратчайшего пути из одного источника, то есть оба определяют кратчайшее
расстояние каждой вершины графа от вершины одного источника. Однако
между ними есть некоторые ключевые различия. Мы придерживаемся
подхода динамического программирования в алгоритме Беллмана Форда и
подхода Жадности в алгоритме Дейкстры. Давайте посмотрим на другие
основные различия между этими двумя методами:
BELLMAN FORD’S ALGORITHM DIJKSTRA’S ALGORITHM

Алгоритм Беллмана Форда работает Dijkstra’s Algorithm не работает при

при отрицательном весе, он также отрицательном весе.

обнаруживает отрицательный
BELLMAN FORD’S ALGORITHM DIJKSTRA’S ALGORITHM

весовой цикл.

Результат содержит вершины, Результат содержит вершины,

которые содержат информацию о содержащие всю информацию о

других вершинах, с которыми они сети, а не только вершины, с

связаны. которыми они связаны.

Это не может быть легко

Это может быть легко реализовано реализовано распределенным

распределенным способом. способом.

Это занимает больше времени, чем


алгоритм Беллмана Форда.
Это занимает сравнительно меньше

времени.

Подход динамического

программирования используется для Жадный подход принят для

реализации алгоритма. реализации алгоритма.