3.3.2. Алгоритм Дейкстры
Описание алгоритма Дейкстры
Ищем расстояние от нулевой вершины
S = {0}
D[i] = C(0,i) i = 0 … n
While S ≠ V do
выбираем вершину w, которая принадлежит множеству вершин V\S (V без S) с минимальной стоимостью D(w);
S := S + w (добавляем вершину w к множеству S);
для всех вершинdo D(v):=min( D(v), D(w) + C(w,v) ) пересчитываем стоимости всех остальных вершин.
Пример. Рассмотрим работу алгоритма на уже знакомом графе:
Рисунок 3.7 – Исходный граф
Решение. Составим таблицу:
S | w | D(w) | D(1) | D(2) | D(3) | D(4) | |||
0 | Не определенны | 25 | 15 | 7 | 2 | ||||
(0,4) | 4 | 2 | 25* | 15 | 5 | −** | |||
(0,4,3) | 3 | 5 | 25 | 9*** | − | − | |||
(0,4,3,2) | 2 | 9 | 15 | − | − | − | |||
(0,4,3,2,1) | 1 | 15 | − | − | − | − |
Пояснения.
* - 25 = min(25, 2 + ), где С(4,1) = - стоимость переходы напрямую от 4 вершины к первой, так как эти вершины не соединены ребром;
** - стоимость маршрута от нулевой до четвертой вершины не пересчитывается, так как четвертая вершина уже вошла во множество S.
Прочерки в остальных ячейках таблицы также означают отсутствие пересчета маршрутов для соответствующих вершин;
*** - 9 = min(11, 5 + 4), где 4 – вес пути из 3 вершины во вторую.
Комментарии. В алгоритме Дейкстры на каждом шаге
S – растущее множество вершин, для которых уже найдены их подлинные стоимости;
w – добавляемая к множеству S вершина;
D[j] – минимально возможная стоимость маршрута следующего вида:
Рисунок 3.8.
Замечание. Алгоритм Дейкстры работает корректно, так как на каждом шаге стоимость каждой вершины пересчитывается по формуле (3.2), что соответствует выбор из двух маршрутов – старого и нового.
Оценим трудоемкость данного алгоритма.
В процессе реализации алгоритма Дейкстры n раз выполняется цикл While. Внутри цикла While имеется цикл For, в котором нам приходится пересчитывать n-1, n-2, n-3, …, 1 значений. Каждое из них – минимум из двух числе, одно из которых – сумма двух слагаемых.
Следовательно, получаем квадратичную трудоемкость:
T(n) = ((n-1) + (n-2) + … + 1)·2 ≈n2
То есть алгоритм Дейкстры в целом работает на порядок быстрее, чем алгоритм Форда-Беллмана.
Замечание. Алгоритм Дейкстры может работать только с графами, для которых стоимости переезда C(i,j) ≥ 0. Алгоритм Форда-Беллмана справляется с графами и с отрицательными стоимостями переезда, но работает дольше.
- Основные понятия. Справочный материал
- Основные понятия
- 1.2. Справочный материал. Сравнение скорости роста основных функций
- 2 Новые быстрые версии старых алгоритмов
- 2.1. Сортировки массивов
- 2.1.1 Метод прямого выбора (SelectSort)
- 2.1.2 Быстрая сортировка методом двоичных вставок (MergeSort)
- 2.2. Преобразование Фурье (бпф)
- 2.2.1. Дискретное преобразование Фурье
- 2.2.2. Полубыстрое преобразование Фурье (ппф)
- 2.2.3. Быстрое преобразование Фурье (бпф)
- 2.3. Быстрая свертка
- 2.3.1. Понятие свертки
- 2.3.2. Обычный и быстрый алгоритм свертки
- 2.4. Быстрое умножение
- 2.4.1. Быстрое умножение чисел
- 1 Суммирование
- 4 Произведения чисел вдвое меньшей
- 2.4.2. Быстрое умножение матриц
- 2.4.3. Очень быстрое умножение числе (алгоритм Шенхаге – Штрассена)
- 3. Задачи на графах
- 3.1. Справочный материал
- 3.2. Поиск минимального остова в связном неориентированном взвешенном графе
- 3.3. Нахождение кратчайшего расстояния
- 3.3.1. Алгоритм Форда – Беллмана
- 3.3.2. Алгоритм Дейкстры
- 3.4. Нахождение диаметра, радиуса и центра графа
- 3.5. Задача об изоморфизме графов
- 3.6. Задача коммивояжера. Её решение методом ветвей и границ.
- Задачи динамического программирования
- Задачи динамического программирования. Её решение методом динамического программирования.
- 4.2. Задача об оптимальном наборе самолетом скорости и высоты
- 4.3. Задача грабителя (задача о рюкзаке)
- 4.4. Задача о перемножении матриц
- 5 Классы p и np
- 5.1 Машина Тьюринга
- 5.2 Недетерменированные машины Тьюринга(ндмт)
- 5.3 Сводимость. Np-полнота.
- 5.4 Иерархия по сложности. Труднорешаемые задачи.
- Классы сложности.
- 6 Неразрешимые задачи
- 6.1 Новая модель алгоритма вычислений.
- 6.2 Нумерация программ
- 6.3 Неразрешимые проблемы
- 6.4 Теорема об ускорении
- Лабораторные работы
- Расчетно-графическое задание
- Ответы к домашним заданиям