8.7.3. Алгоритм Дейкстры
Алгоритм Дейкстры находит кратчайший путь между двумя данными вершинами в (ор)графе, если длины дуг неотрицательны.
Алгоритм 8.4. алгоритм Дейкстры
Вход: орграф G(V,E), заданный матрицей длин дуг С : array [l..p,l..p] of real; s и t -
вершины графа. Выход: векторы Т : array [l..p] of real; и Я : array [l..p] of O..p. Если вершина v лежит на
кратчайшем пути от s к t, то T[v] — длина кратчайшего пути от s к v; H(v] — вершина, непосредственно предшествующая v на кратчайшем пути. for v from I to p do
T[v]: = oo { кратчайший путь неизвестен }
X[v] : = 0 { все вершины не отмечены } end for
H[s]: = 0 { s ничего не предшествует } T[s]: = 0 { кратчайший путь имеет длину 0 ... }
X[s] : = !{... и он известен } v : = s { текущая вершина } М: { обновление пометок } for и € P(v) do
if X[u\ = 0 & Т{и] > T[v] + C[v, и] then
Т[и] : = T[v] + C[v,u] { найден более короткий путь из s в и через v } Н[и] :=v{ запоминаем его }
end if end for t: = oo;u: = 0
{ поиск конца кратчайшего пути } for и from I to p do
if X[u] = 0&2>] < £ then
v : = и; t: = Т [и] { вершина v заканчивает кратчайший путь из S}
end if end for if v = 0 then
stop { нет пути из s в t} end if if v = t then
stop { найден кратчайший путь из s в t} end if
X[v]: = 1 { найден кратчайший путь из s в v} goto M
ЗАМЕЧАНИЕ -
Для применимости алгоритма Дейкстры достаточно выполнения более слабого условия, [ положительность длин дуг. А именно, достаточно выполнения неравенства треуголъ-
. Vu, v, w е V d(u, v) ^ d(u, w) + d(w, v), которое, очевидно, выполняется, если длины дуг неотрицательны.
обоснование
Для доказательства корректности алгоритма Дейкстры достаточно заметить, что каждом выполнении тела цикла, начинающегося меткой М в качестве v мьзуетея вершина, для которой известен кратчайший путь из вершины s •ими словами, если X[v] = 1, то 7>] = d(s,v), и все вершины на пути (,,») ределяемом вектором Я, обладают тем же свойством, то есть
\/u T[u] = 1 =*. T[u] = d(s,u)bT[H[u]] = 1.
Действительно (по индукции), первый раз в качестве v используется вершина s я которой кратчайший путь пустой и имеет длину 0 (непустые пути не мо-ггь короче, потому что длины дуг неотрицательны) Пусть ТЫ = d(s u] * всех ранее помеченных вершин и. Рассмотрим вновь помеченную вершину v, которая выбрана из условия T[v] = min 2>]. Заметим, что если известен
Л ['ttj ^^0 путь, проходящий через помеченные вершины, то тем самым известен кратчай ший путь. Допустим (от противного), что T[v] > d(s,v), то есть найденный путь, ведущий из s в v, не является кратчайшим. Тогда на этом пути должны быть непомеченные вершины. Рассмотрим первую вершину w на этом пути, такую что T[w] = 0. Имеем: T[w] = d(s,w) ^ d(s,v) < T[v], что противоречит выбору вершиныv.
коментарии
Изложение центрального результата этой главы — теоремы Менгера 8.3.2 и сопутствующего материала — в основном следует в [23].
Алгоритм нахождения максимального потока в сети заимствован из [11] с небольшими модификациям Алгоритм выделения компонент сильной связности приведен в [5], где имеется весьма полный обзор различных алгоритмов обхода и анализа графов, применяемых в программировании. Алгоритмы Флойда и Дейкстры нахождения кратчайших путей принадлежит к числу классических общеизвестных алгоритмов, описание которых можно найти в большинстве учебников по дискретной математике, в частности, в [14, 11].
Упражнения
Доказать, что если 5(G) > (р - 1)/2, то граф G связен.
Доказать вторую теорему подраздела 8.2.1.
Как может измениться количество компонент сильной связности орграфа при добавлении к нему одной дуги?
Пусть в графе G(V,E) заданы вероятности успешного прохождения дуг, О ^ P[v] ^ 1. Вероятность успешного прохождения пути определяется как произведение вероятностей составляющих его дуг. Построить алгоритм на хождения наиболее надежного (то есть имеющего наибольшую вероятность) пути от вершины s к вершине t.
- Иркутский государственный технический университет
- 1. Определения графов
- 7.4.5. Массив дуг
- 8.4.2. Трансверсаль
- 8.5.4. Алгоритм нахождения максимального потока
- 8.6.3. Выделение компонент сильной связности
- 8.7.1. Длина дуг
- 8.7.2. Алгоритм Флойда
- 8.7.3. Алгоритм Дейкстры
- Глава 9 Деревья
- 9.1. Свободные деревья
- 9.1.1. Определения
- 9.1 .2. Основные свойства деревьев
- 9.2. Ориентированные, упорядоченные и бинарные деревья
- 9.2.1. Ориентированные деревья
- 9.2.2. Эквивалентное определение ордерева
- 9.2.3. Упорядоченные деревья
- 9.2.4. Бинарные деревья
- 9.3. Представление деревьев в эвм
- 9.3.1. Представление свободных, ориентированных и упорядоченных деревьев
- 9.3.2. Представление бинарных деревьев
- 9.3.3. Обходы бинарных деревьев
- 9.3.4. Алгоритм симметричного обхода бинарного дерева
- 9.4. Деревья сортировки
- 9.4.1. Ассоциативная память
- 9.4.2. Способы реализации ассоциативной памяти
- 9.4.3. Алгоритм бинарного (двоичного) поиска
- 9.4.4. Алгоритм поиска в дереве сортировки
- 9.4.5. Алгоритм вставки в дерево сортировки
- 9.4.6. Алгоритм удаления из дерева сортировки
- 9.4.7. Вспомогательные алгоритмы для дерева сортировки
- 9.4.8. Сравнение представлений ассоциативной памяти
- 9.4.9. Выровненные деревья
- 9.4.10. Сбалансированные деревья
- 9.5. Кратчайший остов
- 9.5.1. Определения
- 9.5.2. Схема алгоритма построения кратчайшего остова
- 9.5.3. Алгоритм Краскала
- Глава 10 Циклы
- 10.1. Фундаментальные циклы и разрезы
- 10.1.1. Циклы и коциклы
- 10.1.2. Независимые множества циклов и коциклов
- 10.1.3. Циклический и коциклический ранг
- 10.2. Эйлеровы циклы
- 10.2.1. Эйлеровы графы
- 10.2.2. Алгоритм построения эйлерова цикла в эйлеровом графе
- 10.2.3. Оценка числа эйлеровых графов
- 10.3. Гамильтоновы циклы
- 10.3.1. Гамильтоновы графы
- 10.3.2. Задача коммивояжера
- Глава 11 Независимость и покрытия
- 11.1. Независимые и покрывающие множества
- 11.1.1. Покрывающие множества вершин и ребер
- 11.1.2. Независимые множества вершин и ребер
- 11.1.3. Связь чисел независимости и покрытий
- 11.2. Построение независимых множеств вершин
- 11.2.1. Постановка задачи отыскания наибольшего независимого множества вершин
- 11.2.2. Поиск с возвратами
- 11.2.3. Улучшенный перебор
- 11.2.4. Алгоритм построения максимальных независимых множеств вершин
- 11.3. Доминирующие множества
- 11.3.1. Определения
- 11.3.2. Доминирование и независимость
- 11.3.3. Задача о наименьшем покрытии
- 11.3.4. Эквивалентные формулировки знп
- 11.3.5. Связь знп с другими задачами
- Глава 12 Раскраска графов
- 12.1. Хроматическое число
- Ух, . . . ,Vn одноцветные классы,доказательство
- 12.2. Планарность
- 12.2.2. Эйлерова характеристика
- 12.2.3. Теорема о пяти красках
- 12.3. Алгоритмы раскрашивания
- 12.3.1. Точный алгоритм раскрашивания
- 12.3.2. Приближенный алгоритм последовательного раскрашивания
- 12.3.3. Улучшенный алгоритм последовательного раскрашивания