- •Курсовая работа по курсу «Дискретная математика»
- •Некоторые базисные алгоритмы обработки графов
- •Нахождение минимального пути в графе
- •Найти минимальные пути от фиксированной вершины до произвольной вершины графа, используя алгоритм Дейкстры.
- •Найти минимальные пути от фиксированной вершины до произвольной вершины графа, используя алгоритм Форда-Беллмана.
- •А л г о р и т м Форда – Беллмана
- •Найти минимальные пути между всеми парами вершин, используя алгоритм Флойда.
- •Эйлеровы цепи и циклы
- •Построить эйлеров цикл в графе. А л г о р и т м построения эйлерова цикла
- •Построить эйлерову цепь в графе.
- •Гамильтоновы цепи и циклы
- •Генерирование всех перестановок заданного множества
- •Генерирование всех перестановок заданного множества в лексикографическом порядке
- •Рекурсивный алгоритм генерирования всех перестановок заданного множества в лексикографическом порядке
- •В первой перестановке элементы идут в растущей последовательности, а в последней – в убывающей другими словами последняя перестановка является обращением первой,
- •Генерирование всех перестановок заданного множества в антилексикографическом порядке
- •Найти минимальный остов графа, используя алгоритм Краскала.
- •Найти минимальный остов графа, используя алгоритм Прима.
- •Поиск в графах
- •Алгоритм с возвратом
- •Раскраска графа
- •Алгоритм раскрашивания графов
- •Найти хроматическое число заданного графа, используя алгоритм с возвратом для нахождения независимых множеств вершин, указать, какие вершины в какой цвет окрашиваются.
- •Найти хроматический класс заданного графа, используя алгоритм с возвратом для нахождения независимых множеств вершин реберного графа, указать, какие ребра в какой цвет окрашиваются.
- •Паросочетания
- •Построения полного потока в сети
- •Максимальный поток
- •Построения максимального потока
- •Алгоритм меток для нахождения максимального потока
- •Помечивающий алгоритм Форда – Фалкерсона для нахождения максимального потока
- •Некоторые прикладные задачи
- •Задачи об источниках и потребителях
- •Решить задачу об источниках и потребителях, сведя ее к задаче построения максимального потока в транспортной сети и используя первый алгоритм построения максимального потока .
- •Двудольные графы и паросочетания
- •Нахождение наибольшего паросочетания в двудольном графе
- •Построение совершенного паросочетания в двудольном графе
- •Системы различных представителей
Построения полного потока в сети
Данные: транспортная сеть D, заданная матрицей пропускных способностей дуг.
Результат: полный поток в сети.
-
Полагаем для любой дуги xХ (x) = 0 ( начинаем с нулевого потока ).
-
Полагаем D* = D.
-
Удаляем из орграфа D* все дуги, являющиеся насыщенными при потоке в транспортной сети D. Полученный орграф снова обозначим через D*.
-
Ищем в D* простую цепь из v1 в vn . Если такой цепи нет, то - искомый полный поток в транспортной сети D. В противном случае переходим к шагу 5.
-
Увеличиваем поток (x) по каждой дуге x из на одинаковую величину a>0 такую, что, по крайней мере, одна дуга из окажется насыщенной, а потоки по всем остальным дугам из не превышают их пропускных способностей. При этом величина потока также увеличится на a, а сам поток в транспортной сети D остается допустимым. После этого перейдем к шагу 3.
-
Максимальный поток
Поток называется максимальным, если его величина принимает максимальное значение по сравнению с другими допустимыми потоками в транспортной сети D. Максимальный поток всегда является полным (обратное, вообще говоря, неверно).
Введем для заданной транспортной сети D и допустимого потока в этой сети орграф приращений I(D,), имеющий те же вершины, что и сеть D. Каждой дуге x = (v,w) X транспортной сети D в орграфе приращений I(D, ) соответствуют две дуги: x и x* = (w,v) – дуга, противоположная по направлению дуге x. Припишем дугам x и x* орграфа приращений I(D, ) длину l:
0, если (x) < c(x),
l(x) =
, если (x) = c(x),
0, если (x) > 0,
l(x*) =
, если (x) = 0.
А л г о р и т м
Построения максимального потока
Данные: транспортная сеть D, заданная матрицей пропускных способностей дуг.
Результат: максимальный поток в сети.
-
Полагаем i = 0. Пусть 0 – любой допустимый поток в транспортной сети D (например, полный или нулевой).
-
По сети D и потоку i строим орграф приращений I(D, i).
-
Находим простую цепь i, являющуюся минимальным путем из v1 в vn в нагруженном орграфе I(D, i) (можно использовать любой описанный выше алгоритм). Если длина этой цепи равна , то поток i максимален и работа алгоритма заканчивается. В противном случае увеличиваем поток вдоль цепи i на максимально допустимую величину ai > 0, где aiZ (прибавляя ее для каждой дуги xX, через которую проходит цепь i, к уже имеющейся величине потока по дуге x, если дуга x входит в i, и вычитая, если дуга x* входит в i), такую, что при этом сохраняется условие допустимого потока. В результате меняется поток в транспортной сети D, т.е. от потока i переходим к потоку i+1, который является допустимым, и при этом величина его увеличивается на ai. Присваиваем i = i + 1 и переходим к шагу 2.
Алгоритм меток для нахождения максимального потока
Рассмотрим другой алгоритм построения максимального потока в транспортной сети, использующий метки вершин.