Вспоминаем определения изоморфизма, связности, соседства и т.п. Доказываем (напоминаем) теорему Форда—Фалкерсона, из которой на следующей лекции выведем теорему Менгера.
[Слайды курса, прочитанного в МФТИ в 2013 году.]
2. Что такое граф?
• Неформально, граф — набор объектов и связей между парами
этих объектов
Bob
Alice
John
3. Что такое граф?
• Формально,
граф — это пара множеств 푉, 퐸 ,
где 퐸 — это множество пар элементов 푉
• Например,
V = 퐴푙푖푐푒, 퐵표푏, 퐽표ℎ푛
E = 퐵표푏, 퐴푙푖푐푒 , 퐽표ℎ푛, 퐴푙푖푐푒 , 퐴푙푖푐푒, 퐽표ℎ푛
• Элементы множеств 푉 и 퐸 называют вершинами и рёбрами графа
соответственно
• Если пары в 퐸 упорядоченные, то говорят об ориентированном
графе (орграфе), а элементы 퐸 называют дугами
4. Немного терминологии
• Множества вершин и рёбер графа 퐺 обозначаются 푉 퐺 и 퐸 퐺
соответственно
• Обозначаем 퐺 ≔ 푉 퐺 и 퐺 ≔ 퐸 퐺
• Ребро, соединяющее вершины 푢 и 푣, обозначается через 푢푣
• Если 푢, 푣 ∈ 푉 퐺 и 푢푣 ∈ 퐸 퐺 , то вершины 푢 и 푣 называются
смежными (в графе 퐺)
• Вершина, принадлежащая ребру, называется концом этого ребра.
При этом говорят, что данная вершина и ребро инцидентны друг
другу
5. Какие бывают графы
• Если во множестве 퐸 есть повторяющиеся пары, то говорят о
мультиграфе, а сами эти пары называют кратными
рёбрами/дугами
• Если в 퐸 есть пары, оба элемента которых совпадают, то говорят о
псевдографе, а сами эти пары называют петлями
граф орграф мультиграф псевдограф
6. Графы и их представления
• Следует чётко различать сам граф (абстрактный объект, пара
множеств) и его представление (например, изображение на
плоскости). Графы существуют вне зависимости от их
изображений. Например, граф
1,2,3,4 , 1,2 , 1,3 , 1,4 , 2,3 , 2,4 , 3,4
можно по-разному «изобразить»:
7. Графы и их представления
• И наоборот, два разных графа могут «структурно» представлять
собой одно и то же: графы
1,2,3,4 , 1,2 , 1,3 , 1,4 , 2,3 , 2,4 , 3,4
и
퐴, 퐵, 퐶, 퐷 , 퐴, 퐵 , 퐶, 퐷 , 퐴, 퐶 , 퐵, 퐷 , 퐷, 퐴 , 퐵, 퐷
имеют идентичную структуру: четыре вершины, каждые две из
которых смежны
8. Изоморфизм графов
• Графы, которые неотличимы со структурной точки зрения,
называются изоморфными
• Формально, графы 퐺′ и 퐺′′ изоморфны, если существует пара
биекций
휙: 푉 퐺′ ↔ 푉 퐺′′
휓: 퐸 퐺′ ↔ 퐸 퐺′′
такая, что для любого ребра 푢푣 ∈ 퐸 퐺′
휓 푢푣 = 휙 푢 휙 푣
• Сама биекция 휙 называется изоморфизмом между 퐺′ и 퐺′′
9. Изоморфизм графов
• Иначе говоря, 퐺′ и 퐺′′ изоморфны, если их вершины можно
«занумеровать» так, что вершины с одинаковыми «номерами»
либо смежны и в 퐺′, и в 퐺′′, либо несмежны в обоих этих графах
• Пример:
• 푉 퐺′ = 1,2,3 , 퐸 퐺′ = 1,2 , 1,3
• 푉 퐺′′ = 푥, 푦, 푧 , 퐸 퐺′′ = 푦, 푧 , 푧, 푥
• Изоморфизм: 1 ↔ 푧, 2 ↔ 푥, 3 ↔ 푦
10. Изоморфизм графов
• Поскольку изоморфные графы с точки зрения структуры
идентичны, мы часто будем считать их одним и тем же графом
• Любая характеристика графа (числовая или качественная),
зависящая лишь от структуры графа (т.е. равная у любой пары
изоморфных графов), называется инвариантом графа
• Пример: количества вершин и рёбер графа являются
инвариантами
11. Изоморфизм графов
Если требуется определить, являются ли два данных графа
изоморфными, то
• для доказательства неизоморфности графов надо указать
инвариант, значение которого различается у этих графов
• для доказательства изоморфности нужно указать, какая вершина
первого графа соответствует какой вершине второго
12. Подграфы
• Пусть 퐺 = 푉, 퐸 и 퐺′ = 푉′ , 퐸′ — графы.
• 퐺′ является подграфом графа 퐺, если 푉′ ⊆ 푉 и 퐸′ ⊆ 퐸
• 퐺′ — остовный подграф, если 푉′ = 푉
• 퐺′ — порождённый подграф графа 퐺, если с каждой парой
вершин он содержит и все инцидентные им рёбра:
∀푢, 푣 푢푣 ∈ 퐸 и 푢, 푣 ∈ 푉′ ⇒ 푢푣 ∈ 퐸′
граф подграф
(не являющийся
порождённым)
порождённый
подграф
остовный
подграф
13. Удаление/добавление
вершин и рёбер
Пусть 퐺 = 푉, 퐸 .
• Для множества 푉′ ⊆ 푉 через 퐺 − 푉′ обозначаем подграф графа 퐺,
порождённый множеством 푉 ∖ 푉′
• Для множества 퐸′ ⊆ 퐸 через 퐺 − 퐸′ обозначаем граф 푉, 퐸 ∖ 퐸′
• Если 퐺′ — подграф 퐺, то через 퐺 − 퐺′ обозначаем граф
퐺 − 푉 퐺′
• Если 푒 — пара вершин графа 퐺, то 퐺 + 푒 обозначает граф
푉, 퐸 ∪ 푒
14. Соседи. Степени вершин
• Любая вершина, смежная с вершиной 푣, называется соседом 푣
• Множество соседей 푣 обозначают 푁 푣
• Для множества вершин 퐴 считаем 푁 퐴 = 푣∈퐴 푁 푣 ∖ A
• Степень вершины — это количество рёбер, инцидентных этой
вершине (в простом графе это равно 푁 푣 )
• Степень вершины 푣 обозначается 푑 푣 или deg 푣
15. Степени вершин
В ориентированном графе:
• Число входящих в 푣 дуг обозначается через 푑− 푣 , называется
полустепенью захода
• Число выходящих из 푣 дуг обозначается через 푑+ 푣 , называется
полустепенью исхода
При этом
푑 푣 = 푑− 푣 + 푑+ 푣
16. Степени вершин
• Степень вершины — это количество инцидентных ей рёбер
• Вершина степени 0 — изолированная
• Вершина степени 1 — висячая или лист
• Вершина степени 2 — проходная
17. Инварианты, основанные на степенях
вершин графа
• Максимальная степень вершины в графе 퐺:
Δ 퐺 = max
푣∈푉 퐺
푑 푣
• Минимальная степень вершины в графе 퐺:
훿 퐺 = min
푣∈푉 퐺
푑 푣
• Средняя степень вершин в графе 퐺:
푑 퐺 =
1
퐺
⋅
푣∈푉 퐺
푑 푣
18. Теорема «о рукопожатиях»
• В любом графе сумма степеней всех вершин равна удвоенному
количеству рёбер:
푣∈푉 퐺
푑 푣 = 2 ⋅ 퐺
19. Маршруты
• Маршрут — последовательность вершин и рёбер графа (начало
и конец — в вершинах),
в которой последовательные элементы инцидентны друг другу
Пример маршрута:
푣1 푒1푣2 푒2푣3푒2푣2푒3푣4 푒4푣5 푒5푣6
푣1
푣2
푣3
푣4
푣5
푣6
푒1
푒2
푒3
푒4 푒5
20. Пути, цепи и циклы
• Цикл — это замкнутый маршрут (т.е. начало совпадает с концом)
без повторяющихся рёбер
• Простой цикл — это цикл без повторяющихся вершин
• Путь — это незамкнутый маршрут без повторений рёбер
• Цепь — путь без повторяющихся вершин
• Длина цикла/цепи — это количество рёбер
21. Связность
• Связный граф — это граф, в котором между любыми двумя
вершинами существует путь
• Компонента связности графа — это его максимальный связный
подграф
связный граф
несвязный граф
компоненты
связности
22. Связность
• Мост — это ребро, удаление которого приводит к графу с
бо́льшим числом компонент связности
• Точка сочленения — вершина, удаление которой приводит к
графу с бо́льшим числом компонент связности
мост
23. Расстояния в графе
• Расстояние между парой вершин 푢, 푣 — это длина кратчайшей
цепи, соединяющей эти вершины. Обозначение: 푑 푢, 푣
• Диаметр графа — это максимальное из расстояний между
парами вершин. Обозначение:
diam 퐺 = max
푢,푣
푑 푢, 푣
푑 퐺 = 푑 푢, 푣 = 3 푣
푢
24. Полные и пустые графы
• Полный граф на 푛 вершинах 퐾푛 — это граф, в котором есть все
возможные рёбра (сколько?)
퐾4 퐾5
• Пустой граф — в котором нет ни одного ребра
25. Независимые множества и клики
• Клика в графе — это полный подграф
• Независимое множество — это подмножество вершин,
порождающее пустой подграф
26. Независимые множества и клики
• Число независимости 훼 퐺 — это размер максимального
независимого множества
• Кликовое число 휔 퐺 — это максимальный размер клики в графе
27. Двудольные графы
• Двудольный граф — это граф, вершины которого можно разбить
на два независимых множества
• Полный двудольный граф 퐾푚,푛 — это двудольный граф со всеми
возможными рёбрами между долями (푚 и 푛 — мощности долей)
퐾3,3
28. Потоки в сетях
• Сеть — это орграф, каждой дуге 푒 которого приписано некоторое
число 푐 푒 ≥ 0 (пропускная способность), и выделены две
вершины: источник 푠 и сток 푡
• Из 푠 в 푡 по дугам орграфа транспортируется некоторый «продукт»
• Задача: указать, по какой дуге сколько
единиц продукта пустить
푠
푡
2
5
2
3 1
1
3
2
8
5
6
29. Потоки в сетях
Поток в сети — это функция 푓, которая каждой дуге 푒 орграфа
ставит в соответствие некоторое число 푓 푒 , такое, что выполнены
условия:
• 0 ≤ 푓 푒 ≤ 푐 푒 для любого 푒 (считаем 푐 푒 = 0 при 푒 ∉ 퐸)
• 푒 входит в 푣 푓 푒 = 푒 выходит из 푣 푓 푒
для любой вершины 푣, не являющейся источником и стоком
Задача: подобрать 푓, так, чтобы максимизировать величину
потока:
푒 выходит из 푠
푓 푒 =
푒 входит в 푡
푓 푒 → max
31. Верхние границы величины потока
• Величина потока не может быть больше суммарной пропускной
способности дуг, выходящих из источника:
푓max ≤
푒 выходит из 푠
푐 푒
• Величина потока не может быть больше суммарной пропускной
способности дуг, входящих в сток:
푓max ≤
푒 входит в 푡
푐 푒
32. Верхние границы величины потока
• Ни одна из указанных оценок не точна:
푠
• Но их можно обобщить, получив точную…
푡
2
4
0
2 1
1
2
2
3
5
5
푠
푡
2
5
2
3 1
1
3
2
8
5
6
33. Верхние границы величины потока
• Разрез в сети — это разбиение вершин сети на две части: 푉 = 푆 ⊔
푇, где 푆 ∋ 푠 и 푇 ∋ 푡
• Пропускная способность разреза — это сумма пропускных
способностей дуг, ведущих из 푆 в 푇:
푠
푡
2
5
2
3 1
1
3
2
8
5
6
푆
푇
푒 ведёт из 푆 в 푇
푐 푒
34. Верхние границы величины потока
• Итак, величина любого потока не больше пропускной
способности любого разреза, а значит и
푓max ≤ 푐min,
где 푐min — пропускная способность минимального разреза в сети
35. Теорема Форда—Фалкерсона
Теорема. Имеет место равенство
푓max = 푐min,
то есть всегда можно указать поток в сети, достигающий верхней
границы.
36. Алгоритм Форда—Фалкерсона
Алгоритм Форда—Фалкерсона строит максимальный поток в сети с
помощью последовательных улучшений:
• Начинаем с произвольного потока
• Пока можно улучшить — улучшаем
• Если нельзя улучшить — останавливаемся
37. Алгоритм Форда—Фалкерсона
• Начинаем с произвольного потока
С помощью поиска в ширину по сети можно проверить, существует
ли в ней ненулевой поток:
푠
푡
2
5
2
3 1
1
3
2
8
5
6
푠
푡
1
1 1
38. Алгоритм Форда—Фалкерсона
• Пока поток можно улучшить — улучшаем
Пусть в сети уже построен некоторый поток. Для этой сети и этого
потока строим остаточную сеть:
푠
푡
2
5
2
3 1
1
3
2
8
5
6
푠
푡
1
5
2
2 1
1
3
2
8
5
6
푠
푡
1
1 1
1
1
39. Алгоритм Форда—Фалкерсона
Пусть в сети уже построен некоторый поток. Для этой сети и этого
потока строим остаточную сеть. Если в исходной сети
пропускная способность дуги 푒 была 푐0 , и по этой дуге шёл поток
푓0 , то в остаточной сети считаем
푐 푒 = 푐0 − 푓0
и добавляем вспомогательную дугу 푒′ в обратном направлении,
считая при этом
푐 푒′ = 푓0
40. Алгоритм Форда—Фалкерсона
Теперь пытаемся найти какой-нибудь ненулевой поток в
остаточной сети. Если он есть, значит поток в исходной сети можно
увеличить:
푠
푡
1
5
2
2 1
1
3
2
8
5
6
1
1
푠
푡
1
1
1
1
1
1
41. Алгоритм Форда—Фалкерсона
Теперь пытаемся найти какой-нибудь ненулевой поток в
остаточной сети. Если он есть, значит поток в исходной сети можно
увеличить:
푠
푡
1
1
1
1
1
1
푠
푡
1
1 1 푠
푡
2
2 1
1
1
1
1
42. Алгоритм Форда—Фалкерсона
Если в остаточной сети не оказалось ненулевого потока, то это в
ней нельзя дойти от 푠 до 푡 по дугам с положительными
пропускными способностями.
푠
푡
2
4
0
2 1
1
2
2
3
5
5
푠
푡
2
5
2
3 1
1
3
2
8
5
6
푠
푡
2
1
2
1 1
1
1
2
5
5
1
2
5
3
2
43. Алгоритм Форда—Фалкерсона
Если в остаточной сети не оказалось ненулевого потока, то это в
ней нельзя дойти от 푠 до 푡 по дугам с положительными
пропускными способностями. Беря в качестве 푆 вершины, до
которых можно дойти по ненулевым дугам из 푠, а в качестве 푇 все
остальные вершины, получаем разрез. Его пропускная способность
равна величине потока, по которому строилась остаточная сеть.
푠
푡
2
1
2
1 1
1
1
2
5
5
1
2
5
3
2
44. Алгоритм Форда—Фалкерсона
Замечание. Проводить «обратные» дуги при построении
остаточной сети важно, иначе максимальность получаемого потока
не гарантируется.
5 5
5
2
2
2
2 2
2
2
3
?
45. Алгоритм Форда—Фалкерсона
Замечание. Проводить «обратные» дуги при построении
остаточной сети важно, иначе максимальность получаемого потока
не гарантируется.
5 5
5
2
2
2
2 2
2
2
3
2
46. Теорема Форда—Фалкерсона
• Если все пропускные способности в сети целочисленные, то и
построенный алгоритмом Форда—Фалкерсона поток оказывается
целочисленным (то есть 푓 푒 ∈ ℤ для каждой дуги 푒).
• Если все пропускные способности в сети — рациональные дроби,
то, домножив их на наименьшее общее кратное знаменателей,
можно перейти к целым числам.
• Если пропускные способности в сети иррациональные, то не
гарантируется, что алгоритм Форда—Фалкерсона
завершится.