
- •Бизнес-информатика. Задания по ″теории графов″,
- •2. Алгоритмы поиска путей в графе.
- •3. Алгоритмы нахождения минимального остова в графе
- •4. Хроматическое число графа. Алгоритм правильной раскраски вершин графа методом перебора с возвратами.
- •If then return (false)
- •If then
- •If then
- •5. Транспортные сети. Теорема форда-фалкерсона о максимальном потоке в транспортной сети
4. Хроматическое число графа. Алгоритм правильной раскраски вершин графа методом перебора с возвратами.
Определения и постановка задачи.
Даны простой неориентированный граф с множеством вершин и множеством рёбер (граф простой, значит. без петель и кратных дуг).
Вершинная
-раскраска
графа – это присвоение его вершинам
цветов из множества
.
Раскраска называется правильной,
если никакие две смежные вершины не
получают одного цвета.
Хроматическим
числом
графа
называется минимальное число
,
при котором существует правильная
раскраска вершин графа в
цветов.
Очевидно,
что
.
Задача: вычислить .
Функция
возвращает значение
для графа
,
заданного каким-либо образом (например,
матрицей или структурой смежностей).
Попутно вычисляется вектор
,
где
–
цвет, который получает
-ая
вершина. При вычислении
используется вспомогательная функция
,
возвращающая значение
e
(ложь), если правильная
-раскраска
графа
не существует, и возвращает значение
e,
если существует; в последнем случае
вычисляется значение
–
число использованных красок.
если
раскраска существует, то можно считать,
что вершина 1 получила цвет 1
for
do
остальные
вершины пока цвета не имеют
i← 2;
Далее поиск правильной -раскраски осуществляется методом перебора с возвратами
while
do
начинаем
раскраску со второй вершины
if
then {назад:
}
else
1:
if
цвет
вершин, смежных с
-ой
вершиной, отличен от
then
{вперед:
}
od; конец цикла while
If then return (false)
else {2: ← число различных цветов в ; return (true)}.
NB. Оператор 1: можно реализовать следующим образом:
true;
;
while
do
If then
If then
Здесь
−
элементы матрицы смежностей
графа
.
Оператор 2: можно реализовать следующим образом:
Теперь вычисляем хроматическое число графа
;
Ввести матрицу смежностей графа ;
;
for
do
;
while
do
;
return
(
).
5. Транспортные сети. Теорема форда-фалкерсона о максимальном потоке в транспортной сети
Определение. Транспортная сеть − это связный ориентированный граф без петель, удовлетворяющий следующим условиям:
1. Существует только одна
вершина с нулевой степенью захода; эта
вершина называется источником
и обозначается через
.
2. Существует только одна
вершина с нулевой степенью исхода; эта
вершина называется стоком
и обозначается через
.
3. Каждой дуге
в сети
сопоставляется неотрицательное
вещественное число, называемое пропускной
способностью дуги
;
оно обозначается через
или
.
(Если не существует дуги, ориентированной
из
в
,
то полагаем, что
.)
Моделью транспортной сети может служить водопроводная система, в которой сечения труб определяют пропускные способности соответствующих труб, т.е. количество жидкости. которое может пропустить труба за единицу времени.
Потоком
в транспортной сети
является функция, сопоставляющая каждой
дуге
неотрицательное вещественное
число
так, что выполняются следующие условия:
1.
для любой дуги
;
2.
для любого
.
(Требование 2 − это условие сохранения баланса. Образно говоря, ″сколько втекает в вершину, столько и вытекает из неё″.)
Величина потока
обозначается через
и определяется выражением
.
Говорят, что поток
максимален,
если не существует потока
такого, что
>
.
Постановка задачи. Найти максимальный поток в заданной транспортной сети.
Пусть
,
.
Разрез
,
определяется как
множество дуг
,
у которых начало и конец лежат в разных
подмножествах
и
.
Разрез состоит из прямых
дуг, ориентированных из
в
,
и обратных
дуг, ориентированных из
в
.
Если
,
,
то соответствующий разрез называется
(
-
)
- разрезом.
См. рис. 1.
Далее рассматриваются только
-
- разрезы.
Пропускная способность
,
разреза
,
определяется как
сумма пропускных способностей прямых
дуг разреза. Разрез, пропускная способность
которого не больше, чем у любого другого
разреза, называется минимальным.
(В транспортной сети может быть несколько
минимальных разрезов, конечно, с
одинаковыми пропускными способностями.)
Поток из в определяется как
Аналогично определяется поток из в :
1. Лемма. Для любого - - разреза < , > имеет место равенство
.
Доказательство.
Для
фиксированного
имеем
Суммируя по всем , получаем
С другой стороны,
2. Следствие. Для любого потока и любого - - разреза < , >
(
,
).
Доказательство.
.
∎
Для потока
и разреза <
,
>
прямую дугу
,
где
,
,
будем называть
-насыщенной
(соответственно,
-не
),
если
(соответственно, если
).
Обратную дугу
,
где
,
,
будем называть
-нулевой
(соответственно,
-положительной),
если
(соответственно, если
).
3. Лемма.
Если величина потока
равна пропускной способности некоторого
разреза
,
,
то
−
максимальный поток, а
−
минимальный разрез. Для данного разреза
прямые дуги являются насыщенными, а
обратные −
нулевыми.
Доказательство.
Пусть
−
максимальный поток, а
−
минимальный разрез. Так как
и,
по условию,
,
то
.
∎
Рассмотрим в транспортной
сети цепочку
рёбер
,
,
,
,
,
соединяющую источник
и некоторую вершину
.
Заметим, что рёбра получаются из дуг
путём снятия ориентации. Соответствующие
дуги, составляющие цепочку, могут быть
как прямыми, т.е. ориентированными из
в
,
так и обратными, т.е. ориентированными
из
в
.
Для ребра
полагаем
Цепочка
называется
-ненасыщенной,
если
.
-ненасыщенная
цепочка
из
в
называется
-дополняющей.
Наличие в сети
-дополняющей
цепочки
позволяет увеличить величину потока,
вводя новый поток
При этом
.
4. Теорема. Поток в транспортной сети максимален тогда и только тогда, когда в сети отсутствуют -дополняющие цепочки.
Доказательство.
Необходимость.
Если
поток максимален, то в сети заведомо
нет
-дополняющих
цепочек.
В противном случае можно было бы построить
новый поток
,
величина которого больше, чем у потока
.
Достаточность. Предположим, что сеть с потоком не содержит -дополняющих цепочек. Покажем, что в этом случае − максимальный поток.
Разобьём
множество
вершин сети на два непересекающихся
подмножества
и
:
в
включим
те вершины
,
до которых существуют
-ненасыщенные
цепочки
из источника
,
а в
включим остальные вершины, т.е.
.
Очевидно, что
.
Пусть
−
произвольная дуга разреза
,
.
Если
− прямая
дуга, т.е.
,
,
то
является
-насыщенной
дугой, поскольку иначе существует
-ненасыщенная
цепочка
из
в
и
.
Аналогично,
если
− обратная
дуга, т.е.
,
,
то
является
-нулевой
дугой
.
Таким
образом,
для прямых дуг и
для обратных дуг разреза <
,
>.
Тогда
,
,
,
,
и
,
,
,
.
Из леммы 3 вытекает, что <
,
>
− минимальный
разрез, а
−
максимальный поток.∎
5. Следствие (теорема Форда-Фалкерсона). Величина максимального потока в транспортной сети равна пропускной способности минимального разреза.
ПОМЕЧАЮЩИЙ АЛГОРИТМ ФОРДА-ФАЛКЕРСОНА НАХОЖДЕНИЯ МАКСИМАЛЬНОГО ПОТОКА В ТРАНСПОРТНОЙ СЕТИ
Алгоритм основан на теореме 4 и состоит из двух фаз.
На первой
фазе, используя помечающую процедуру,
устанавливаем, существует ли в сети
-дополняющая
цепочка.
Если такой цепочки нет, то согласно
теореме 4 поток в сети максимален (конец
алгоритма). В противном случае переходим
ко второй фазе, в которой, используя
метки, полученные на первой фазе, строим
новый поток
такой, что
.
Фазы 1 и 2 повторяются до тех пор, пока
не будет построен максимальный поток.
Метка,
которую может получить вершина
на фазе 1, имеет вид (
,
,
),
где символ
указывает на вершину, от которой получена
метка,
указывает направление помечивания −
прямое (
)
или обратное (
),
наконец,
=
,
если существует
-ненасыщенная
цепочка
из
в
.
Помечивание начинается с пометки источника, который получает метку
,
,
,
где значение
несущественно. Помечивание остальных
вершин происходит по следующим правилам.
Прямое
помечивание.
Если
,
то прямое помечивание
из
возможно, если вершина
уже помечена и
.
При этом вершина
получает метку
,
,
,
где
.
Обратное
помечивание.
Если
,
то обратное помечивание
из
возможно, если вершина
уже помечена и
.
При этом вершина
получает метку
,
,
,
где
.
Фаза 1 завершается, если либо 1) вершина (сток) помечена, либо 2) вершина не помечена и ни одну из непомеченных вершин не удаётся (нельзя) пометить. В пределах фазы каждая вершина помечается лишь один раз.
Если
сток
получил метку в первой фазе, то из правил
помечивания следует, что в сети существует
-дополняющая
цепочка
и
>0.
Во второй фазе эта цепочка прослеживается
в обратном направлении (начиная с
)
с помощью символов
,
что позволяет построить новый поток
с
увеличенным значением
.
Алгоритм Форда-Фалкерсона.
Вход:
транспортная
сеть
,
заданная матрицей (
),
где
=
(
,
),
,
,
пропускных способностей, или каким-нибудь
другим способом.
(Начинаем с нулевого потока.)
for
е
∈
E
do
f(e):=
0;
(Фаза 1.)
Удаляем все метки вершин;
Помечаем источник;
while вершина t не помечена и существует непомеченная вершина v do
помечаем вершину v;
od;
if сток не помечен then конец: максимальный поток построен;
(Фаза 2.)
v:= t; u:= dv;
while v ≠ s do
if bv = ″+″ then f(u,v):= f(u,v)+ ∆t
else f(u,v):= f(u,v)− ∆t;
v:= u
od;
Возврат на фазу 1.
Выход: максимальный поток f.