- •Структуры и алгоритмы обработки данных
- •230100.62 – Информатика и вычислительная техника
- •Стандартная постановка задачи
- •Пример постановки задачи
- •Пример постановки задачи в стандартной форме
- •Алгоритмы и их сложность
- •Основы анализа программ
- •Пример анализа алгоритмов
- •Выполнение операторов программы
- •Основы доказательства корректности
- •Динамическое программирование
- •Перемножение нескольких матриц
- •Когда применимо динамическое программирование
- •Наибольшая общая подпоследовательность
- •Жадные алгоритмы
- •Задача о выборе заявок
- •Абстрактные типы данных
- •Атд «Список»
- •Атд «Стек»
- •Атд «Очередь»
- •Множества
- •Хеширование
- •Словари, основанные на хеш-таблицах
- •Поиск слова в тексте
- •Сортировка
- •Сортировка вставками
- •Корневая сортировка
- •Пирамидальная сортировка
- •Переформирование пирамиды
- •Построение пирамиды
- •Сортировка слиянием
- •Управление с помощью таблиц
- •Способы представления графа
- •Матрица смежности
- •Матрица инцидентности
- •Список рёбер
- •Алгоритмы обхода графа
- •Поиск в ширину
- •Задача о кратчайшем пути
- •Алгоритм Дейкстры
- •Алгоритм Беллмана-Форда
- •Задача перекресток
- •Максимальный поток
- •Метод Форда-Фалкерсона
- •Минимальные покрывающие деревья
- •Алгоритм Крускала
- •Алгоритм Прима
- •Минимальные покрывающие деревья
- •Поиск в глубину
- •Топологическая сортировка
- •Деревья
Алгоритм Дейкстры
Алгоритм Дейкстры решает задачу о кратчайших путях из одной вершины для взвешенного ориентированного графа G=(V,E) с исходной вершиной s; в котором веса всех ребер неотрицательны (w(u,v) ≥ 0 для всех (u,v) E).
Предполагается, что граф задан с помощью списков смежных вершин.
В процессе работы алгоритма поддерживается множество S V, состоящее из вершин v, для которых ( s,v) уже найдено.
Алгоритм выбирает вершину u V \ S с наименьшим d[u], добавляет u к множеству S и производит релаксацию всех ребер, выходящих из u, после чего цикл повторяется.
Вершины, не лежащие в S, хранятся в очереди Q с приоритетами, определяемыми значениями функции d.
DIJKSTRA (G, w, s)
1 INITIALIZE-SINGLE-SOURCE (G,s)
2 S
3 Q V[G]
4 while Q
5 do u EXTRACT-MIN(Q)
6 S S {u}
7 for (для) всех вершин vAdj[u]
8 do RELAX (u,v,w)
Поскольку алгоритм Дейкстры всякий раз выбирает для обработки вершины с наименьшей оценкой кратчайшего пути, он является жадным алгоритмом. Доказано, что в данном случае жадная стратегия дает правильный результат.
Оценка времени работы алгоритма Дейкстры
Если очередь с приоритетами реализована как массив, стоимость операции EXTRACT-MIN есть O(V).
Алгоритм делает V таких операций.
Суммарная стоимость всех удалений из очереди есть O(V2).
Оценим стоимость остальных операций.
Каждая вершина v V добавляется к множеству S только один раз, и каждое ребро из Adj[v] обрабатывается тоже один раз. Общее количество элементов во всех списках смежных вершин есть E ; стоимость каждой релаксации есть O(1).
Поэтому стоимость прочих операций есть O(E).
Общая стоимость алгоритма есть O(V2 + E).
Пример исполнения алгоритма Дейкстры
Исходный граф
Шаг 1
Шаг 2
Шаг 3
Шаг 4
Шаг 5
Алгоритм Беллмана-Форда
Алгоритм Беллмана-Форда решает задачу о кратчайших путях из одной вершины для случая, когда весам ребер разрешено быть отрицательными.
Алгоритм возвращает значение TRUE, если в графе нет цикла отрицательного веса, достижимого из исходной вершины, и FALSE, если таковой цикл имеется.
В первом случае алгоритм находит кратчайшие пути и их веса; во втором случае кратчайших путей для некоторых вершин не существует
Алгоритм производит релаксацию ребер, пока все значения d[v] не сравняются с ( s,v).
BELLMAN-FORD (G, w, s)
1 INITIALIZE-SINGLE-SOURCE (G,s)
2 for i 1 to V[G]-1
3 do for (для) каждого ребра (u,v) E[G]
4 do RELAX (u,v,w)
5 for (для) каждого ребра (u,v) E[G]
6 do if d[v] > d[u] + w (u,v)
7 then return FALSE
8 return TRUE
Оценка времени работы алгоритма
Стоимость инициализации в строке 1 есть O(V).
Общее число релаксаций есть O(VE).
Стоимость цикла в строках 5-8 есть O(E).
Суммарное время работы алгоритма есть O(VE).
Исполнение алгоритма Беллмана-Форда
Исходный граф
Последовательность просмотра ребер при релаксации
(u,v), (u,x), (u,y), (v,u), (x,v), (x,y), (y,v), (y,z), (z,u), (z,x)
Исходная вершина – z
Шаг 1
Шаг 2
Шаг 3
Шаг 4
Проверка достижимости циклов отрицательного веса
u → v1
v → v2
v1 |
v2 |
d[v1] |
d[v2] |
w(v1, v2) |
(1)+(3) |
(2) ? (4) |
(1) |
(2) |
(3) |
(4) |
|||
u |
v |
2 |
4 |
1 |
3 |
> |
u |
x |
2 |
7 |
8 |
10 |
< |
u |
y |
2 |
-2 |
-4 |
-2 |
= |
v |
u |
4 |
2 |
-2 |
2 |
= |
x |
v |
7 |
4 |
-3 |
4 |
= |
x |
y |
7 |
-2 |
9 |
16 |
< |
y |
v |
-2 |
4 |
7 |
5 |
< |
y |
z |
-2 |
0 |
2 |
0 |
= |
z |
u |
0 |
2 |
6 |
6 |
< |
z |
x |
0 |
7 |
7 |
7 |
= |
