Основы теории графов 
осень 2013 
Александр Дайняк 
www.dainiak.com
Что такое граф? 
• Неформально, граф — набор объектов и связей между парами 
этих объектов 
Bob 
Alice 
John
Что такое граф? 
• Формально, 
граф — это пара множеств 푉, 퐸 , 
где 퐸 — это множество пар элементов 푉 
• Например, 
V = 퐴푙푖푐푒, 퐵표푏, 퐽표ℎ푛 
E = 퐵표푏, 퐴푙푖푐푒 , 퐽표ℎ푛, 퐴푙푖푐푒 , 퐴푙푖푐푒, 퐽표ℎ푛 
• Элементы множеств 푉 и 퐸 называют вершинами и рёбрами графа 
соответственно 
• Если пары в 퐸 упорядоченные, то говорят об ориентированном 
графе (орграфе), а элементы 퐸 называют дугами
Немного терминологии 
• Множества вершин и рёбер графа 퐺 обозначаются 푉 퐺 и 퐸 퐺 
соответственно 
• Обозначаем 퐺 ≔ 푉 퐺 и 퐺 ≔ 퐸 퐺 
• Ребро, соединяющее вершины 푢 и 푣, обозначается через 푢푣 
• Если 푢, 푣 ∈ 푉 퐺 и 푢푣 ∈ 퐸 퐺 , то вершины 푢 и 푣 называются 
смежными (в графе 퐺) 
• Вершина, принадлежащая ребру, называется концом этого ребра. 
При этом говорят, что данная вершина и ребро инцидентны друг 
другу
Какие бывают графы 
• Если во множестве 퐸 есть повторяющиеся пары, то говорят о 
мультиграфе, а сами эти пары называют кратными 
рёбрами/дугами 
• Если в 퐸 есть пары, оба элемента которых совпадают, то говорят о 
псевдографе, а сами эти пары называют петлями 
граф орграф мультиграф псевдограф
Графы и их представления 
• Следует чётко различать сам граф (абстрактный объект, пара 
множеств) и его представление (например, изображение на 
плоскости). Графы существуют вне зависимости от их 
изображений. Например, граф 
1,2,3,4 , 1,2 , 1,3 , 1,4 , 2,3 , 2,4 , 3,4 
можно по-разному «изобразить»:
Графы и их представления 
• И наоборот, два разных графа могут «структурно» представлять 
собой одно и то же: графы 
1,2,3,4 , 1,2 , 1,3 , 1,4 , 2,3 , 2,4 , 3,4 
и 
퐴, 퐵, 퐶, 퐷 , 퐴, 퐵 , 퐶, 퐷 , 퐴, 퐶 , 퐵, 퐷 , 퐷, 퐴 , 퐵, 퐷 
имеют идентичную структуру: четыре вершины, каждые две из 
которых смежны
Изоморфизм графов 
• Графы, которые неотличимы со структурной точки зрения, 
называются изоморфными 
• Формально, графы 퐺′ и 퐺′′ изоморфны, если существует пара 
биекций 
휙: 푉 퐺′ ↔ 푉 퐺′′ 
휓: 퐸 퐺′ ↔ 퐸 퐺′′ 
такая, что для любого ребра 푢푣 ∈ 퐸 퐺′ 
휓 푢푣 = 휙 푢 휙 푣 
• Сама биекция 휙 называется изоморфизмом между 퐺′ и 퐺′′
Изоморфизм графов 
• Иначе говоря, 퐺′ и 퐺′′ изоморфны, если их вершины можно 
«занумеровать» так, что вершины с одинаковыми «номерами» 
либо смежны и в 퐺′, и в 퐺′′, либо несмежны в обоих этих графах 
• Пример: 
• 푉 퐺′ = 1,2,3 , 퐸 퐺′ = 1,2 , 1,3 
• 푉 퐺′′ = 푥, 푦, 푧 , 퐸 퐺′′ = 푦, 푧 , 푧, 푥 
• Изоморфизм: 1 ↔ 푧, 2 ↔ 푥, 3 ↔ 푦
Изоморфизм графов 
• Поскольку изоморфные графы с точки зрения структуры 
идентичны, мы часто будем считать их одним и тем же графом 
• Любая характеристика графа (числовая или качественная), 
зависящая лишь от структуры графа (т.е. равная у любой пары 
изоморфных графов), называется инвариантом графа 
• Пример: количества вершин и рёбер графа являются 
инвариантами
Изоморфизм графов 
Если требуется определить, являются ли два данных графа 
изоморфными, то 
• для доказательства неизоморфности графов надо указать 
инвариант, значение которого различается у этих графов 
• для доказательства изоморфности нужно указать, какая вершина 
первого графа соответствует какой вершине второго
Подграфы 
• Пусть 퐺 = 푉, 퐸 и 퐺′ = 푉′ , 퐸′ — графы. 
• 퐺′ является подграфом графа 퐺, если 푉′ ⊆ 푉 и 퐸′ ⊆ 퐸 
• 퐺′ — остовный подграф, если 푉′ = 푉 
• 퐺′ — порождённый подграф графа 퐺, если с каждой парой 
вершин он содержит и все инцидентные им рёбра: 
∀푢, 푣 푢푣 ∈ 퐸 и 푢, 푣 ∈ 푉′ ⇒ 푢푣 ∈ 퐸′ 
граф подграф 
(не являющийся 
порождённым) 
порождённый 
подграф 
остовный 
подграф
Удаление/добавление 
вершин и рёбер 
Пусть 퐺 = 푉, 퐸 . 
• Для множества 푉′ ⊆ 푉 через 퐺 − 푉′ обозначаем подграф графа 퐺, 
порождённый множеством 푉 ∖ 푉′ 
• Для множества 퐸′ ⊆ 퐸 через 퐺 − 퐸′ обозначаем граф 푉, 퐸 ∖ 퐸′ 
• Если 퐺′ — подграф 퐺, то через 퐺 − 퐺′ обозначаем граф 
퐺 − 푉 퐺′ 
• Если 푒 — пара вершин графа 퐺, то 퐺 + 푒 обозначает граф 
푉, 퐸 ∪ 푒
Соседи. Степени вершин 
• Любая вершина, смежная с вершиной 푣, называется соседом 푣 
• Множество соседей 푣 обозначают 푁 푣 
• Для множества вершин 퐴 считаем 푁 퐴 = 푣∈퐴 푁 푣 ∖ A 
• Степень вершины — это количество рёбер, инцидентных этой 
вершине (в простом графе это равно 푁 푣 ) 
• Степень вершины 푣 обозначается 푑 푣 или deg 푣
Степени вершин 
В ориентированном графе: 
• Число входящих в 푣 дуг обозначается через 푑− 푣 , называется 
полустепенью захода 
• Число выходящих из 푣 дуг обозначается через 푑+ 푣 , называется 
полустепенью исхода 
При этом 
푑 푣 = 푑− 푣 + 푑+ 푣
Степени вершин 
• Степень вершины — это количество инцидентных ей рёбер 
• Вершина степени 0 — изолированная 
• Вершина степени 1 — висячая или лист 
• Вершина степени 2 — проходная
Инварианты, основанные на степенях 
вершин графа 
• Максимальная степень вершины в графе 퐺: 
Δ 퐺 = max 
푣∈푉 퐺 
푑 푣 
• Минимальная степень вершины в графе 퐺: 
훿 퐺 = min 
푣∈푉 퐺 
푑 푣 
• Средняя степень вершин в графе 퐺: 
푑 퐺 = 
1 
퐺 
⋅ 
푣∈푉 퐺 
푑 푣
Теорема «о рукопожатиях» 
• В любом графе сумма степеней всех вершин равна удвоенному 
количеству рёбер: 
푣∈푉 퐺 
푑 푣 = 2 ⋅ 퐺
Маршруты 
• Маршрут — последовательность вершин и рёбер графа (начало 
и конец — в вершинах), 
в которой последовательные элементы инцидентны друг другу 
Пример маршрута: 
푣1 푒1푣2 푒2푣3푒2푣2푒3푣4 푒4푣5 푒5푣6 
푣1 
푣2 
푣3 
푣4 
푣5 
푣6 
푒1 
푒2 
푒3 
푒4 푒5
Пути, цепи и циклы 
• Цикл — это замкнутый маршрут (т.е. начало совпадает с концом) 
без повторяющихся рёбер 
• Простой цикл — это цикл без повторяющихся вершин 
• Путь — это незамкнутый маршрут без повторений рёбер 
• Цепь — путь без повторяющихся вершин 
• Длина цикла/цепи — это количество рёбер
Связность 
• Связный граф — это граф, в котором между любыми двумя 
вершинами существует путь 
• Компонента связности графа — это его максимальный связный 
подграф 
связный граф 
несвязный граф 
компоненты 
связности
Связность 
• Мост — это ребро, удаление которого приводит к графу с 
бо́льшим числом компонент связности 
• Точка сочленения — вершина, удаление которой приводит к 
графу с бо́льшим числом компонент связности 
мост
Расстояния в графе 
• Расстояние между парой вершин 푢, 푣 — это длина кратчайшей 
цепи, соединяющей эти вершины. Обозначение: 푑 푢, 푣 
• Диаметр графа — это максимальное из расстояний между 
парами вершин. Обозначение: 
diam 퐺 = max 
푢,푣 
푑 푢, 푣 
푑 퐺 = 푑 푢, 푣 = 3 푣 
푢
Полные и пустые графы 
• Полный граф на 푛 вершинах 퐾푛 — это граф, в котором есть все 
возможные рёбра (сколько?) 
퐾4 퐾5 
• Пустой граф — в котором нет ни одного ребра
Независимые множества и клики 
• Клика в графе — это полный подграф 
• Независимое множество — это подмножество вершин, 
порождающее пустой подграф
Независимые множества и клики 
• Число независимости 훼 퐺 — это размер максимального 
независимого множества 
• Кликовое число 휔 퐺 — это максимальный размер клики в графе
Двудольные графы 
• Двудольный граф — это граф, вершины которого можно разбить 
на два независимых множества 
• Полный двудольный граф 퐾푚,푛 — это двудольный граф со всеми 
возможными рёбрами между долями (푚 и 푛 — мощности долей) 
퐾3,3
Потоки в сетях 
• Сеть — это орграф, каждой дуге 푒 которого приписано некоторое 
число 푐 푒 ≥ 0 (пропускная способность), и выделены две 
вершины: источник 푠 и сток 푡 
• Из 푠 в 푡 по дугам орграфа транспортируется некоторый «продукт» 
• Задача: указать, по какой дуге сколько 
единиц продукта пустить 
푠 
푡 
2 
5 
2 
3 1 
1 
3 
2 
8 
5 
6
Потоки в сетях 
Поток в сети — это функция 푓, которая каждой дуге 푒 орграфа 
ставит в соответствие некоторое число 푓 푒 , такое, что выполнены 
условия: 
• 0 ≤ 푓 푒 ≤ 푐 푒 для любого 푒 (считаем 푐 푒 = 0 при 푒 ∉ 퐸) 
• 푒 входит в 푣 푓 푒 = 푒 выходит из 푣 푓 푒 
для любой вершины 푣, не являющейся источником и стоком 
Задача: подобрать 푓, так, чтобы максимизировать величину 
потока: 
푒 выходит из 푠 
푓 푒 = 
푒 входит в 푡 
푓 푒 → max
Потоки в сетях 
• Пример потока в сети: 
푠 
푡 
2 
4 
0 
2 1 
1 
2 
2 
3 
5 
5 
푠 
푡 
2 
5 
2 
3 1 
1 
3 
2 
8 
5 
6
Верхние границы величины потока 
• Величина потока не может быть больше суммарной пропускной 
способности дуг, выходящих из источника: 
푓max ≤ 
푒 выходит из 푠 
푐 푒 
• Величина потока не может быть больше суммарной пропускной 
способности дуг, входящих в сток: 
푓max ≤ 
푒 входит в 푡 
푐 푒
Верхние границы величины потока 
• Ни одна из указанных оценок не точна: 
푠 
• Но их можно обобщить, получив точную… 
푡 
2 
4 
0 
2 1 
1 
2 
2 
3 
5 
5 
푠 
푡 
2 
5 
2 
3 1 
1 
3 
2 
8 
5 
6
Верхние границы величины потока 
• Разрез в сети — это разбиение вершин сети на две части: 푉 = 푆 ⊔ 
푇, где 푆 ∋ 푠 и 푇 ∋ 푡 
• Пропускная способность разреза — это сумма пропускных 
способностей дуг, ведущих из 푆 в 푇: 
푠 
푡 
2 
5 
2 
3 1 
1 
3 
2 
8 
5 
6 
푆 
푇 
푒 ведёт из 푆 в 푇 
푐 푒
Верхние границы величины потока 
• Итак, величина любого потока не больше пропускной 
способности любого разреза, а значит и 
푓max ≤ 푐min, 
где 푐min — пропускная способность минимального разреза в сети
Теорема Форда—Фалкерсона 
Теорема. Имеет место равенство 
푓max = 푐min, 
то есть всегда можно указать поток в сети, достигающий верхней 
границы.
Алгоритм Форда—Фалкерсона 
Алгоритм Форда—Фалкерсона строит максимальный поток в сети с 
помощью последовательных улучшений: 
• Начинаем с произвольного потока 
• Пока можно улучшить — улучшаем 
• Если нельзя улучшить — останавливаемся
Алгоритм Форда—Фалкерсона 
• Начинаем с произвольного потока 
С помощью поиска в ширину по сети можно проверить, существует 
ли в ней ненулевой поток: 
푠 
푡 
2 
5 
2 
3 1 
1 
3 
2 
8 
5 
6 
푠 
푡 
1 
1 1
Алгоритм Форда—Фалкерсона 
• Пока поток можно улучшить — улучшаем 
Пусть в сети уже построен некоторый поток. Для этой сети и этого 
потока строим остаточную сеть: 
푠 
푡 
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
Алгоритм Форда—Фалкерсона 
Пусть в сети уже построен некоторый поток. Для этой сети и этого 
потока строим остаточную сеть. Если в исходной сети 
пропускная способность дуги 푒 была 푐0 , и по этой дуге шёл поток 
푓0 , то в остаточной сети считаем 
푐 푒 = 푐0 − 푓0 
и добавляем вспомогательную дугу 푒′ в обратном направлении, 
считая при этом 
푐 푒′ = 푓0
Алгоритм Форда—Фалкерсона 
Теперь пытаемся найти какой-нибудь ненулевой поток в 
остаточной сети. Если он есть, значит поток в исходной сети можно 
увеличить: 
푠 
푡 
1 
5 
2 
2 1 
1 
3 
2 
8 
5 
6 
1 
1 
푠 
푡 
1 
1 
1 
1 
1 
1
Алгоритм Форда—Фалкерсона 
Теперь пытаемся найти какой-нибудь ненулевой поток в 
остаточной сети. Если он есть, значит поток в исходной сети можно 
увеличить: 
푠 
푡 
1 
1 
1 
1 
1 
1 
푠 
푡 
1 
1 1 푠 
푡 
2 
2 1 
1 
1 
1 
1
Алгоритм Форда—Фалкерсона 
Если в остаточной сети не оказалось ненулевого потока, то это в 
ней нельзя дойти от 푠 до 푡 по дугам с положительными 
пропускными способностями. 
푠 
푡 
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
Алгоритм Форда—Фалкерсона 
Если в остаточной сети не оказалось ненулевого потока, то это в 
ней нельзя дойти от 푠 до 푡 по дугам с положительными 
пропускными способностями. Беря в качестве 푆 вершины, до 
которых можно дойти по ненулевым дугам из 푠, а в качестве 푇 все 
остальные вершины, получаем разрез. Его пропускная способность 
равна величине потока, по которому строилась остаточная сеть. 
푠 
푡 
2 
1 
2 
1 1 
1 
1 
2 
5 
5 
1 
2 
5 
3 
2
Алгоритм Форда—Фалкерсона 
Замечание. Проводить «обратные» дуги при построении 
остаточной сети важно, иначе максимальность получаемого потока 
не гарантируется. 
5 5 
5 
2 
2 
2 
2 2 
2 
2 
3 
?
Алгоритм Форда—Фалкерсона 
Замечание. Проводить «обратные» дуги при построении 
остаточной сети важно, иначе максимальность получаемого потока 
не гарантируется. 
5 5 
5 
2 
2 
2 
2 2 
2 
2 
3 
2
Теорема Форда—Фалкерсона 
• Если все пропускные способности в сети целочисленные, то и 
построенный алгоритмом Форда—Фалкерсона поток оказывается 
целочисленным (то есть 푓 푒 ∈ ℤ для каждой дуги 푒). 
• Если все пропускные способности в сети — рациональные дроби, 
то, домножив их на наименьшее общее кратное знаменателей, 
можно перейти к целым числам. 
• Если пропускные способности в сети иррациональные, то не 
гарантируется, что алгоритм Форда—Фалкерсона 
завершится.

Основы теории графов 01: напоминание определений, теорема Форда—Фалкерсона

  • 1.
    Основы теории графов осень 2013 Александр Дайняк www.dainiak.com
  • 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
  • 30.
    Потоки в сетях • Пример потока в сети: 푠 푡 2 4 0 2 1 1 2 2 3 5 5 푠 푡 2 5 2 3 1 1 3 2 8 5 6
  • 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.
    Теорема Форда—Фалкерсона •Если все пропускные способности в сети целочисленные, то и построенный алгоритмом Форда—Фалкерсона поток оказывается целочисленным (то есть 푓 푒 ∈ ℤ для каждой дуги 푒). • Если все пропускные способности в сети — рациональные дроби, то, домножив их на наименьшее общее кратное знаменателей, можно перейти к целым числам. • Если пропускные способности в сети иррациональные, то не гарантируется, что алгоритм Форда—Фалкерсона завершится.