- •Отношение эквивалентности. Алгоритм построения классов эквивалентности. Алгоритм построения компонент связности графа. Сравнение алгоритмов.
- •Алгоритм построения наибольшего паросочетания в двудольных графах и теорема о связи максимального паросочетания с минимальным вершинным покрытием.
- •Нахождение кратчайших длин путей в графе. Алгоритм Дейкстры. Сформулировать алгоритм, инвариант цикла, доказать корректность алгоритма. Алгоритм Дейкстры с построением дерева кратчайших путей.
- •Нахождение кратчайших длин путей в графе. Алгоритм Флойда. Сформулировать алгоритм, инвариант цикла, доказать корректность алгоритма. Нахождение кратчайших путей с помощью алгоритма Флойда.
- •Поток на графе. Дивергенция потока. Теорема Остроградского-Гаусса в применении к графам.
Алгоритм построения наибольшего паросочетания в двудольных графах и теорема о связи максимального паросочетания с минимальным вершинным покрытием.
Алгоритм построения максимального паросочетания: Ввести фиктивное начало S и конец F
Ориентировать все ребра от S к F
Цикл-пока есть путь из S в F
найти путь из S в F
поменять ориентированные ребра вдоль пути
удалить фиктивные ребра этого пути
Кц
Ребра, ориентированные справа налево образуют максимальное паросочетание
Теорема: 0(G) = 2(G), где 0(G) – мин. покрывающее вершинное множество, 2(G) – макс. паросочетание.
Алгоритм Краскала и теорема о его корректности на основе нахождения циклов (алгоритмом поиска в глубину). Доказать корректность алгоритма с раскраской вершин. Сравнить трудоемкости алгоритмов.
Алгоритм Краскала: Отсортируем ребра по возрастанию весов
T = пустое множество
Цикл-пока не закончились ребра
Если очередное ребро e не образует цикла с ребрами из T то
T = T u {e}
КЕ
КЦ
Матроиды. Определение. Матричный и графовый матроиды. Теорема Радо-Эдмондса.
Матроидом над множеством M называется набор его подмножеств I, удовлетворяющих:
Алгоритм Прима и теорема о его корректности. Определить матроид в рамках решения этой задачи.
Нахождение кратчайших длин путей в графе. Алгоритм Форда-Беллмана. Сформулировать алгоритм, инвариант цикла, доказать корректность алгоритма. Алгоритм Форда-Беллмана с построением дерева кратчайших путей.
Алгоритм Форда-Беллмана: Цикл по v принадлежащим V
D(v) = A(s, v) (A - матрица весов ребер; A(u, v) - длина ребра)
КЦ
Повторить n-2 раза
Цикл по v принадлежащим V
Цикл по u принадлежащим V (т е по соседям из которых можно попасть в v)
D(v) = min(D(v); D(u) + A(u, v))
КЦ
КЦ
Применяется только к графам, у которых нет циклов отрицательной длины.
Алгоритм Форда-Беллмана с построением дерева кратчайших путей.
// V — множество вершин, A(u,v) — вес ребра u→v или +∞, если ребра нет
// s — источник
// 1) Инициализация
Для всех v ∈ V:
D(v) ← +∞
π(v) ← NIL
Конец цикла
D(s) ← 0
// 2) Основной цикл релаксаций: |V|−1 раз
Повторить |V|−1 раз:
Для всех v ∈ V:
Для всех u ∈ V, таких что A(u,v) < +∞:
Если D(u) + A(u,v) < D(v) Тогда
D(v) ← D(u) + A(u,v)
π(v) ← u // фиксируем предшественника
КонецЕсли
Конец цикла по u
Конец цикла по v
КонецПовтора
// 4) Построение дерева кратчайших путей
T ← ∅
Для всех v ∈ V, v ≠ s:
Если π(v) ≠ NIL То
T ← T ∪ { (π(v) → v) }
КонецЕсли
Конец цикла
Возвратить (D, π, T)
Нахождение кратчайших длин путей в графе. Алгоритм Дейкстры. Сформулировать алгоритм, инвариант цикла, доказать корректность алгоритма. Алгоритм Дейкстры с построением дерева кратчайших путей.
Цикл по v принадлежащим V
D(v) = A(s, v) (A - матрица весов ребер; A(u, v) - длина ребра)
КЦ
V’ ={s} - обр. вершины (вершины дерева кратчайших путей)
V’’=V\V’
Повторить пока V’’ != 0
V’’ = V’’ \ {v}
V’ = V’ u {v}
Цикл по w принадлежащим V’’ (соседям v)
D(w) = min(D(w); D(v) + A(v, w))
КЦ
КЦ
Инвариант: после выполнения k шагов внешнего цикла пометки означают: 1. Если v принадлежит V’, то D(v) – кратчайшее расстояние от s до v.
2. Если v принадлежит V’’, то D(v) – кратчайшее расстояние от s до v по путям, у которых все вершины, кроме последней, обработаны.
