20080316 efficientalgorithms kulikov_lecture18
TRANSCRIPT
![Page 1: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/1.jpg)
с/к “Эффективные алгоритмы”Лекция 18: Нахождение максимального потока
А. Куликов
Computer Science клуб при ПОМИhttp://logic.pdmi.ras.ru/∼infclub/
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 1 / 43
![Page 2: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/2.jpg)
План лекции
1 Введение
2 Метод Форда-Фалкерсона
3 Алгоритм проталкивания предпотока
4 Алгоритм “поднять-и-в-начало”
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 2 / 43
![Page 3: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/3.jpg)
План лекции
1 Введение
2 Метод Форда-Фалкерсона
3 Алгоритм проталкивания предпотока
4 Алгоритм “поднять-и-в-начало”
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 2 / 43
![Page 4: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/4.jpg)
План лекции
1 Введение
2 Метод Форда-Фалкерсона
3 Алгоритм проталкивания предпотока
4 Алгоритм “поднять-и-в-начало”
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 2 / 43
![Page 5: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/5.jpg)
План лекции
1 Введение
2 Метод Форда-Фалкерсона
3 Алгоритм проталкивания предпотока
4 Алгоритм “поднять-и-в-начало”
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 2 / 43
![Page 6: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/6.jpg)
План лекции
1 Введение
2 Метод Форда-Фалкерсона
3 Алгоритм проталкивания предпотока
4 Алгоритм “поднять-и-в-начало”
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 3 / 43
![Page 7: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/7.jpg)
Формулировка задачи
Определение
Сетью (flow network) называется ориентированный граф, каждомуребру (u, v) которого сопоставлено неотрицательное число c(u, v)(если (u, v) ̸∈ E , полагаем c(u, v) = 0), называемое пропускнойспособностью (capacity), с двумя выделенными вершинами,называемыми исток s (source) и сток t (sink).Потоком (flow) в сети G = (V , E ) называется функцияf : V × V → R, удовлетворяющая следующим свойствам:
I пропускные способности не нарушены: ∀u, v ∈ V , f (u, v) ≤ c(u, v);I кососимметричность: ∀u, v ∈ V , f (u, v) = −f (v , u);I сохранение потока: ∀u ∈ V ∖ {s, t},
∑︀v∈V f (u, v) = 0.
Величиной (value) потока называется∑︀
v∈V f (s, v).Задача о максимальном потоке (maximum flow-problem)заключается в нахождении по данной сети потока максимальнойвеличины.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 4 / 43
![Page 8: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/8.jpg)
Формулировка задачи
ОпределениеСетью (flow network) называется ориентированный граф, каждомуребру (u, v) которого сопоставлено неотрицательное число c(u, v)(если (u, v) ̸∈ E , полагаем c(u, v) = 0), называемое пропускнойспособностью (capacity), с двумя выделенными вершинами,называемыми исток s (source) и сток t (sink).
Потоком (flow) в сети G = (V , E ) называется функцияf : V × V → R, удовлетворяющая следующим свойствам:
I пропускные способности не нарушены: ∀u, v ∈ V , f (u, v) ≤ c(u, v);I кососимметричность: ∀u, v ∈ V , f (u, v) = −f (v , u);I сохранение потока: ∀u ∈ V ∖ {s, t},
∑︀v∈V f (u, v) = 0.
Величиной (value) потока называется∑︀
v∈V f (s, v).Задача о максимальном потоке (maximum flow-problem)заключается в нахождении по данной сети потока максимальнойвеличины.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 4 / 43
![Page 9: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/9.jpg)
Формулировка задачи
ОпределениеСетью (flow network) называется ориентированный граф, каждомуребру (u, v) которого сопоставлено неотрицательное число c(u, v)(если (u, v) ̸∈ E , полагаем c(u, v) = 0), называемое пропускнойспособностью (capacity), с двумя выделенными вершинами,называемыми исток s (source) и сток t (sink).Потоком (flow) в сети G = (V , E ) называется функцияf : V × V → R, удовлетворяющая следующим свойствам:
I пропускные способности не нарушены: ∀u, v ∈ V , f (u, v) ≤ c(u, v);I кососимметричность: ∀u, v ∈ V , f (u, v) = −f (v , u);I сохранение потока: ∀u ∈ V ∖ {s, t},
∑︀v∈V f (u, v) = 0.
Величиной (value) потока называется∑︀
v∈V f (s, v).Задача о максимальном потоке (maximum flow-problem)заключается в нахождении по данной сети потока максимальнойвеличины.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 4 / 43
![Page 10: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/10.jpg)
Формулировка задачи
ОпределениеСетью (flow network) называется ориентированный граф, каждомуребру (u, v) которого сопоставлено неотрицательное число c(u, v)(если (u, v) ̸∈ E , полагаем c(u, v) = 0), называемое пропускнойспособностью (capacity), с двумя выделенными вершинами,называемыми исток s (source) и сток t (sink).Потоком (flow) в сети G = (V , E ) называется функцияf : V × V → R, удовлетворяющая следующим свойствам:
I пропускные способности не нарушены: ∀u, v ∈ V , f (u, v) ≤ c(u, v);
I кососимметричность: ∀u, v ∈ V , f (u, v) = −f (v , u);I сохранение потока: ∀u ∈ V ∖ {s, t},
∑︀v∈V f (u, v) = 0.
Величиной (value) потока называется∑︀
v∈V f (s, v).Задача о максимальном потоке (maximum flow-problem)заключается в нахождении по данной сети потока максимальнойвеличины.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 4 / 43
![Page 11: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/11.jpg)
Формулировка задачи
ОпределениеСетью (flow network) называется ориентированный граф, каждомуребру (u, v) которого сопоставлено неотрицательное число c(u, v)(если (u, v) ̸∈ E , полагаем c(u, v) = 0), называемое пропускнойспособностью (capacity), с двумя выделенными вершинами,называемыми исток s (source) и сток t (sink).Потоком (flow) в сети G = (V , E ) называется функцияf : V × V → R, удовлетворяющая следующим свойствам:
I пропускные способности не нарушены: ∀u, v ∈ V , f (u, v) ≤ c(u, v);I кососимметричность: ∀u, v ∈ V , f (u, v) = −f (v , u);
I сохранение потока: ∀u ∈ V ∖ {s, t},∑︀
v∈V f (u, v) = 0.
Величиной (value) потока называется∑︀
v∈V f (s, v).Задача о максимальном потоке (maximum flow-problem)заключается в нахождении по данной сети потока максимальнойвеличины.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 4 / 43
![Page 12: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/12.jpg)
Формулировка задачи
ОпределениеСетью (flow network) называется ориентированный граф, каждомуребру (u, v) которого сопоставлено неотрицательное число c(u, v)(если (u, v) ̸∈ E , полагаем c(u, v) = 0), называемое пропускнойспособностью (capacity), с двумя выделенными вершинами,называемыми исток s (source) и сток t (sink).Потоком (flow) в сети G = (V , E ) называется функцияf : V × V → R, удовлетворяющая следующим свойствам:
I пропускные способности не нарушены: ∀u, v ∈ V , f (u, v) ≤ c(u, v);I кососимметричность: ∀u, v ∈ V , f (u, v) = −f (v , u);I сохранение потока: ∀u ∈ V ∖ {s, t},
∑︀v∈V f (u, v) = 0.
Величиной (value) потока называется∑︀
v∈V f (s, v).Задача о максимальном потоке (maximum flow-problem)заключается в нахождении по данной сети потока максимальнойвеличины.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 4 / 43
![Page 13: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/13.jpg)
Формулировка задачи
ОпределениеСетью (flow network) называется ориентированный граф, каждомуребру (u, v) которого сопоставлено неотрицательное число c(u, v)(если (u, v) ̸∈ E , полагаем c(u, v) = 0), называемое пропускнойспособностью (capacity), с двумя выделенными вершинами,называемыми исток s (source) и сток t (sink).Потоком (flow) в сети G = (V , E ) называется функцияf : V × V → R, удовлетворяющая следующим свойствам:
I пропускные способности не нарушены: ∀u, v ∈ V , f (u, v) ≤ c(u, v);I кососимметричность: ∀u, v ∈ V , f (u, v) = −f (v , u);I сохранение потока: ∀u ∈ V ∖ {s, t},
∑︀v∈V f (u, v) = 0.
Величиной (value) потока называется∑︀
v∈V f (s, v).
Задача о максимальном потоке (maximum flow-problem)заключается в нахождении по данной сети потока максимальнойвеличины.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 4 / 43
![Page 14: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/14.jpg)
Формулировка задачи
ОпределениеСетью (flow network) называется ориентированный граф, каждомуребру (u, v) которого сопоставлено неотрицательное число c(u, v)(если (u, v) ̸∈ E , полагаем c(u, v) = 0), называемое пропускнойспособностью (capacity), с двумя выделенными вершинами,называемыми исток s (source) и сток t (sink).Потоком (flow) в сети G = (V , E ) называется функцияf : V × V → R, удовлетворяющая следующим свойствам:
I пропускные способности не нарушены: ∀u, v ∈ V , f (u, v) ≤ c(u, v);I кососимметричность: ∀u, v ∈ V , f (u, v) = −f (v , u);I сохранение потока: ∀u ∈ V ∖ {s, t},
∑︀v∈V f (u, v) = 0.
Величиной (value) потока называется∑︀
v∈V f (s, v).Задача о максимальном потоке (maximum flow-problem)заключается в нахождении по данной сети потока максимальнойвеличины.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 4 / 43
![Page 15: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/15.jpg)
Пример потока
сеть поток
3 10
3
4
5
2
1
11
2
5
2 0
1
4
5
2
1
01
2
5
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 5 / 43
![Page 16: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/16.jpg)
Несколько замечаний
Несколько замечаний
Задача о максимальном потоке является типичной задачейлинейного программирования.Задача о максимальном потоке в сети с несколькими истоками истоками легко сводится к задаче с одним истоком и одним стоком(добавим общий исток, из которого направим рёбра бесконечнойпропускной способности во все истоки, и общий сток, в которыйнаправим рёбра бесконечной пропускной способности из всехстоков).Такую задачу, однако, не стоит путать с задачей нахождениямаксимального потока в сети с несколькими веществами(multicommodity flow).
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 6 / 43
![Page 17: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/17.jpg)
Несколько замечаний
Несколько замечанийЗадача о максимальном потоке является типичной задачейлинейного программирования.
Задача о максимальном потоке в сети с несколькими истоками истоками легко сводится к задаче с одним истоком и одним стоком(добавим общий исток, из которого направим рёбра бесконечнойпропускной способности во все истоки, и общий сток, в которыйнаправим рёбра бесконечной пропускной способности из всехстоков).Такую задачу, однако, не стоит путать с задачей нахождениямаксимального потока в сети с несколькими веществами(multicommodity flow).
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 6 / 43
![Page 18: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/18.jpg)
Несколько замечаний
Несколько замечанийЗадача о максимальном потоке является типичной задачейлинейного программирования.Задача о максимальном потоке в сети с несколькими истоками истоками легко сводится к задаче с одним истоком и одним стоком(добавим общий исток, из которого направим рёбра бесконечнойпропускной способности во все истоки, и общий сток, в которыйнаправим рёбра бесконечной пропускной способности из всехстоков).
Такую задачу, однако, не стоит путать с задачей нахождениямаксимального потока в сети с несколькими веществами(multicommodity flow).
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 6 / 43
![Page 19: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/19.jpg)
Несколько замечаний
Несколько замечанийЗадача о максимальном потоке является типичной задачейлинейного программирования.Задача о максимальном потоке в сети с несколькими истоками истоками легко сводится к задаче с одним истоком и одним стоком(добавим общий исток, из которого направим рёбра бесконечнойпропускной способности во все истоки, и общий сток, в которыйнаправим рёбра бесконечной пропускной способности из всехстоков).Такую задачу, однако, не стоит путать с задачей нахождениямаксимального потока в сети с несколькими веществами(multicommodity flow).
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 6 / 43
![Page 20: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/20.jpg)
План лекции
1 Введение
2 Метод Форда-Фалкерсона
3 Алгоритм проталкивания предпотока
4 Алгоритм “поднять-и-в-начало”
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 7 / 43
![Page 21: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/21.jpg)
Метод Форда-Фолкерсона
Ford-Fulkerson-Method(G , s, t)1 положить поток f равным 02 while существует дополняющий путь p3 do дополнить f вдоль p4 return f
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 8 / 43
![Page 22: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/22.jpg)
Остаточная сеть
ОпределениеПусть дана сеть G и поток f в ней.
Остаточной пропускной способностью из u в v (residual capacity of(u, v)) называется величина cf (u, v) = c(u, v)− f (u, v).Остаточной сетью (residual network) сети G , порожденной потокомf , называется сеть Gf = (V , Ef ), где
Ef = {(u, v) ∈ V × V : cf (u, v) > 0}.
Замечанияcf (u, v) может превосходить c(u, v).Остаточное ребро не обязано быть ребром исходной сети.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 9 / 43
![Page 23: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/23.jpg)
Остаточная сеть
ОпределениеПусть дана сеть G и поток f в ней.
Остаточной пропускной способностью из u в v (residual capacity of(u, v)) называется величина cf (u, v) = c(u, v)− f (u, v).
Остаточной сетью (residual network) сети G , порожденной потокомf , называется сеть Gf = (V , Ef ), где
Ef = {(u, v) ∈ V × V : cf (u, v) > 0}.
Замечанияcf (u, v) может превосходить c(u, v).Остаточное ребро не обязано быть ребром исходной сети.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 9 / 43
![Page 24: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/24.jpg)
Остаточная сеть
ОпределениеПусть дана сеть G и поток f в ней.
Остаточной пропускной способностью из u в v (residual capacity of(u, v)) называется величина cf (u, v) = c(u, v)− f (u, v).Остаточной сетью (residual network) сети G , порожденной потокомf , называется сеть Gf = (V , Ef ), где
Ef = {(u, v) ∈ V × V : cf (u, v) > 0}.
Замечанияcf (u, v) может превосходить c(u, v).Остаточное ребро не обязано быть ребром исходной сети.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 9 / 43
![Page 25: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/25.jpg)
Остаточная сеть
ОпределениеПусть дана сеть G и поток f в ней.
Остаточной пропускной способностью из u в v (residual capacity of(u, v)) называется величина cf (u, v) = c(u, v)− f (u, v).Остаточной сетью (residual network) сети G , порожденной потокомf , называется сеть Gf = (V , Ef ), где
Ef = {(u, v) ∈ V × V : cf (u, v) > 0}.
Замечания
cf (u, v) может превосходить c(u, v).Остаточное ребро не обязано быть ребром исходной сети.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 9 / 43
![Page 26: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/26.jpg)
Остаточная сеть
ОпределениеПусть дана сеть G и поток f в ней.
Остаточной пропускной способностью из u в v (residual capacity of(u, v)) называется величина cf (u, v) = c(u, v)− f (u, v).Остаточной сетью (residual network) сети G , порожденной потокомf , называется сеть Gf = (V , Ef ), где
Ef = {(u, v) ∈ V × V : cf (u, v) > 0}.
Замечанияcf (u, v) может превосходить c(u, v).
Остаточное ребро не обязано быть ребром исходной сети.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 9 / 43
![Page 27: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/27.jpg)
Остаточная сеть
ОпределениеПусть дана сеть G и поток f в ней.
Остаточной пропускной способностью из u в v (residual capacity of(u, v)) называется величина cf (u, v) = c(u, v)− f (u, v).Остаточной сетью (residual network) сети G , порожденной потокомf , называется сеть Gf = (V , Ef ), где
Ef = {(u, v) ∈ V × V : cf (u, v) > 0}.
Замечанияcf (u, v) может превосходить c(u, v).Остаточное ребро не обязано быть ребром исходной сети.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 9 / 43
![Page 28: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/28.jpg)
Дополняющие пути
Определение
Дополняющим путём (augmenting path) называется простой путьиз истока в сток в остаточной сети Gf .Остаточной пропускной способностью дополняющего пути p(residual capacity of f ) называется величина наибольшего потока,который можно пропустить по p: cf (p) = min{cf (u, v) : (u, v) ∈ p}.
Основное свойство дополняющего путиЕсли в остаточной сети есть дополняющий путь, то текущий поток немаксимален.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 10 / 43
![Page 29: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/29.jpg)
Дополняющие пути
ОпределениеДополняющим путём (augmenting path) называется простой путьиз истока в сток в остаточной сети Gf .
Остаточной пропускной способностью дополняющего пути p(residual capacity of f ) называется величина наибольшего потока,который можно пропустить по p: cf (p) = min{cf (u, v) : (u, v) ∈ p}.
Основное свойство дополняющего путиЕсли в остаточной сети есть дополняющий путь, то текущий поток немаксимален.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 10 / 43
![Page 30: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/30.jpg)
Дополняющие пути
ОпределениеДополняющим путём (augmenting path) называется простой путьиз истока в сток в остаточной сети Gf .Остаточной пропускной способностью дополняющего пути p(residual capacity of f ) называется величина наибольшего потока,который можно пропустить по p: cf (p) = min{cf (u, v) : (u, v) ∈ p}.
Основное свойство дополняющего путиЕсли в остаточной сети есть дополняющий путь, то текущий поток немаксимален.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 10 / 43
![Page 31: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/31.jpg)
Дополняющие пути
ОпределениеДополняющим путём (augmenting path) называется простой путьиз истока в сток в остаточной сети Gf .Остаточной пропускной способностью дополняющего пути p(residual capacity of f ) называется величина наибольшего потока,который можно пропустить по p: cf (p) = min{cf (u, v) : (u, v) ∈ p}.
Основное свойство дополняющего путиЕсли в остаточной сети есть дополняющий путь, то текущий поток немаксимален.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 10 / 43
![Page 32: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/32.jpg)
Разрезы в сетях
Определение
Разрезом (cut) сети называется разбиение множества вершин надве части S и T = V ∖ S , таких что s ∈ S и t ∈ T .Пропускной способностью разреза (cut capacity) называют суммупропускных способностей рёбер из S в T .Величиной потока через разрез (cut flow) называется суммапотоков по всем рёбрам, пересекающим разрез.Минимальным разрезом (minimum cut) называется разрезнаименьшей пропускной способности.
ЗамечаниеЛегко видеть, что поток через любой разрез совпадает с величинойпотока.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 11 / 43
![Page 33: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/33.jpg)
Разрезы в сетях
ОпределениеРазрезом (cut) сети называется разбиение множества вершин надве части S и T = V ∖ S , таких что s ∈ S и t ∈ T .
Пропускной способностью разреза (cut capacity) называют суммупропускных способностей рёбер из S в T .Величиной потока через разрез (cut flow) называется суммапотоков по всем рёбрам, пересекающим разрез.Минимальным разрезом (minimum cut) называется разрезнаименьшей пропускной способности.
ЗамечаниеЛегко видеть, что поток через любой разрез совпадает с величинойпотока.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 11 / 43
![Page 34: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/34.jpg)
Разрезы в сетях
ОпределениеРазрезом (cut) сети называется разбиение множества вершин надве части S и T = V ∖ S , таких что s ∈ S и t ∈ T .Пропускной способностью разреза (cut capacity) называют суммупропускных способностей рёбер из S в T .
Величиной потока через разрез (cut flow) называется суммапотоков по всем рёбрам, пересекающим разрез.Минимальным разрезом (minimum cut) называется разрезнаименьшей пропускной способности.
ЗамечаниеЛегко видеть, что поток через любой разрез совпадает с величинойпотока.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 11 / 43
![Page 35: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/35.jpg)
Разрезы в сетях
ОпределениеРазрезом (cut) сети называется разбиение множества вершин надве части S и T = V ∖ S , таких что s ∈ S и t ∈ T .Пропускной способностью разреза (cut capacity) называют суммупропускных способностей рёбер из S в T .Величиной потока через разрез (cut flow) называется суммапотоков по всем рёбрам, пересекающим разрез.
Минимальным разрезом (minimum cut) называется разрезнаименьшей пропускной способности.
ЗамечаниеЛегко видеть, что поток через любой разрез совпадает с величинойпотока.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 11 / 43
![Page 36: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/36.jpg)
Разрезы в сетях
ОпределениеРазрезом (cut) сети называется разбиение множества вершин надве части S и T = V ∖ S , таких что s ∈ S и t ∈ T .Пропускной способностью разреза (cut capacity) называют суммупропускных способностей рёбер из S в T .Величиной потока через разрез (cut flow) называется суммапотоков по всем рёбрам, пересекающим разрез.Минимальным разрезом (minimum cut) называется разрезнаименьшей пропускной способности.
ЗамечаниеЛегко видеть, что поток через любой разрез совпадает с величинойпотока.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 11 / 43
![Page 37: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/37.jpg)
Разрезы в сетях
ОпределениеРазрезом (cut) сети называется разбиение множества вершин надве части S и T = V ∖ S , таких что s ∈ S и t ∈ T .Пропускной способностью разреза (cut capacity) называют суммупропускных способностей рёбер из S в T .Величиной потока через разрез (cut flow) называется суммапотоков по всем рёбрам, пересекающим разрез.Минимальным разрезом (minimum cut) называется разрезнаименьшей пропускной способности.
ЗамечаниеЛегко видеть, что поток через любой разрез совпадает с величинойпотока.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 11 / 43
![Page 38: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/38.jpg)
Пример минимального разреза
3 10
3
4
5
2
1
11
2
5
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 12 / 43
![Page 39: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/39.jpg)
Теорема о максимальном потоке и минимальном разрезе
ТеоремаПусть f — поток сети G . Следующие утверждения равносильны:
1 Поток f максимален.2 Остаточная сеть Gf не содержит дополняющих путей.3 Существует разрез (S , T ), для которого |f | = c(S , T ).
ДоказательствоИдеи доказательства:
1⇒ 2: Если есть дополняющий путь, то поток не максимален.2⇒ 3: Если дополняющего пути нет, то в качестве S можно
взять все вершины, достижимые из s в остаточной сети.3⇒ 1: Величина любого потока меньше пропускной способности
любого разреза.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 13 / 43
![Page 40: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/40.jpg)
Теорема о максимальном потоке и минимальном разрезе
ТеоремаПусть f — поток сети G . Следующие утверждения равносильны:
1 Поток f максимален.
2 Остаточная сеть Gf не содержит дополняющих путей.3 Существует разрез (S , T ), для которого |f | = c(S , T ).
ДоказательствоИдеи доказательства:
1⇒ 2: Если есть дополняющий путь, то поток не максимален.2⇒ 3: Если дополняющего пути нет, то в качестве S можно
взять все вершины, достижимые из s в остаточной сети.3⇒ 1: Величина любого потока меньше пропускной способности
любого разреза.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 13 / 43
![Page 41: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/41.jpg)
Теорема о максимальном потоке и минимальном разрезе
ТеоремаПусть f — поток сети G . Следующие утверждения равносильны:
1 Поток f максимален.2 Остаточная сеть Gf не содержит дополняющих путей.
3 Существует разрез (S , T ), для которого |f | = c(S , T ).
ДоказательствоИдеи доказательства:
1⇒ 2: Если есть дополняющий путь, то поток не максимален.2⇒ 3: Если дополняющего пути нет, то в качестве S можно
взять все вершины, достижимые из s в остаточной сети.3⇒ 1: Величина любого потока меньше пропускной способности
любого разреза.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 13 / 43
![Page 42: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/42.jpg)
Теорема о максимальном потоке и минимальном разрезе
ТеоремаПусть f — поток сети G . Следующие утверждения равносильны:
1 Поток f максимален.2 Остаточная сеть Gf не содержит дополняющих путей.3 Существует разрез (S , T ), для которого |f | = c(S , T ).
ДоказательствоИдеи доказательства:
1⇒ 2: Если есть дополняющий путь, то поток не максимален.2⇒ 3: Если дополняющего пути нет, то в качестве S можно
взять все вершины, достижимые из s в остаточной сети.3⇒ 1: Величина любого потока меньше пропускной способности
любого разреза.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 13 / 43
![Page 43: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/43.jpg)
Теорема о максимальном потоке и минимальном разрезе
ТеоремаПусть f — поток сети G . Следующие утверждения равносильны:
1 Поток f максимален.2 Остаточная сеть Gf не содержит дополняющих путей.3 Существует разрез (S , T ), для которого |f | = c(S , T ).
ДоказательствоИдеи доказательства:
1⇒ 2: Если есть дополняющий путь, то поток не максимален.2⇒ 3: Если дополняющего пути нет, то в качестве S можно
взять все вершины, достижимые из s в остаточной сети.3⇒ 1: Величина любого потока меньше пропускной способности
любого разреза.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 13 / 43
![Page 44: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/44.jpg)
Теорема о максимальном потоке и минимальном разрезе
ТеоремаПусть f — поток сети G . Следующие утверждения равносильны:
1 Поток f максимален.2 Остаточная сеть Gf не содержит дополняющих путей.3 Существует разрез (S , T ), для которого |f | = c(S , T ).
ДоказательствоИдеи доказательства:
1⇒ 2: Если есть дополняющий путь, то поток не максимален.
2⇒ 3: Если дополняющего пути нет, то в качестве S можновзять все вершины, достижимые из s в остаточной сети.
3⇒ 1: Величина любого потока меньше пропускной способностилюбого разреза.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 13 / 43
![Page 45: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/45.jpg)
Теорема о максимальном потоке и минимальном разрезе
ТеоремаПусть f — поток сети G . Следующие утверждения равносильны:
1 Поток f максимален.2 Остаточная сеть Gf не содержит дополняющих путей.3 Существует разрез (S , T ), для которого |f | = c(S , T ).
ДоказательствоИдеи доказательства:
1⇒ 2: Если есть дополняющий путь, то поток не максимален.2⇒ 3: Если дополняющего пути нет, то в качестве S можно
взять все вершины, достижимые из s в остаточной сети.
3⇒ 1: Величина любого потока меньше пропускной способностилюбого разреза.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 13 / 43
![Page 46: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/46.jpg)
Теорема о максимальном потоке и минимальном разрезе
ТеоремаПусть f — поток сети G . Следующие утверждения равносильны:
1 Поток f максимален.2 Остаточная сеть Gf не содержит дополняющих путей.3 Существует разрез (S , T ), для которого |f | = c(S , T ).
ДоказательствоИдеи доказательства:
1⇒ 2: Если есть дополняющий путь, то поток не максимален.2⇒ 3: Если дополняющего пути нет, то в качестве S можно
взять все вершины, достижимые из s в остаточной сети.3⇒ 1: Величина любого потока меньше пропускной способности
любого разреза.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 13 / 43
![Page 47: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/47.jpg)
Общая схема алгоритма Форда-Фалкерсона
Ford-Fulkerson(G , s, t)1 for каждого ребра (u, v) ∈ E2 do f [u, v ]← 03 f [v , u]← 04 while в остаточной сети Gf существует путь p из s в t5 do cf (p)← min{cf (u, v) : (u, v) ∈ p}6 for каждого ребра (u, v) в пути p7 do f [u, v ]← f [u, v ] + cf (p)8 f [v , u]← −f [u, v ]9 return f
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 14 / 43
![Page 48: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/48.jpg)
Пример работы алгоритма
поток остаточная сеть
10
3
4
1
1
23
2
1
5
5
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 15 / 43
![Page 49: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/49.jpg)
Пример работы алгоритма
поток остаточная сеть
1
1
1
1
1
1
1
1
41
1
10
3
4
1
1
22
1
1
4
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 15 / 43
![Page 50: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/50.jpg)
Пример работы алгоритма
поток остаточная сеть
2
2
1
1
2
1
21
2
1
41
2
10
3
4
1
1
2
4
4
3
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 15 / 43
![Page 51: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/51.jpg)
Пример работы алгоритма
поток остаточная сеть
2
3
2
1
4
5
1
3
21
2
1
4
5
10
3
4
1
1
2
1
1
1
2
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 15 / 43
![Page 52: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/52.jpg)
Пример работы алгоритма
поток остаточная сеть
2
4
2
1
5
5
1
4
21
2
1
5
1
1
5
101 2
3
1 1
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 15 / 43
![Page 53: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/53.jpg)
Пример работы алгоритма
поток остаточная сеть
2
4
1
2
1
1
5
5
2 12
21
2
110
4
1
5
1
2
5
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 15 / 43
![Page 54: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/54.jpg)
Анализ времени работы
Анализ времени работы
Допустим, что все пропускные способности являются целымичислами.Тогда нетрудно видеть, что процедура Ford-Fulkerson имеетвремя работы O(|E | · |f *|), где f * — максимальный поток,поскольку на каждой итерации поток увеличивается хотя бы на 1.Нетрудно, однако, придумать сеть с малым количеством вершин ибольшими значениями пропускных способностей, для которойтакая оценка не будет удовлетворительной.Значит, нужен другой инвариант.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 16 / 43
![Page 55: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/55.jpg)
Анализ времени работы
Анализ времени работыДопустим, что все пропускные способности являются целымичислами.
Тогда нетрудно видеть, что процедура Ford-Fulkerson имеетвремя работы O(|E | · |f *|), где f * — максимальный поток,поскольку на каждой итерации поток увеличивается хотя бы на 1.Нетрудно, однако, придумать сеть с малым количеством вершин ибольшими значениями пропускных способностей, для которойтакая оценка не будет удовлетворительной.Значит, нужен другой инвариант.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 16 / 43
![Page 56: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/56.jpg)
Анализ времени работы
Анализ времени работыДопустим, что все пропускные способности являются целымичислами.Тогда нетрудно видеть, что процедура Ford-Fulkerson имеетвремя работы O(|E | · |f *|), где f * — максимальный поток,поскольку на каждой итерации поток увеличивается хотя бы на 1.
Нетрудно, однако, придумать сеть с малым количеством вершин ибольшими значениями пропускных способностей, для которойтакая оценка не будет удовлетворительной.Значит, нужен другой инвариант.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 16 / 43
![Page 57: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/57.jpg)
Анализ времени работы
Анализ времени работыДопустим, что все пропускные способности являются целымичислами.Тогда нетрудно видеть, что процедура Ford-Fulkerson имеетвремя работы O(|E | · |f *|), где f * — максимальный поток,поскольку на каждой итерации поток увеличивается хотя бы на 1.Нетрудно, однако, придумать сеть с малым количеством вершин ибольшими значениями пропускных способностей, для которойтакая оценка не будет удовлетворительной.
Значит, нужен другой инвариант.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 16 / 43
![Page 58: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/58.jpg)
Анализ времени работы
Анализ времени работыДопустим, что все пропускные способности являются целымичислами.Тогда нетрудно видеть, что процедура Ford-Fulkerson имеетвремя работы O(|E | · |f *|), где f * — максимальный поток,поскольку на каждой итерации поток увеличивается хотя бы на 1.Нетрудно, однако, придумать сеть с малым количеством вершин ибольшими значениями пропускных способностей, для которойтакая оценка не будет удовлетворительной.Значит, нужен другой инвариант.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 16 / 43
![Page 59: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/59.jpg)
Алгоритм Эдмондса-Карпа
Алгоритм Эдмондса-КарпаАлгоритм Эдмондса-Карпа является реализацией методаФорда-Фалкерсона, в которой в качестве дополняющего путивыбирается кратчайший путь в остаточной сети (длины всех рёберравны 1).
ТеоремаВремя работы алгоритма Эдмондса-Карпа есть O(|V | · |E |2).
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 17 / 43
![Page 60: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/60.jpg)
Алгоритм Эдмондса-Карпа
Алгоритм Эдмондса-КарпаАлгоритм Эдмондса-Карпа является реализацией методаФорда-Фалкерсона, в которой в качестве дополняющего путивыбирается кратчайший путь в остаточной сети (длины всех рёберравны 1).
ТеоремаВремя работы алгоритма Эдмондса-Карпа есть O(|V | · |E |2).
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 17 / 43
![Page 61: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/61.jpg)
Идеи доказательства
ДоказательствоИдеи доказательства:
Расстояние от истока до любой вершины не убывает в течениеработы алгоритма.Назовём ребро дополняющего пути критическим, если егопропускная способность совпадает с пропускной способностьюпути.Одно и то же ребро может стать критическим в ходе работыалгоритма не более O(|V |) раз.Всего же критическим могут быть не более O(|E |) рёбер.Поскольку каждая итерация требует времени O(|E |), общее времяработы есть O(|V ||E |2).
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 18 / 43
![Page 62: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/62.jpg)
Идеи доказательства
ДоказательствоИдеи доказательства:
Расстояние от истока до любой вершины не убывает в течениеработы алгоритма.
Назовём ребро дополняющего пути критическим, если егопропускная способность совпадает с пропускной способностьюпути.Одно и то же ребро может стать критическим в ходе работыалгоритма не более O(|V |) раз.Всего же критическим могут быть не более O(|E |) рёбер.Поскольку каждая итерация требует времени O(|E |), общее времяработы есть O(|V ||E |2).
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 18 / 43
![Page 63: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/63.jpg)
Идеи доказательства
ДоказательствоИдеи доказательства:
Расстояние от истока до любой вершины не убывает в течениеработы алгоритма.Назовём ребро дополняющего пути критическим, если егопропускная способность совпадает с пропускной способностьюпути.
Одно и то же ребро может стать критическим в ходе работыалгоритма не более O(|V |) раз.Всего же критическим могут быть не более O(|E |) рёбер.Поскольку каждая итерация требует времени O(|E |), общее времяработы есть O(|V ||E |2).
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 18 / 43
![Page 64: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/64.jpg)
Идеи доказательства
ДоказательствоИдеи доказательства:
Расстояние от истока до любой вершины не убывает в течениеработы алгоритма.Назовём ребро дополняющего пути критическим, если егопропускная способность совпадает с пропускной способностьюпути.Одно и то же ребро может стать критическим в ходе работыалгоритма не более O(|V |) раз.
Всего же критическим могут быть не более O(|E |) рёбер.Поскольку каждая итерация требует времени O(|E |), общее времяработы есть O(|V ||E |2).
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 18 / 43
![Page 65: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/65.jpg)
Идеи доказательства
ДоказательствоИдеи доказательства:
Расстояние от истока до любой вершины не убывает в течениеработы алгоритма.Назовём ребро дополняющего пути критическим, если егопропускная способность совпадает с пропускной способностьюпути.Одно и то же ребро может стать критическим в ходе работыалгоритма не более O(|V |) раз.Всего же критическим могут быть не более O(|E |) рёбер.
Поскольку каждая итерация требует времени O(|E |), общее времяработы есть O(|V ||E |2).
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 18 / 43
![Page 66: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/66.jpg)
Идеи доказательства
ДоказательствоИдеи доказательства:
Расстояние от истока до любой вершины не убывает в течениеработы алгоритма.Назовём ребро дополняющего пути критическим, если егопропускная способность совпадает с пропускной способностьюпути.Одно и то же ребро может стать критическим в ходе работыалгоритма не более O(|V |) раз.Всего же критическим могут быть не более O(|E |) рёбер.Поскольку каждая итерация требует времени O(|E |), общее времяработы есть O(|V ||E |2).
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 18 / 43
![Page 67: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/67.jpg)
План лекции
1 Введение
2 Метод Форда-Фалкерсона
3 Алгоритм проталкивания предпотока
4 Алгоритм “поднять-и-в-начало”
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 19 / 43
![Page 68: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/68.jpg)
Предпоток
Определение
Предпотоком (preflow) называется функция f : V × V → R,которая кососимметрична, не нарушает пропускных способностей,а также удовлетворяет ослабленному закону сохранения:∀u ∈ V ∖ {s}, f (V , u) =
∑︀v∈V f (v , u) ≥ 0
Величину e(u) = f (V , u) назовём избытком (excess flow) ввершине u.Вершину, отличную от истока и стока, назовём переполненной(overflowing), если избыток в ней положителен.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 20 / 43
![Page 69: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/69.jpg)
Предпоток
ОпределениеПредпотоком (preflow) называется функция f : V × V → R,которая кососимметрична, не нарушает пропускных способностей,а также удовлетворяет ослабленному закону сохранения:∀u ∈ V ∖ {s}, f (V , u) =
∑︀v∈V f (v , u) ≥ 0
Величину e(u) = f (V , u) назовём избытком (excess flow) ввершине u.Вершину, отличную от истока и стока, назовём переполненной(overflowing), если избыток в ней положителен.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 20 / 43
![Page 70: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/70.jpg)
Предпоток
ОпределениеПредпотоком (preflow) называется функция f : V × V → R,которая кососимметрична, не нарушает пропускных способностей,а также удовлетворяет ослабленному закону сохранения:∀u ∈ V ∖ {s}, f (V , u) =
∑︀v∈V f (v , u) ≥ 0
Величину e(u) = f (V , u) назовём избытком (excess flow) ввершине u.
Вершину, отличную от истока и стока, назовём переполненной(overflowing), если избыток в ней положителен.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 20 / 43
![Page 71: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/71.jpg)
Предпоток
ОпределениеПредпотоком (preflow) называется функция f : V × V → R,которая кососимметрична, не нарушает пропускных способностей,а также удовлетворяет ослабленному закону сохранения:∀u ∈ V ∖ {s}, f (V , u) =
∑︀v∈V f (v , u) ≥ 0
Величину e(u) = f (V , u) назовём избытком (excess flow) ввершине u.Вершину, отличную от истока и стока, назовём переполненной(overflowing), если избыток в ней положителен.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 20 / 43
![Page 72: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/72.jpg)
Основные идеи
Основные идеи
Итак, в ходе работы алгоритма в каждой вершине будетнакапливаться некоторый избыток.Все вершины также постепенно поднимаются на некоторуювысоту.Избыток из вершины можно направить только вниз.Если в некоторый момент избыток из вершины никуда ненаправить, алгоритм поднимает эту вершину.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 21 / 43
![Page 73: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/73.jpg)
Основные идеи
Основные идеиИтак, в ходе работы алгоритма в каждой вершине будетнакапливаться некоторый избыток.
Все вершины также постепенно поднимаются на некоторуювысоту.Избыток из вершины можно направить только вниз.Если в некоторый момент избыток из вершины никуда ненаправить, алгоритм поднимает эту вершину.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 21 / 43
![Page 74: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/74.jpg)
Основные идеи
Основные идеиИтак, в ходе работы алгоритма в каждой вершине будетнакапливаться некоторый избыток.Все вершины также постепенно поднимаются на некоторуювысоту.
Избыток из вершины можно направить только вниз.Если в некоторый момент избыток из вершины никуда ненаправить, алгоритм поднимает эту вершину.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 21 / 43
![Page 75: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/75.jpg)
Основные идеи
Основные идеиИтак, в ходе работы алгоритма в каждой вершине будетнакапливаться некоторый избыток.Все вершины также постепенно поднимаются на некоторуювысоту.Избыток из вершины можно направить только вниз.
Если в некоторый момент избыток из вершины никуда ненаправить, алгоритм поднимает эту вершину.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 21 / 43
![Page 76: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/76.jpg)
Основные идеи
Основные идеиИтак, в ходе работы алгоритма в каждой вершине будетнакапливаться некоторый избыток.Все вершины также постепенно поднимаются на некоторуювысоту.Избыток из вершины можно направить только вниз.Если в некоторый момент избыток из вершины никуда ненаправить, алгоритм поднимает эту вершину.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 21 / 43
![Page 77: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/77.jpg)
Высота вершин
ОпределениеПусть f — предпоток сети G . Функция h : V → N0 называетсявысотной функцией (height function) для предпотока f , еслиh(s) = |V |, h(t) = 0 и h(u) ≤ h(v) + 1 для любого ребра (u, v)остаточной сети Ef .
ЗамечаниеПо круто идущим вниз рёбрам, таким образом, идёт максимальновозможный поток: если h(u) > h(v) + 1, то остаточная сеть Ef несодержит ребра (u, v).
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 22 / 43
![Page 78: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/78.jpg)
Высота вершин
ОпределениеПусть f — предпоток сети G . Функция h : V → N0 называетсявысотной функцией (height function) для предпотока f , еслиh(s) = |V |, h(t) = 0 и h(u) ≤ h(v) + 1 для любого ребра (u, v)остаточной сети Ef .
ЗамечаниеПо круто идущим вниз рёбрам, таким образом, идёт максимальновозможный поток: если h(u) > h(v) + 1, то остаточная сеть Ef несодержит ребра (u, v).
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 22 / 43
![Page 79: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/79.jpg)
Операция проталкивания
Push(u, v)
1 � дано: вершина u переполнена, cf (u, v) > 0, h[u] = h[v ] + 12 df (u, v)← min{e[u], cf (u, v)}3 f [u, v ]← f [u, v ] + df (u, v)4 f [v , u]← −f [u, v ]5 e[u]← e[u]− df (u, v)6 e[v ]← e[v ] + df (u, v)
ОпределениеДанная операция называется проталкиванием из u в v .Проталкивание называется насыщающим (saturating), если врезультате ребро становится насыщенным.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 23 / 43
![Page 80: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/80.jpg)
Операция проталкивания
Push(u, v)
1 � дано: вершина u переполнена, cf (u, v) > 0, h[u] = h[v ] + 12 df (u, v)← min{e[u], cf (u, v)}3 f [u, v ]← f [u, v ] + df (u, v)4 f [v , u]← −f [u, v ]5 e[u]← e[u]− df (u, v)6 e[v ]← e[v ] + df (u, v)
Определение
Данная операция называется проталкиванием из u в v .Проталкивание называется насыщающим (saturating), если врезультате ребро становится насыщенным.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 23 / 43
![Page 81: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/81.jpg)
Операция проталкивания
Push(u, v)
1 � дано: вершина u переполнена, cf (u, v) > 0, h[u] = h[v ] + 12 df (u, v)← min{e[u], cf (u, v)}3 f [u, v ]← f [u, v ] + df (u, v)4 f [v , u]← −f [u, v ]5 e[u]← e[u]− df (u, v)6 e[v ]← e[v ] + df (u, v)
ОпределениеДанная операция называется проталкиванием из u в v .
Проталкивание называется насыщающим (saturating), если врезультате ребро становится насыщенным.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 23 / 43
![Page 82: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/82.jpg)
Операция проталкивания
Push(u, v)
1 � дано: вершина u переполнена, cf (u, v) > 0, h[u] = h[v ] + 12 df (u, v)← min{e[u], cf (u, v)}3 f [u, v ]← f [u, v ] + df (u, v)4 f [v , u]← −f [u, v ]5 e[u]← e[u]− df (u, v)6 e[v ]← e[v ] + df (u, v)
ОпределениеДанная операция называется проталкиванием из u в v .Проталкивание называется насыщающим (saturating), если врезультате ребро становится насыщенным.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 23 / 43
![Page 83: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/83.jpg)
Операция подъёма
Lift(u)
1 � дано: вершина u переполнена, ∀(u, v) ∈ Ef , h[u] ≤ h[v ]2 h[u]← 1 + min{h[v ] | (u, v) ∈ Ef }
Замечаниеe[u] = f (V , u) > 0, значит, существует такая вершина v , чтоf (v , u) > 0.Тогда cf (u, v) = c(u, v)− f (u, v) = c(u, v) + f (v , u) > 0, аследовательно, (u, v) ∈ Ef .Значит, минимум берётся по непустому множеству.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 24 / 43
![Page 84: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/84.jpg)
Операция подъёма
Lift(u)
1 � дано: вершина u переполнена, ∀(u, v) ∈ Ef , h[u] ≤ h[v ]2 h[u]← 1 + min{h[v ] | (u, v) ∈ Ef }
Замечание
e[u] = f (V , u) > 0, значит, существует такая вершина v , чтоf (v , u) > 0.Тогда cf (u, v) = c(u, v)− f (u, v) = c(u, v) + f (v , u) > 0, аследовательно, (u, v) ∈ Ef .Значит, минимум берётся по непустому множеству.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 24 / 43
![Page 85: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/85.jpg)
Операция подъёма
Lift(u)
1 � дано: вершина u переполнена, ∀(u, v) ∈ Ef , h[u] ≤ h[v ]2 h[u]← 1 + min{h[v ] | (u, v) ∈ Ef }
Замечаниеe[u] = f (V , u) > 0, значит, существует такая вершина v , чтоf (v , u) > 0.
Тогда cf (u, v) = c(u, v)− f (u, v) = c(u, v) + f (v , u) > 0, аследовательно, (u, v) ∈ Ef .Значит, минимум берётся по непустому множеству.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 24 / 43
![Page 86: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/86.jpg)
Операция подъёма
Lift(u)
1 � дано: вершина u переполнена, ∀(u, v) ∈ Ef , h[u] ≤ h[v ]2 h[u]← 1 + min{h[v ] | (u, v) ∈ Ef }
Замечаниеe[u] = f (V , u) > 0, значит, существует такая вершина v , чтоf (v , u) > 0.Тогда cf (u, v) = c(u, v)− f (u, v) = c(u, v) + f (v , u) > 0, аследовательно, (u, v) ∈ Ef .
Значит, минимум берётся по непустому множеству.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 24 / 43
![Page 87: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/87.jpg)
Операция подъёма
Lift(u)
1 � дано: вершина u переполнена, ∀(u, v) ∈ Ef , h[u] ≤ h[v ]2 h[u]← 1 + min{h[v ] | (u, v) ∈ Ef }
Замечаниеe[u] = f (V , u) > 0, значит, существует такая вершина v , чтоf (v , u) > 0.Тогда cf (u, v) = c(u, v)− f (u, v) = c(u, v) + f (v , u) > 0, аследовательно, (u, v) ∈ Ef .Значит, минимум берётся по непустому множеству.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 24 / 43
![Page 88: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/88.jpg)
Общая схема алгоритма
Generic-Preflow-Push(G )
1 положить поток по всем выходящим из истока рёбрамравным их пропускной способности,по всем остальным — равным нулю
2 исток поднять на высоту |V |, все остальные вершиныоставить на нулевой высоте
3 while возможны операции подъёма или проталкивания4 do выполнить одну из этих операций
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 25 / 43
![Page 89: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/89.jpg)
Корректность
Корректность
Если u переполнена, то в ней возможно либо проталкивание, либоподъём.В течение работы алгоритма высотная функция остаётся таковойи не убывает ни для какой вершины.В течение работы алгоритма в остаточной сети не существуетпути из истока в сток: если бы был, то был бы и путь длиныменее |V |, высота вдоль которого падала бы с |V | до нуля, нотогда бы в этом пути нашлось ребро с перепадом высот хотя бы 2.Когда алгоритм закончит работу, текущий предпоток будетпотоком. Поскольку в остаточной сети не будет дополняющихпутей, он будет максимальным.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 26 / 43
![Page 90: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/90.jpg)
Корректность
КорректностьЕсли u переполнена, то в ней возможно либо проталкивание, либоподъём.
В течение работы алгоритма высотная функция остаётся таковойи не убывает ни для какой вершины.В течение работы алгоритма в остаточной сети не существуетпути из истока в сток: если бы был, то был бы и путь длиныменее |V |, высота вдоль которого падала бы с |V | до нуля, нотогда бы в этом пути нашлось ребро с перепадом высот хотя бы 2.Когда алгоритм закончит работу, текущий предпоток будетпотоком. Поскольку в остаточной сети не будет дополняющихпутей, он будет максимальным.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 26 / 43
![Page 91: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/91.jpg)
Корректность
КорректностьЕсли u переполнена, то в ней возможно либо проталкивание, либоподъём.В течение работы алгоритма высотная функция остаётся таковойи не убывает ни для какой вершины.
В течение работы алгоритма в остаточной сети не существуетпути из истока в сток: если бы был, то был бы и путь длиныменее |V |, высота вдоль которого падала бы с |V | до нуля, нотогда бы в этом пути нашлось ребро с перепадом высот хотя бы 2.Когда алгоритм закончит работу, текущий предпоток будетпотоком. Поскольку в остаточной сети не будет дополняющихпутей, он будет максимальным.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 26 / 43
![Page 92: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/92.jpg)
Корректность
КорректностьЕсли u переполнена, то в ней возможно либо проталкивание, либоподъём.В течение работы алгоритма высотная функция остаётся таковойи не убывает ни для какой вершины.В течение работы алгоритма в остаточной сети не существуетпути из истока в сток: если бы был, то был бы и путь длиныменее |V |, высота вдоль которого падала бы с |V | до нуля, нотогда бы в этом пути нашлось ребро с перепадом высот хотя бы 2.
Когда алгоритм закончит работу, текущий предпоток будетпотоком. Поскольку в остаточной сети не будет дополняющихпутей, он будет максимальным.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 26 / 43
![Page 93: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/93.jpg)
Корректность
КорректностьЕсли u переполнена, то в ней возможно либо проталкивание, либоподъём.В течение работы алгоритма высотная функция остаётся таковойи не убывает ни для какой вершины.В течение работы алгоритма в остаточной сети не существуетпути из истока в сток: если бы был, то был бы и путь длиныменее |V |, высота вдоль которого падала бы с |V | до нуля, нотогда бы в этом пути нашлось ребро с перепадом высот хотя бы 2.Когда алгоритм закончит работу, текущий предпоток будетпотоком. Поскольку в остаточной сети не будет дополняющихпутей, он будет максимальным.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 26 / 43
![Page 94: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/94.jpg)
Оценка высоты
ЛеммаВысота любой вершины в течение работы алгоритма не превосходит2|V | − 1.
ДоказательствоЕсли вершина u переполнена, то в Gf есть простой пусть из u в s(поскольку в G есть путь из s в u, по которому идётположительный поток).Высота не может убывать вдоль этого пути более чем на 1.Следовательно, высота u не превосходит 2|V | − 1.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 27 / 43
![Page 95: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/95.jpg)
Оценка высоты
ЛеммаВысота любой вершины в течение работы алгоритма не превосходит2|V | − 1.
Доказательство
Если вершина u переполнена, то в Gf есть простой пусть из u в s(поскольку в G есть путь из s в u, по которому идётположительный поток).Высота не может убывать вдоль этого пути более чем на 1.Следовательно, высота u не превосходит 2|V | − 1.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 27 / 43
![Page 96: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/96.jpg)
Оценка высоты
ЛеммаВысота любой вершины в течение работы алгоритма не превосходит2|V | − 1.
ДоказательствоЕсли вершина u переполнена, то в Gf есть простой пусть из u в s(поскольку в G есть путь из s в u, по которому идётположительный поток).
Высота не может убывать вдоль этого пути более чем на 1.Следовательно, высота u не превосходит 2|V | − 1.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 27 / 43
![Page 97: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/97.jpg)
Оценка высоты
ЛеммаВысота любой вершины в течение работы алгоритма не превосходит2|V | − 1.
ДоказательствоЕсли вершина u переполнена, то в Gf есть простой пусть из u в s(поскольку в G есть путь из s в u, по которому идётположительный поток).Высота не может убывать вдоль этого пути более чем на 1.
Следовательно, высота u не превосходит 2|V | − 1.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 27 / 43
![Page 98: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/98.jpg)
Оценка высоты
ЛеммаВысота любой вершины в течение работы алгоритма не превосходит2|V | − 1.
ДоказательствоЕсли вершина u переполнена, то в Gf есть простой пусть из u в s(поскольку в G есть путь из s в u, по которому идётположительный поток).Высота не может убывать вдоль этого пути более чем на 1.Следовательно, высота u не превосходит 2|V | − 1.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 27 / 43
![Page 99: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/99.jpg)
Оценка числа подъёмов
ЛеммаОбщее число операций подъёма не превосходит 2|V |2.
ДоказательствоКаждую вершину поднять можно не более 2|V | − 1 раз, всего жевершин, которые можно поднимать, |V | − 2.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 28 / 43
![Page 100: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/100.jpg)
Оценка числа подъёмов
ЛеммаОбщее число операций подъёма не превосходит 2|V |2.
ДоказательствоКаждую вершину поднять можно не более 2|V | − 1 раз, всего жевершин, которые можно поднимать, |V | − 2.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 28 / 43
![Page 101: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/101.jpg)
Оценка числа насыщающих проталкиваний
ЛеммаОбщее число насыщающих проталкиваний не превосходит 2|V ||E |.
ДоказательствоРассмотрим насыщающее проталкивание между вершинами u и v .Если произошло насыщающее проталкивание из u в v , то в этотмомент h(u) = h(v) + 1.После такого проталкивания ребро (u, v) из остаточной сетипропадёт.Чтобы такое ребро снова появилось, нужно протолкнуть поток изv в u, но для этого необходимо выполнение условияh(v) = h(u) + 1, то есть h[v ] нужно увеличить хотя бы на 2.Всего, таким образом, между двумя вершинами может быть неболее 2|V | проталкиваний.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 29 / 43
![Page 102: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/102.jpg)
Оценка числа насыщающих проталкиваний
ЛеммаОбщее число насыщающих проталкиваний не превосходит 2|V ||E |.
Доказательство
Рассмотрим насыщающее проталкивание между вершинами u и v .Если произошло насыщающее проталкивание из u в v , то в этотмомент h(u) = h(v) + 1.После такого проталкивания ребро (u, v) из остаточной сетипропадёт.Чтобы такое ребро снова появилось, нужно протолкнуть поток изv в u, но для этого необходимо выполнение условияh(v) = h(u) + 1, то есть h[v ] нужно увеличить хотя бы на 2.Всего, таким образом, между двумя вершинами может быть неболее 2|V | проталкиваний.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 29 / 43
![Page 103: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/103.jpg)
Оценка числа насыщающих проталкиваний
ЛеммаОбщее число насыщающих проталкиваний не превосходит 2|V ||E |.
ДоказательствоРассмотрим насыщающее проталкивание между вершинами u и v .
Если произошло насыщающее проталкивание из u в v , то в этотмомент h(u) = h(v) + 1.После такого проталкивания ребро (u, v) из остаточной сетипропадёт.Чтобы такое ребро снова появилось, нужно протолкнуть поток изv в u, но для этого необходимо выполнение условияh(v) = h(u) + 1, то есть h[v ] нужно увеличить хотя бы на 2.Всего, таким образом, между двумя вершинами может быть неболее 2|V | проталкиваний.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 29 / 43
![Page 104: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/104.jpg)
Оценка числа насыщающих проталкиваний
ЛеммаОбщее число насыщающих проталкиваний не превосходит 2|V ||E |.
ДоказательствоРассмотрим насыщающее проталкивание между вершинами u и v .Если произошло насыщающее проталкивание из u в v , то в этотмомент h(u) = h(v) + 1.
После такого проталкивания ребро (u, v) из остаточной сетипропадёт.Чтобы такое ребро снова появилось, нужно протолкнуть поток изv в u, но для этого необходимо выполнение условияh(v) = h(u) + 1, то есть h[v ] нужно увеличить хотя бы на 2.Всего, таким образом, между двумя вершинами может быть неболее 2|V | проталкиваний.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 29 / 43
![Page 105: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/105.jpg)
Оценка числа насыщающих проталкиваний
ЛеммаОбщее число насыщающих проталкиваний не превосходит 2|V ||E |.
ДоказательствоРассмотрим насыщающее проталкивание между вершинами u и v .Если произошло насыщающее проталкивание из u в v , то в этотмомент h(u) = h(v) + 1.После такого проталкивания ребро (u, v) из остаточной сетипропадёт.
Чтобы такое ребро снова появилось, нужно протолкнуть поток изv в u, но для этого необходимо выполнение условияh(v) = h(u) + 1, то есть h[v ] нужно увеличить хотя бы на 2.Всего, таким образом, между двумя вершинами может быть неболее 2|V | проталкиваний.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 29 / 43
![Page 106: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/106.jpg)
Оценка числа насыщающих проталкиваний
ЛеммаОбщее число насыщающих проталкиваний не превосходит 2|V ||E |.
ДоказательствоРассмотрим насыщающее проталкивание между вершинами u и v .Если произошло насыщающее проталкивание из u в v , то в этотмомент h(u) = h(v) + 1.После такого проталкивания ребро (u, v) из остаточной сетипропадёт.Чтобы такое ребро снова появилось, нужно протолкнуть поток изv в u, но для этого необходимо выполнение условияh(v) = h(u) + 1, то есть h[v ] нужно увеличить хотя бы на 2.
Всего, таким образом, между двумя вершинами может быть неболее 2|V | проталкиваний.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 29 / 43
![Page 107: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/107.jpg)
Оценка числа насыщающих проталкиваний
ЛеммаОбщее число насыщающих проталкиваний не превосходит 2|V ||E |.
ДоказательствоРассмотрим насыщающее проталкивание между вершинами u и v .Если произошло насыщающее проталкивание из u в v , то в этотмомент h(u) = h(v) + 1.После такого проталкивания ребро (u, v) из остаточной сетипропадёт.Чтобы такое ребро снова появилось, нужно протолкнуть поток изv в u, но для этого необходимо выполнение условияh(v) = h(u) + 1, то есть h[v ] нужно увеличить хотя бы на 2.Всего, таким образом, между двумя вершинами может быть неболее 2|V | проталкиваний.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 29 / 43
![Page 108: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/108.jpg)
Оценка числа ненасыщающих проталкиваний
ЛеммаОбщее число ненасыщающих проталкиваний не превосходит4|V |2(|V |+ |E |).
ДоказательствоНазовём потенциалом сумму высот переполненных вершин.Подъём вершины увеличивает потенциал не более чем на 2|V |.Насыщающее проталкивание также увеличивает не более чем на2|V | (при появлении новой переполненной вершины).Ненасыщающее проталкиваие из u в v уменьшает потенциал хотябы на 1, поскольку при таком проталкивании u перестаёт бытьпереполненной, а стать переполненной может только v , высотакоторой на 1 меньше.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 30 / 43
![Page 109: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/109.jpg)
Оценка числа ненасыщающих проталкиваний
ЛеммаОбщее число ненасыщающих проталкиваний не превосходит4|V |2(|V |+ |E |).
Доказательство
Назовём потенциалом сумму высот переполненных вершин.Подъём вершины увеличивает потенциал не более чем на 2|V |.Насыщающее проталкивание также увеличивает не более чем на2|V | (при появлении новой переполненной вершины).Ненасыщающее проталкиваие из u в v уменьшает потенциал хотябы на 1, поскольку при таком проталкивании u перестаёт бытьпереполненной, а стать переполненной может только v , высотакоторой на 1 меньше.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 30 / 43
![Page 110: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/110.jpg)
Оценка числа ненасыщающих проталкиваний
ЛеммаОбщее число ненасыщающих проталкиваний не превосходит4|V |2(|V |+ |E |).
ДоказательствоНазовём потенциалом сумму высот переполненных вершин.
Подъём вершины увеличивает потенциал не более чем на 2|V |.Насыщающее проталкивание также увеличивает не более чем на2|V | (при появлении новой переполненной вершины).Ненасыщающее проталкиваие из u в v уменьшает потенциал хотябы на 1, поскольку при таком проталкивании u перестаёт бытьпереполненной, а стать переполненной может только v , высотакоторой на 1 меньше.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 30 / 43
![Page 111: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/111.jpg)
Оценка числа ненасыщающих проталкиваний
ЛеммаОбщее число ненасыщающих проталкиваний не превосходит4|V |2(|V |+ |E |).
ДоказательствоНазовём потенциалом сумму высот переполненных вершин.Подъём вершины увеличивает потенциал не более чем на 2|V |.
Насыщающее проталкивание также увеличивает не более чем на2|V | (при появлении новой переполненной вершины).Ненасыщающее проталкиваие из u в v уменьшает потенциал хотябы на 1, поскольку при таком проталкивании u перестаёт бытьпереполненной, а стать переполненной может только v , высотакоторой на 1 меньше.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 30 / 43
![Page 112: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/112.jpg)
Оценка числа ненасыщающих проталкиваний
ЛеммаОбщее число ненасыщающих проталкиваний не превосходит4|V |2(|V |+ |E |).
ДоказательствоНазовём потенциалом сумму высот переполненных вершин.Подъём вершины увеличивает потенциал не более чем на 2|V |.Насыщающее проталкивание также увеличивает не более чем на2|V | (при появлении новой переполненной вершины).
Ненасыщающее проталкиваие из u в v уменьшает потенциал хотябы на 1, поскольку при таком проталкивании u перестаёт бытьпереполненной, а стать переполненной может только v , высотакоторой на 1 меньше.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 30 / 43
![Page 113: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/113.jpg)
Оценка числа ненасыщающих проталкиваний
ЛеммаОбщее число ненасыщающих проталкиваний не превосходит4|V |2(|V |+ |E |).
ДоказательствоНазовём потенциалом сумму высот переполненных вершин.Подъём вершины увеличивает потенциал не более чем на 2|V |.Насыщающее проталкивание также увеличивает не более чем на2|V | (при появлении новой переполненной вершины).Ненасыщающее проталкиваие из u в v уменьшает потенциал хотябы на 1, поскольку при таком проталкивании u перестаёт бытьпереполненной, а стать переполненной может только v , высотакоторой на 1 меньше.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 30 / 43
![Page 114: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/114.jpg)
Доказательство (завершение)
Доказательство
Суммарное увеличение потенциала не превосходит(2|V |)(2|V |2) + (2|V |)(2|V ||E |) = 4|V |2(|V |+ |E |).Поскольку потенциал всегда не меньше нуля, его суммарноеуменьшение не превосходит его суммарного увеличения.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 31 / 43
![Page 115: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/115.jpg)
Доказательство (завершение)
ДоказательствоСуммарное увеличение потенциала не превосходит(2|V |)(2|V |2) + (2|V |)(2|V ||E |) = 4|V |2(|V |+ |E |).
Поскольку потенциал всегда не меньше нуля, его суммарноеуменьшение не превосходит его суммарного увеличения.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 31 / 43
![Page 116: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/116.jpg)
Доказательство (завершение)
ДоказательствоСуммарное увеличение потенциала не превосходит(2|V |)(2|V |2) + (2|V |)(2|V ||E |) = 4|V |2(|V |+ |E |).Поскольку потенциал всегда не меньше нуля, его суммарноеуменьшение не превосходит его суммарного увеличения.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 31 / 43
![Page 117: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/117.jpg)
Время работы
ТеоремаАлгоритм, основанный на проталкивании предпотока, можнореализовать так, чтобы время его работы было O(|V |2|E |).
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 32 / 43
![Page 118: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/118.jpg)
План лекции
1 Введение
2 Метод Форда-Фалкерсона
3 Алгоритм проталкивания предпотока
4 Алгоритм “поднять-и-в-начало”
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 33 / 43
![Page 119: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/119.jpg)
Общие идеи
Общие идеи
Алгоритм “поднять-и-в-начало” основан на методе проталкиванияпредпотока и применяет операции подъёма и проталкивания вразумном порядке.Все вершины хранятся в списке.Алгоритм просматривает список и находит переполненнуювершину, после чего применяет к ней операции подъёма ипроталкивания до тех пор, пока избыток в ней не обнулится.Если при этом вершина была поднята, вершина перемещается вначало списка.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 34 / 43
![Page 120: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/120.jpg)
Общие идеи
Общие идеиАлгоритм “поднять-и-в-начало” основан на методе проталкиванияпредпотока и применяет операции подъёма и проталкивания вразумном порядке.
Все вершины хранятся в списке.Алгоритм просматривает список и находит переполненнуювершину, после чего применяет к ней операции подъёма ипроталкивания до тех пор, пока избыток в ней не обнулится.Если при этом вершина была поднята, вершина перемещается вначало списка.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 34 / 43
![Page 121: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/121.jpg)
Общие идеи
Общие идеиАлгоритм “поднять-и-в-начало” основан на методе проталкиванияпредпотока и применяет операции подъёма и проталкивания вразумном порядке.Все вершины хранятся в списке.
Алгоритм просматривает список и находит переполненнуювершину, после чего применяет к ней операции подъёма ипроталкивания до тех пор, пока избыток в ней не обнулится.Если при этом вершина была поднята, вершина перемещается вначало списка.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 34 / 43
![Page 122: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/122.jpg)
Общие идеи
Общие идеиАлгоритм “поднять-и-в-начало” основан на методе проталкиванияпредпотока и применяет операции подъёма и проталкивания вразумном порядке.Все вершины хранятся в списке.Алгоритм просматривает список и находит переполненнуювершину, после чего применяет к ней операции подъёма ипроталкивания до тех пор, пока избыток в ней не обнулится.
Если при этом вершина была поднята, вершина перемещается вначало списка.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 34 / 43
![Page 123: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/123.jpg)
Общие идеи
Общие идеиАлгоритм “поднять-и-в-начало” основан на методе проталкиванияпредпотока и применяет операции подъёма и проталкивания вразумном порядке.Все вершины хранятся в списке.Алгоритм просматривает список и находит переполненнуювершину, после чего применяет к ней операции подъёма ипроталкивания до тех пор, пока избыток в ней не обнулится.Если при этом вершина была поднята, вершина перемещается вначало списка.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 34 / 43
![Page 124: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/124.jpg)
Допустимые рёбра
Определение
Ребро (u, v) называется допустимым (admissible), если оно входитв остаточную сеть и h(u) = h(v) + 1.Оставшиеся рёбра называются недопустимыми (inadmissible).Сеть Gf ,h = (V , Ef ,h), где Ef ,h — множество допустимых рёбер,назовём сетью допустимых рёбер (admissible network).
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 35 / 43
![Page 125: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/125.jpg)
Допустимые рёбра
ОпределениеРебро (u, v) называется допустимым (admissible), если оно входитв остаточную сеть и h(u) = h(v) + 1.
Оставшиеся рёбра называются недопустимыми (inadmissible).Сеть Gf ,h = (V , Ef ,h), где Ef ,h — множество допустимых рёбер,назовём сетью допустимых рёбер (admissible network).
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 35 / 43
![Page 126: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/126.jpg)
Допустимые рёбра
ОпределениеРебро (u, v) называется допустимым (admissible), если оно входитв остаточную сеть и h(u) = h(v) + 1.Оставшиеся рёбра называются недопустимыми (inadmissible).
Сеть Gf ,h = (V , Ef ,h), где Ef ,h — множество допустимых рёбер,назовём сетью допустимых рёбер (admissible network).
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 35 / 43
![Page 127: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/127.jpg)
Допустимые рёбра
ОпределениеРебро (u, v) называется допустимым (admissible), если оно входитв остаточную сеть и h(u) = h(v) + 1.Оставшиеся рёбра называются недопустимыми (inadmissible).Сеть Gf ,h = (V , Ef ,h), где Ef ,h — множество допустимых рёбер,назовём сетью допустимых рёбер (admissible network).
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 35 / 43
![Page 128: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/128.jpg)
Разгрузка переполненной вершины
Discharge(u)
1 while e[u] > 02 do v ← current[u]3 if v = nil4 then Lift(u)5 current[u]← head [N[u]]6 elseif cf (u, v) > 0 и h[u] = h[v ] + 17 then Push(u, v)8 else current[u]← next-neighbor [v ]
ЗамечанияN[u] — список соседей вершины u (то есть таких вершин v , длякоторых (u, v) ∈ E или (v , u) ∈ E ).При вызове указатель current[u] находится в позиции,унаследованной от предыдущего вызова.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 36 / 43
![Page 129: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/129.jpg)
Разгрузка переполненной вершины
Discharge(u)
1 while e[u] > 02 do v ← current[u]3 if v = nil4 then Lift(u)5 current[u]← head [N[u]]6 elseif cf (u, v) > 0 и h[u] = h[v ] + 17 then Push(u, v)8 else current[u]← next-neighbor [v ]
Замечания
N[u] — список соседей вершины u (то есть таких вершин v , длякоторых (u, v) ∈ E или (v , u) ∈ E ).При вызове указатель current[u] находится в позиции,унаследованной от предыдущего вызова.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 36 / 43
![Page 130: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/130.jpg)
Разгрузка переполненной вершины
Discharge(u)
1 while e[u] > 02 do v ← current[u]3 if v = nil4 then Lift(u)5 current[u]← head [N[u]]6 elseif cf (u, v) > 0 и h[u] = h[v ] + 17 then Push(u, v)8 else current[u]← next-neighbor [v ]
ЗамечанияN[u] — список соседей вершины u (то есть таких вершин v , длякоторых (u, v) ∈ E или (v , u) ∈ E ).
При вызове указатель current[u] находится в позиции,унаследованной от предыдущего вызова.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 36 / 43
![Page 131: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/131.jpg)
Разгрузка переполненной вершины
Discharge(u)
1 while e[u] > 02 do v ← current[u]3 if v = nil4 then Lift(u)5 current[u]← head [N[u]]6 elseif cf (u, v) > 0 и h[u] = h[v ] + 17 then Push(u, v)8 else current[u]← next-neighbor [v ]
ЗамечанияN[u] — список соседей вершины u (то есть таких вершин v , длякоторых (u, v) ∈ E или (v , u) ∈ E ).При вызове указатель current[u] находится в позиции,унаследованной от предыдущего вызова.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 36 / 43
![Page 132: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/132.jpg)
Корректность процедуры
Корректность процедуры
Ясно, что проталкивание осуществляется только тогда, когда оновозможно.Покажем, что и подъём осуществляется корректно.Для этого достаточно показать, что в этот момент все выходящиеиз u остаточные рёбра недопустимы.Перед подъёмом вершины всё её соседи просматриваются, приэтом могут производиться проталкивания.Нетрудно видеть, что при этом никакое исходящее из u ребродопустимым стать не могло: проталкивания допустимых рёбер несоздают, а подъёмы других вершин создают лишь выходящие изних допустимые рёбра.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 37 / 43
![Page 133: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/133.jpg)
Корректность процедуры
Корректность процедурыЯсно, что проталкивание осуществляется только тогда, когда оновозможно.
Покажем, что и подъём осуществляется корректно.Для этого достаточно показать, что в этот момент все выходящиеиз u остаточные рёбра недопустимы.Перед подъёмом вершины всё её соседи просматриваются, приэтом могут производиться проталкивания.Нетрудно видеть, что при этом никакое исходящее из u ребродопустимым стать не могло: проталкивания допустимых рёбер несоздают, а подъёмы других вершин создают лишь выходящие изних допустимые рёбра.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 37 / 43
![Page 134: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/134.jpg)
Корректность процедуры
Корректность процедурыЯсно, что проталкивание осуществляется только тогда, когда оновозможно.Покажем, что и подъём осуществляется корректно.
Для этого достаточно показать, что в этот момент все выходящиеиз u остаточные рёбра недопустимы.Перед подъёмом вершины всё её соседи просматриваются, приэтом могут производиться проталкивания.Нетрудно видеть, что при этом никакое исходящее из u ребродопустимым стать не могло: проталкивания допустимых рёбер несоздают, а подъёмы других вершин создают лишь выходящие изних допустимые рёбра.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 37 / 43
![Page 135: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/135.jpg)
Корректность процедуры
Корректность процедурыЯсно, что проталкивание осуществляется только тогда, когда оновозможно.Покажем, что и подъём осуществляется корректно.Для этого достаточно показать, что в этот момент все выходящиеиз u остаточные рёбра недопустимы.
Перед подъёмом вершины всё её соседи просматриваются, приэтом могут производиться проталкивания.Нетрудно видеть, что при этом никакое исходящее из u ребродопустимым стать не могло: проталкивания допустимых рёбер несоздают, а подъёмы других вершин создают лишь выходящие изних допустимые рёбра.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 37 / 43
![Page 136: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/136.jpg)
Корректность процедуры
Корректность процедурыЯсно, что проталкивание осуществляется только тогда, когда оновозможно.Покажем, что и подъём осуществляется корректно.Для этого достаточно показать, что в этот момент все выходящиеиз u остаточные рёбра недопустимы.Перед подъёмом вершины всё её соседи просматриваются, приэтом могут производиться проталкивания.
Нетрудно видеть, что при этом никакое исходящее из u ребродопустимым стать не могло: проталкивания допустимых рёбер несоздают, а подъёмы других вершин создают лишь выходящие изних допустимые рёбра.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 37 / 43
![Page 137: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/137.jpg)
Корректность процедуры
Корректность процедурыЯсно, что проталкивание осуществляется только тогда, когда оновозможно.Покажем, что и подъём осуществляется корректно.Для этого достаточно показать, что в этот момент все выходящиеиз u остаточные рёбра недопустимы.Перед подъёмом вершины всё её соседи просматриваются, приэтом могут производиться проталкивания.Нетрудно видеть, что при этом никакое исходящее из u ребродопустимым стать не могло: проталкивания допустимых рёбер несоздают, а подъёмы других вершин создают лишь выходящие изних допустимые рёбра.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 37 / 43
![Page 138: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/138.jpg)
Алоритм “поднять-и-в-начало”
Lift-To-Front(G , s, t)1 задать начальный предпоток2 L← V [G ] ∖ {s, t}3 for каждой вершины u ∈ V [G ] ∖ {s, t}4 do current[u]← head [N[u]]5 u ← head [L]6 while u ̸= NIL7 do old -height ← h[u]8 Discharge(u)9 if h[u] > old -height
10 then переместить u в начало списка L11 u ← next[u]
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 38 / 43
![Page 139: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/139.jpg)
Корректность алгоритма
Корректность алгоритма
Покажем, что в ходе работы алгоритма список L остаётся линейноупорядоченным относительно текущей допустимой сети.Изначально это верно, поскольку допустимых рёбер нет вообще.Проталкивания не создают новых допустимых рёбер.При подъёме вершины все рёбра, входящие в неё, недопустимы.Поэтому после перемещения поднятой вершины в началоинвариант сохраняется.Таким образом, алгоритм заканчивает свою работу, разгрузивкаждую вершину списка.Причём при проталкивании потока из u избыток может появитьсятолько в вершинах, идущих в списке после u.В конце работы алгоритма ни проталкивание, ни подъём неприменимы.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 39 / 43
![Page 140: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/140.jpg)
Корректность алгоритма
Корректность алгоритмаПокажем, что в ходе работы алгоритма список L остаётся линейноупорядоченным относительно текущей допустимой сети.
Изначально это верно, поскольку допустимых рёбер нет вообще.Проталкивания не создают новых допустимых рёбер.При подъёме вершины все рёбра, входящие в неё, недопустимы.Поэтому после перемещения поднятой вершины в началоинвариант сохраняется.Таким образом, алгоритм заканчивает свою работу, разгрузивкаждую вершину списка.Причём при проталкивании потока из u избыток может появитьсятолько в вершинах, идущих в списке после u.В конце работы алгоритма ни проталкивание, ни подъём неприменимы.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 39 / 43
![Page 141: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/141.jpg)
Корректность алгоритма
Корректность алгоритмаПокажем, что в ходе работы алгоритма список L остаётся линейноупорядоченным относительно текущей допустимой сети.Изначально это верно, поскольку допустимых рёбер нет вообще.
Проталкивания не создают новых допустимых рёбер.При подъёме вершины все рёбра, входящие в неё, недопустимы.Поэтому после перемещения поднятой вершины в началоинвариант сохраняется.Таким образом, алгоритм заканчивает свою работу, разгрузивкаждую вершину списка.Причём при проталкивании потока из u избыток может появитьсятолько в вершинах, идущих в списке после u.В конце работы алгоритма ни проталкивание, ни подъём неприменимы.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 39 / 43
![Page 142: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/142.jpg)
Корректность алгоритма
Корректность алгоритмаПокажем, что в ходе работы алгоритма список L остаётся линейноупорядоченным относительно текущей допустимой сети.Изначально это верно, поскольку допустимых рёбер нет вообще.Проталкивания не создают новых допустимых рёбер.
При подъёме вершины все рёбра, входящие в неё, недопустимы.Поэтому после перемещения поднятой вершины в началоинвариант сохраняется.Таким образом, алгоритм заканчивает свою работу, разгрузивкаждую вершину списка.Причём при проталкивании потока из u избыток может появитьсятолько в вершинах, идущих в списке после u.В конце работы алгоритма ни проталкивание, ни подъём неприменимы.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 39 / 43
![Page 143: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/143.jpg)
Корректность алгоритма
Корректность алгоритмаПокажем, что в ходе работы алгоритма список L остаётся линейноупорядоченным относительно текущей допустимой сети.Изначально это верно, поскольку допустимых рёбер нет вообще.Проталкивания не создают новых допустимых рёбер.При подъёме вершины все рёбра, входящие в неё, недопустимы.
Поэтому после перемещения поднятой вершины в началоинвариант сохраняется.Таким образом, алгоритм заканчивает свою работу, разгрузивкаждую вершину списка.Причём при проталкивании потока из u избыток может появитьсятолько в вершинах, идущих в списке после u.В конце работы алгоритма ни проталкивание, ни подъём неприменимы.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 39 / 43
![Page 144: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/144.jpg)
Корректность алгоритма
Корректность алгоритмаПокажем, что в ходе работы алгоритма список L остаётся линейноупорядоченным относительно текущей допустимой сети.Изначально это верно, поскольку допустимых рёбер нет вообще.Проталкивания не создают новых допустимых рёбер.При подъёме вершины все рёбра, входящие в неё, недопустимы.Поэтому после перемещения поднятой вершины в началоинвариант сохраняется.
Таким образом, алгоритм заканчивает свою работу, разгрузивкаждую вершину списка.Причём при проталкивании потока из u избыток может появитьсятолько в вершинах, идущих в списке после u.В конце работы алгоритма ни проталкивание, ни подъём неприменимы.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 39 / 43
![Page 145: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/145.jpg)
Корректность алгоритма
Корректность алгоритмаПокажем, что в ходе работы алгоритма список L остаётся линейноупорядоченным относительно текущей допустимой сети.Изначально это верно, поскольку допустимых рёбер нет вообще.Проталкивания не создают новых допустимых рёбер.При подъёме вершины все рёбра, входящие в неё, недопустимы.Поэтому после перемещения поднятой вершины в началоинвариант сохраняется.Таким образом, алгоритм заканчивает свою работу, разгрузивкаждую вершину списка.
Причём при проталкивании потока из u избыток может появитьсятолько в вершинах, идущих в списке после u.В конце работы алгоритма ни проталкивание, ни подъём неприменимы.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 39 / 43
![Page 146: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/146.jpg)
Корректность алгоритма
Корректность алгоритмаПокажем, что в ходе работы алгоритма список L остаётся линейноупорядоченным относительно текущей допустимой сети.Изначально это верно, поскольку допустимых рёбер нет вообще.Проталкивания не создают новых допустимых рёбер.При подъёме вершины все рёбра, входящие в неё, недопустимы.Поэтому после перемещения поднятой вершины в началоинвариант сохраняется.Таким образом, алгоритм заканчивает свою работу, разгрузивкаждую вершину списка.Причём при проталкивании потока из u избыток может появитьсятолько в вершинах, идущих в списке после u.
В конце работы алгоритма ни проталкивание, ни подъём неприменимы.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 39 / 43
![Page 147: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/147.jpg)
Корректность алгоритма
Корректность алгоритмаПокажем, что в ходе работы алгоритма список L остаётся линейноупорядоченным относительно текущей допустимой сети.Изначально это верно, поскольку допустимых рёбер нет вообще.Проталкивания не создают новых допустимых рёбер.При подъёме вершины все рёбра, входящие в неё, недопустимы.Поэтому после перемещения поднятой вершины в началоинвариант сохраняется.Таким образом, алгоритм заканчивает свою работу, разгрузивкаждую вершину списка.Причём при проталкивании потока из u избыток может появитьсятолько в вершинах, идущих в списке после u.В конце работы алгоритма ни проталкивание, ни подъём неприменимы.
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 39 / 43
![Page 148: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/148.jpg)
Анализ времени работы
ТеоремаВремя работы алгоритма Lift-To-Front есть O(|V |3).
ДоказательствоКак мы уже знаем, общее количество подъёмов есть O(|V |2)(поскольку высота каждой вершины ограничена числом 2|V |).Между двумя последовательными подъёмами происходит неболее |V | вызовов процедуры разгрузки.При каждом проходе цикла процедуры разгрузки происходит либоподъём, либо проталкивание, либо перемещение указателя.Количество подъёмов есть O(|V |2), на все же подъемы требуетсявремени O(|V ||E |) (подъем одной вершины осуществляется завремя, пропорциональное её степени).
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 40 / 43
![Page 149: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/149.jpg)
Анализ времени работы
ТеоремаВремя работы алгоритма Lift-To-Front есть O(|V |3).
Доказательство
Как мы уже знаем, общее количество подъёмов есть O(|V |2)(поскольку высота каждой вершины ограничена числом 2|V |).Между двумя последовательными подъёмами происходит неболее |V | вызовов процедуры разгрузки.При каждом проходе цикла процедуры разгрузки происходит либоподъём, либо проталкивание, либо перемещение указателя.Количество подъёмов есть O(|V |2), на все же подъемы требуетсявремени O(|V ||E |) (подъем одной вершины осуществляется завремя, пропорциональное её степени).
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 40 / 43
![Page 150: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/150.jpg)
Анализ времени работы
ТеоремаВремя работы алгоритма Lift-To-Front есть O(|V |3).
ДоказательствоКак мы уже знаем, общее количество подъёмов есть O(|V |2)(поскольку высота каждой вершины ограничена числом 2|V |).
Между двумя последовательными подъёмами происходит неболее |V | вызовов процедуры разгрузки.При каждом проходе цикла процедуры разгрузки происходит либоподъём, либо проталкивание, либо перемещение указателя.Количество подъёмов есть O(|V |2), на все же подъемы требуетсявремени O(|V ||E |) (подъем одной вершины осуществляется завремя, пропорциональное её степени).
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 40 / 43
![Page 151: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/151.jpg)
Анализ времени работы
ТеоремаВремя работы алгоритма Lift-To-Front есть O(|V |3).
ДоказательствоКак мы уже знаем, общее количество подъёмов есть O(|V |2)(поскольку высота каждой вершины ограничена числом 2|V |).Между двумя последовательными подъёмами происходит неболее |V | вызовов процедуры разгрузки.
При каждом проходе цикла процедуры разгрузки происходит либоподъём, либо проталкивание, либо перемещение указателя.Количество подъёмов есть O(|V |2), на все же подъемы требуетсявремени O(|V ||E |) (подъем одной вершины осуществляется завремя, пропорциональное её степени).
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 40 / 43
![Page 152: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/152.jpg)
Анализ времени работы
ТеоремаВремя работы алгоритма Lift-To-Front есть O(|V |3).
ДоказательствоКак мы уже знаем, общее количество подъёмов есть O(|V |2)(поскольку высота каждой вершины ограничена числом 2|V |).Между двумя последовательными подъёмами происходит неболее |V | вызовов процедуры разгрузки.При каждом проходе цикла процедуры разгрузки происходит либоподъём, либо проталкивание, либо перемещение указателя.
Количество подъёмов есть O(|V |2), на все же подъемы требуетсявремени O(|V ||E |) (подъем одной вершины осуществляется завремя, пропорциональное её степени).
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 40 / 43
![Page 153: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/153.jpg)
Анализ времени работы
ТеоремаВремя работы алгоритма Lift-To-Front есть O(|V |3).
ДоказательствоКак мы уже знаем, общее количество подъёмов есть O(|V |2)(поскольку высота каждой вершины ограничена числом 2|V |).Между двумя последовательными подъёмами происходит неболее |V | вызовов процедуры разгрузки.При каждом проходе цикла процедуры разгрузки происходит либоподъём, либо проталкивание, либо перемещение указателя.Количество подъёмов есть O(|V |2), на все же подъемы требуетсявремени O(|V ||E |) (подъем одной вершины осуществляется завремя, пропорциональное её степени).
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 40 / 43
![Page 154: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/154.jpg)
Доказательство (завершение)
Доказательство
По тем же причинам общее перемещение указателей естьO(|V ||E |).Количество насыщающих проталкиваний есть O(|V ||E |).За один вызов процедуры разгрузки производится не болееодного ненасыщающего проталкивания, поэтому общееколичество ненасыщающих проталкиваний есть O(|V |3).
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 41 / 43
![Page 155: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/155.jpg)
Доказательство (завершение)
ДоказательствоПо тем же причинам общее перемещение указателей естьO(|V ||E |).
Количество насыщающих проталкиваний есть O(|V ||E |).За один вызов процедуры разгрузки производится не болееодного ненасыщающего проталкивания, поэтому общееколичество ненасыщающих проталкиваний есть O(|V |3).
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 41 / 43
![Page 156: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/156.jpg)
Доказательство (завершение)
ДоказательствоПо тем же причинам общее перемещение указателей естьO(|V ||E |).Количество насыщающих проталкиваний есть O(|V ||E |).
За один вызов процедуры разгрузки производится не болееодного ненасыщающего проталкивания, поэтому общееколичество ненасыщающих проталкиваний есть O(|V |3).
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 41 / 43
![Page 157: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/157.jpg)
Доказательство (завершение)
ДоказательствоПо тем же причинам общее перемещение указателей естьO(|V ||E |).Количество насыщающих проталкиваний есть O(|V ||E |).За один вызов процедуры разгрузки производится не болееодного ненасыщающего проталкивания, поэтому общееколичество ненасыщающих проталкиваний есть O(|V |3).
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 41 / 43
![Page 158: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/158.jpg)
Что мы узнали за сегодня?
Что мы узнали за сегодня?
алгоритм время работы
Эдмондса-Карпа |V ||E |2
проталкивание предпотока |V |2|E |“поднять-и-в-начало” |V |3
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 42 / 43
![Page 159: 20080316 efficientalgorithms kulikov_lecture18](https://reader031.vdocuments.site/reader031/viewer/2022030309/58f177c61a28ab604d8b45a5/html5/thumbnails/159.jpg)
Спасибо за внимание!
А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 43 / 43