- •Структуры и алгоритмы обработки данных
- •230100.62 – Информатика и вычислительная техника
- •Стандартная постановка задачи
- •Пример постановки задачи
- •Пример постановки задачи в стандартной форме
- •Алгоритмы и их сложность
- •Основы анализа программ
- •Пример анализа алгоритмов
- •Выполнение операторов программы
- •Основы доказательства корректности
- •Динамическое программирование
- •Перемножение нескольких матриц
- •Когда применимо динамическое программирование
- •Наибольшая общая подпоследовательность
- •Жадные алгоритмы
- •Задача о выборе заявок
- •Абстрактные типы данных
- •Атд «Список»
- •Атд «Стек»
- •Атд «Очередь»
- •Множества
- •Хеширование
- •Словари, основанные на хеш-таблицах
- •Поиск слова в тексте
- •Сортировка
- •Сортировка вставками
- •Корневая сортировка
- •Пирамидальная сортировка
- •Переформирование пирамиды
- •Построение пирамиды
- •Сортировка слиянием
- •Управление с помощью таблиц
- •Способы представления графа
- •Матрица смежности
- •Матрица инцидентности
- •Список рёбер
- •Алгоритмы обхода графа
- •Поиск в ширину
- •Задача о кратчайшем пути
- •Алгоритм Дейкстры
- •Алгоритм Беллмана-Форда
- •Задача перекресток
- •Максимальный поток
- •Метод Форда-Фалкерсона
- •Минимальные покрывающие деревья
- •Алгоритм Крускала
- •Алгоритм Прима
- •Минимальные покрывающие деревья
- •Поиск в глубину
- •Топологическая сортировка
- •Деревья
Метод Форда-Фалкерсона
Основные понятия: остаточные сети, дополняющие пути и разрезы.
Поиск максимального потока производится по шагам. Вначале поток нулевой. На каждом шаге увеличиваем значение потока. Для этого мы находим «дополняющий путь», по которому можно пропустить еще немного вещества, и используем его для увеличения потока. Этот шаг повторяется, пока есть дополняющие пути.
FORD-FOLKERSON_METHOD (G,s,t)
1 положить поток f равным 0
2 while (пока) существует дополняющий путь p
3 do дополнить f вдоль p
4 return f
Остаточные сети
Пусть G=(V,E) - сеть с истоком s и стоком t. Пусть f - поток в этой сети. Для любой пары вершин u и v рассмотрим остаточную пропускную способность из u в v, определяемую как
cf(u,v) = c(u,v) - f(u,v)
Сеть Gf=(V,Ef) , где
Ef = {(u,v) VV : cf(u,v) >0 }
назовем остаточной сетью сети G , порожденной потоком f. Ее ребра, называемые остаточными ребрами, допускают положительный поток.
Остаточное ребро не обязано быть ребром сети
Пример потока
Остаточная сеть
Дополняющие пути
Пусть f - поток в сети G=(V,E). Назовем дополняющим путем простой путь из истока s в сток t в остаточной сети Gf.
Величину наибольшего потока, который можно переслать по дополняющему пути p , назовем остаточной пропускной способностью пути p.
cf(p) = min { cf(u,v) : (u,v) p}
Разрезы в сетях
Разрезом сети G=(V,E) называется разбиение множества V на две части S и T=V\S, для которых s S и t T.
Пропускной способностью разреза (S,T) называют сумму пропускных способностей пересекающих разрез ребер.
Минимальным разрезом называется разрез ниаменьшей пропускной способности (среди всех разрезов данной сети)
Пример разреза
Теорема (о максимальном потоке и минимальном разрезе)
Пусть f – поток в сети G=(V,E). Тогда следующие утверждения равносильны:
1. Поток максимален в сети G.
2. Остаточная сеть Gf не содержит дополняющих путей.
3. Для некоторого разреза (S,T) сети G выполнено равенство f = c(S,T)
Общая схема алгоритма Форда-Фалкерсона
FORD-FULKERSON (G,s,t)
1 for (для) каждого ребра (u,v) E[G]
2 do f[u,v] 0
3 f[v,u] 0
4 while в остаточной сети Gf существует путь p из s в t
5 do cf(p) min{cf(u,v): (u,v) входит в p}
6 for (для) каждого ребра (u,v) пути p
7 do f[u,v] f[u,v] + cf(p)
8 f[v,u] -f[u,v]
Пример исполнения алгоритма
рис а
рис б
рис в
рис г
рис д
Анализ алгоритма Форда-Фалкерсона
Время работы зависит от того, как ищется путь.
Если величина потока будет расти все более мелкими шагами, алгоритм может вообще не остановиться.
Если выбирать дополняющий путь при помощи поиска в ширину, то алгоритм работает полиномиальное время.
Эта реализация метода Форда-Фалкерсона, называется алгоритмом Эдмондса-Карпа и имеет время работы O(VE2)
Минимальные покрывающие деревья
Минимальные покрывающие деревья
Задача
Необходимо соединить n контактов на печатной плате, затратив провод минимальной длины.
Упрощенная математическая модель
Задача о минимальном покрывающем дереве
Пусть имеется связный неориентированный граф G=(V,E), в котором V – множество контактов, а E – множество их возможных попарных соединений. Для каждого ребра графа (u,v) задан неотрицательный вес w(u,v) (длина провода, необходимого для соединения u и v).
Задача состоит в нахождении подмножества T E, связывающего все вершины, для которого суммарный вес минимален
Такое подмножество T можно считать деревом (в любом цикле один из проводов можно удалить, не нарушая связности).
Связный подграф графа G, являющийся деревом и содержащий все его вершины, называют покрывающим (остовным) деревом графа.
Пример графа
Покрывающее дерево графа
Почему задача о минимальном покрывающем дереве является упрощением реальной ситуации?
Алгоритмы Крускала и Прима решают задачу о минимальном покрывающем дереве различными способами.
Оба алгоритма следуют «жадной» стратегии: на каждом шаге выбирается «локально наилучший» вариант.
Доказано, что для данных алгоритмов жадный выбор приводит к оптимальному решению.
Построение минимального покрывающего дерева
Дан связный неориентированный граф G=(V,E) и весовая функция w:E→R.
Общая схема алгоритмов.
Искомый остов строится постепенно: к изначально пустому множеству A на каждом шаге добавляется одно ребро.
Ребро (u,v) добавляемое на очередном шаге, выбирается так, чтобы не нарушить этого свойства:
A {(u,v)} тоже должно быть подмножеством минимального остова. Такое ребро называется безопасным ребром для A.
GENERIC-MST(G,w)
1 A
2 while (пока) A не является остовом
3 do найти безопасное ребро (u,v)для A
4 A {(u, v)}
5 return A
Определения
Разрезом (S,V\S) неориентированного графа G=(V,E) называется разбиение множества его вершин на два подмножества.
Говорят, что ребро (u,v)E пересекает разрез (S,V\S), если один из его концов лежит в S, а другой - в V\S.
Разрез согласован с множеством ребер A, если ни одно ребро из A не пересекает этот разрез.
В множестве пересекающих разрез ребер выделяют ребра наименьшего (в этом множестве) веса, называя их легкими.
Теорема
Пусть G=(V,E) - связный неориентированный граф, на множестве вершин которого определена вещественная функция w. Пусть A - множество ребер, являющееся подмножеством некоторого минимального остова графа G. Пусть (S,V\S) - разрез графа G, согласованный с A, а (u,v) - легкое ребро для этого разреза. Тогда ребро (u,v) является безопасным для A.
Доказательство.
Пусть T- минимальный остов, содержащий A. Предположим, что T не содержит ребра (u,v), поскольку в противном случае доказываемое утверждение очевидно.
Покажем, что существует другой минимальный остов T , содержащий A {(u,v)}, так что ребро (u,v), является безопасным для A.
Остов T связен и потому содержит некоторый (единственный) путь p из u в v; ребро (u,v) замыкает этот путь в цикл. Поскольку вершины u и v принадлежат разным частям разреза (S,V\S), в пути p есть по крайней мере одно ребро (x,y) , пересекающее разрез. Это ребро не лежит в A, так как разрез согласован с A. Добавим к дереву T ребро (u,v) и удалив из получившегося цикла ребро (x,y), получим новый остов T = T\{(u,v) } {( x,y)}.
Покажем, что T - минимальный остов. Поскольку (u,v) - легкое ребро, пересекающее разрез (S,V\S), изъятое из T ребро (x,y) имеет не меньший вес, чем добавленное вместо него ребро (u,v), так что вес остова мог только уменьшиться. Но остов был минимальным, значит , вес его остался прежним, и новый остов T будет другим минимальным остовом (того же веса). Поэтому ребро (u,v), содержащееся в T, является безопасным.
Следствие
Пусть G=(V,E) - связнвый неориентированный граф и на множестве E определена весовая функция w. Пусть A - множество ребер графа, являющееся подмножеством некоторого минимального остова. Рассмотрим лес GA=(V,A) . Пусть дерево C - одна из связных компонент леса GA. Рассмотрим все ребра графа, соединяющие вершины из C с вершинами не из C, и возьмем среди них ребро наименьшего веса. Тогда это ребро безопасно для A.
Доказательство
Разрез (C,V\C), согласован с A, а ребро (u,v) - легкое ребро для этого разреза.
