Transcript
Page 1: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

с/к “Эффективные алгоритмы”Лекция 18: Нахождение максимального потока

А. Куликов

Computer Science клуб при ПОМИhttp://logic.pdmi.ras.ru/∼infclub/

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 1 / 43

Page 2: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

План лекции

1 Введение

2 Метод Форда-Фалкерсона

3 Алгоритм проталкивания предпотока

4 Алгоритм “поднять-и-в-начало”

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 2 / 43

Page 3: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

План лекции

1 Введение

2 Метод Форда-Фалкерсона

3 Алгоритм проталкивания предпотока

4 Алгоритм “поднять-и-в-начало”

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 2 / 43

Page 4: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

План лекции

1 Введение

2 Метод Форда-Фалкерсона

3 Алгоритм проталкивания предпотока

4 Алгоритм “поднять-и-в-начало”

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 2 / 43

Page 5: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

План лекции

1 Введение

2 Метод Форда-Фалкерсона

3 Алгоритм проталкивания предпотока

4 Алгоритм “поднять-и-в-начало”

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 2 / 43

Page 6: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

План лекции

1 Введение

2 Метод Форда-Фалкерсона

3 Алгоритм проталкивания предпотока

4 Алгоритм “поднять-и-в-начало”

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 3 / 43

Page 7: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Формулировка задачи

Определение

Сетью (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: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Формулировка задачи

ОпределениеСетью (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: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Формулировка задачи

ОпределениеСетью (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: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Формулировка задачи

ОпределениеСетью (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: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Формулировка задачи

ОпределениеСетью (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: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Формулировка задачи

ОпределениеСетью (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: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Формулировка задачи

ОпределениеСетью (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: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Формулировка задачи

ОпределениеСетью (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: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Пример потока

сеть поток

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: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Несколько замечаний

Несколько замечаний

Задача о максимальном потоке является типичной задачейлинейного программирования.Задача о максимальном потоке в сети с несколькими истоками истоками легко сводится к задаче с одним истоком и одним стоком(добавим общий исток, из которого направим рёбра бесконечнойпропускной способности во все истоки, и общий сток, в которыйнаправим рёбра бесконечной пропускной способности из всехстоков).Такую задачу, однако, не стоит путать с задачей нахождениямаксимального потока в сети с несколькими веществами(multicommodity flow).

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 6 / 43

Page 17: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Несколько замечаний

Несколько замечанийЗадача о максимальном потоке является типичной задачейлинейного программирования.

Задача о максимальном потоке в сети с несколькими истоками истоками легко сводится к задаче с одним истоком и одним стоком(добавим общий исток, из которого направим рёбра бесконечнойпропускной способности во все истоки, и общий сток, в которыйнаправим рёбра бесконечной пропускной способности из всехстоков).Такую задачу, однако, не стоит путать с задачей нахождениямаксимального потока в сети с несколькими веществами(multicommodity flow).

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 6 / 43

Page 18: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Несколько замечаний

Несколько замечанийЗадача о максимальном потоке является типичной задачейлинейного программирования.Задача о максимальном потоке в сети с несколькими истоками истоками легко сводится к задаче с одним истоком и одним стоком(добавим общий исток, из которого направим рёбра бесконечнойпропускной способности во все истоки, и общий сток, в которыйнаправим рёбра бесконечной пропускной способности из всехстоков).

Такую задачу, однако, не стоит путать с задачей нахождениямаксимального потока в сети с несколькими веществами(multicommodity flow).

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 6 / 43

Page 19: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Несколько замечаний

Несколько замечанийЗадача о максимальном потоке является типичной задачейлинейного программирования.Задача о максимальном потоке в сети с несколькими истоками истоками легко сводится к задаче с одним истоком и одним стоком(добавим общий исток, из которого направим рёбра бесконечнойпропускной способности во все истоки, и общий сток, в которыйнаправим рёбра бесконечной пропускной способности из всехстоков).Такую задачу, однако, не стоит путать с задачей нахождениямаксимального потока в сети с несколькими веществами(multicommodity flow).

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 6 / 43

Page 20: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

План лекции

1 Введение

2 Метод Форда-Фалкерсона

3 Алгоритм проталкивания предпотока

4 Алгоритм “поднять-и-в-начало”

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 7 / 43

Page 21: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Метод Форда-Фолкерсона

Ford-Fulkerson-Method(G , s, t)1 положить поток f равным 02 while существует дополняющий путь p3 do дополнить f вдоль p4 return f

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 8 / 43

Page 22: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Остаточная сеть

ОпределениеПусть дана сеть 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: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Остаточная сеть

ОпределениеПусть дана сеть 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: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Остаточная сеть

ОпределениеПусть дана сеть 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: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Остаточная сеть

ОпределениеПусть дана сеть 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: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Остаточная сеть

ОпределениеПусть дана сеть 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: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Остаточная сеть

ОпределениеПусть дана сеть 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: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Дополняющие пути

Определение

Дополняющим путём (augmenting path) называется простой путьиз истока в сток в остаточной сети Gf .Остаточной пропускной способностью дополняющего пути p(residual capacity of f ) называется величина наибольшего потока,который можно пропустить по p: cf (p) = min{cf (u, v) : (u, v) ∈ p}.

Основное свойство дополняющего путиЕсли в остаточной сети есть дополняющий путь, то текущий поток немаксимален.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 10 / 43

Page 29: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Дополняющие пути

ОпределениеДополняющим путём (augmenting path) называется простой путьиз истока в сток в остаточной сети Gf .

Остаточной пропускной способностью дополняющего пути p(residual capacity of f ) называется величина наибольшего потока,который можно пропустить по p: cf (p) = min{cf (u, v) : (u, v) ∈ p}.

Основное свойство дополняющего путиЕсли в остаточной сети есть дополняющий путь, то текущий поток немаксимален.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 10 / 43

Page 30: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Дополняющие пути

ОпределениеДополняющим путём (augmenting path) называется простой путьиз истока в сток в остаточной сети Gf .Остаточной пропускной способностью дополняющего пути p(residual capacity of f ) называется величина наибольшего потока,который можно пропустить по p: cf (p) = min{cf (u, v) : (u, v) ∈ p}.

Основное свойство дополняющего путиЕсли в остаточной сети есть дополняющий путь, то текущий поток немаксимален.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 10 / 43

Page 31: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Дополняющие пути

ОпределениеДополняющим путём (augmenting path) называется простой путьиз истока в сток в остаточной сети Gf .Остаточной пропускной способностью дополняющего пути p(residual capacity of f ) называется величина наибольшего потока,который можно пропустить по p: cf (p) = min{cf (u, v) : (u, v) ∈ p}.

Основное свойство дополняющего путиЕсли в остаточной сети есть дополняющий путь, то текущий поток немаксимален.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 10 / 43

Page 32: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Разрезы в сетях

Определение

Разрезом (cut) сети называется разбиение множества вершин надве части S и T = V ∖ S , таких что s ∈ S и t ∈ T .Пропускной способностью разреза (cut capacity) называют суммупропускных способностей рёбер из S в T .Величиной потока через разрез (cut flow) называется суммапотоков по всем рёбрам, пересекающим разрез.Минимальным разрезом (minimum cut) называется разрезнаименьшей пропускной способности.

ЗамечаниеЛегко видеть, что поток через любой разрез совпадает с величинойпотока.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 11 / 43

Page 33: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Разрезы в сетях

ОпределениеРазрезом (cut) сети называется разбиение множества вершин надве части S и T = V ∖ S , таких что s ∈ S и t ∈ T .

Пропускной способностью разреза (cut capacity) называют суммупропускных способностей рёбер из S в T .Величиной потока через разрез (cut flow) называется суммапотоков по всем рёбрам, пересекающим разрез.Минимальным разрезом (minimum cut) называется разрезнаименьшей пропускной способности.

ЗамечаниеЛегко видеть, что поток через любой разрез совпадает с величинойпотока.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 11 / 43

Page 34: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Разрезы в сетях

ОпределениеРазрезом (cut) сети называется разбиение множества вершин надве части S и T = V ∖ S , таких что s ∈ S и t ∈ T .Пропускной способностью разреза (cut capacity) называют суммупропускных способностей рёбер из S в T .

Величиной потока через разрез (cut flow) называется суммапотоков по всем рёбрам, пересекающим разрез.Минимальным разрезом (minimum cut) называется разрезнаименьшей пропускной способности.

ЗамечаниеЛегко видеть, что поток через любой разрез совпадает с величинойпотока.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 11 / 43

Page 35: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Разрезы в сетях

ОпределениеРазрезом (cut) сети называется разбиение множества вершин надве части S и T = V ∖ S , таких что s ∈ S и t ∈ T .Пропускной способностью разреза (cut capacity) называют суммупропускных способностей рёбер из S в T .Величиной потока через разрез (cut flow) называется суммапотоков по всем рёбрам, пересекающим разрез.

Минимальным разрезом (minimum cut) называется разрезнаименьшей пропускной способности.

ЗамечаниеЛегко видеть, что поток через любой разрез совпадает с величинойпотока.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 11 / 43

Page 36: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Разрезы в сетях

ОпределениеРазрезом (cut) сети называется разбиение множества вершин надве части S и T = V ∖ S , таких что s ∈ S и t ∈ T .Пропускной способностью разреза (cut capacity) называют суммупропускных способностей рёбер из S в T .Величиной потока через разрез (cut flow) называется суммапотоков по всем рёбрам, пересекающим разрез.Минимальным разрезом (minimum cut) называется разрезнаименьшей пропускной способности.

ЗамечаниеЛегко видеть, что поток через любой разрез совпадает с величинойпотока.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 11 / 43

Page 37: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Разрезы в сетях

ОпределениеРазрезом (cut) сети называется разбиение множества вершин надве части S и T = V ∖ S , таких что s ∈ S и t ∈ T .Пропускной способностью разреза (cut capacity) называют суммупропускных способностей рёбер из S в T .Величиной потока через разрез (cut flow) называется суммапотоков по всем рёбрам, пересекающим разрез.Минимальным разрезом (minimum cut) называется разрезнаименьшей пропускной способности.

ЗамечаниеЛегко видеть, что поток через любой разрез совпадает с величинойпотока.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 11 / 43

Page 38: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Пример минимального разреза

3 10

3

4

5

2

1

11

2

5

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 12 / 43

Page 39: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Теорема о максимальном потоке и минимальном разрезе

ТеоремаПусть 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: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Теорема о максимальном потоке и минимальном разрезе

ТеоремаПусть 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: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Теорема о максимальном потоке и минимальном разрезе

ТеоремаПусть 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: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Теорема о максимальном потоке и минимальном разрезе

ТеоремаПусть 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: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Теорема о максимальном потоке и минимальном разрезе

ТеоремаПусть 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: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Теорема о максимальном потоке и минимальном разрезе

ТеоремаПусть 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: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Теорема о максимальном потоке и минимальном разрезе

ТеоремаПусть 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: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Теорема о максимальном потоке и минимальном разрезе

ТеоремаПусть 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: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Общая схема алгоритма Форда-Фалкерсона

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: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Пример работы алгоритма

поток остаточная сеть

10

3

4

1

1

23

2

1

5

5

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 15 / 43

Page 49: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Пример работы алгоритма

поток остаточная сеть

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: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Пример работы алгоритма

поток остаточная сеть

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: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Пример работы алгоритма

поток остаточная сеть

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: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Пример работы алгоритма

поток остаточная сеть

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: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Пример работы алгоритма

поток остаточная сеть

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: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Анализ времени работы

Анализ времени работы

Допустим, что все пропускные способности являются целымичислами.Тогда нетрудно видеть, что процедура Ford-Fulkerson имеетвремя работы O(|E | · |f *|), где f * — максимальный поток,поскольку на каждой итерации поток увеличивается хотя бы на 1.Нетрудно, однако, придумать сеть с малым количеством вершин ибольшими значениями пропускных способностей, для которойтакая оценка не будет удовлетворительной.Значит, нужен другой инвариант.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 16 / 43

Page 55: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Анализ времени работы

Анализ времени работыДопустим, что все пропускные способности являются целымичислами.

Тогда нетрудно видеть, что процедура Ford-Fulkerson имеетвремя работы O(|E | · |f *|), где f * — максимальный поток,поскольку на каждой итерации поток увеличивается хотя бы на 1.Нетрудно, однако, придумать сеть с малым количеством вершин ибольшими значениями пропускных способностей, для которойтакая оценка не будет удовлетворительной.Значит, нужен другой инвариант.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 16 / 43

Page 56: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Анализ времени работы

Анализ времени работыДопустим, что все пропускные способности являются целымичислами.Тогда нетрудно видеть, что процедура Ford-Fulkerson имеетвремя работы O(|E | · |f *|), где f * — максимальный поток,поскольку на каждой итерации поток увеличивается хотя бы на 1.

Нетрудно, однако, придумать сеть с малым количеством вершин ибольшими значениями пропускных способностей, для которойтакая оценка не будет удовлетворительной.Значит, нужен другой инвариант.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 16 / 43

Page 57: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Анализ времени работы

Анализ времени работыДопустим, что все пропускные способности являются целымичислами.Тогда нетрудно видеть, что процедура Ford-Fulkerson имеетвремя работы O(|E | · |f *|), где f * — максимальный поток,поскольку на каждой итерации поток увеличивается хотя бы на 1.Нетрудно, однако, придумать сеть с малым количеством вершин ибольшими значениями пропускных способностей, для которойтакая оценка не будет удовлетворительной.

Значит, нужен другой инвариант.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 16 / 43

Page 58: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Анализ времени работы

Анализ времени работыДопустим, что все пропускные способности являются целымичислами.Тогда нетрудно видеть, что процедура Ford-Fulkerson имеетвремя работы O(|E | · |f *|), где f * — максимальный поток,поскольку на каждой итерации поток увеличивается хотя бы на 1.Нетрудно, однако, придумать сеть с малым количеством вершин ибольшими значениями пропускных способностей, для которойтакая оценка не будет удовлетворительной.Значит, нужен другой инвариант.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 16 / 43

Page 59: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Алгоритм Эдмондса-Карпа

Алгоритм Эдмондса-КарпаАлгоритм Эдмондса-Карпа является реализацией методаФорда-Фалкерсона, в которой в качестве дополняющего путивыбирается кратчайший путь в остаточной сети (длины всех рёберравны 1).

ТеоремаВремя работы алгоритма Эдмондса-Карпа есть O(|V | · |E |2).

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 17 / 43

Page 60: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Алгоритм Эдмондса-Карпа

Алгоритм Эдмондса-КарпаАлгоритм Эдмондса-Карпа является реализацией методаФорда-Фалкерсона, в которой в качестве дополняющего путивыбирается кратчайший путь в остаточной сети (длины всех рёберравны 1).

ТеоремаВремя работы алгоритма Эдмондса-Карпа есть O(|V | · |E |2).

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 17 / 43

Page 61: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Идеи доказательства

ДоказательствоИдеи доказательства:

Расстояние от истока до любой вершины не убывает в течениеработы алгоритма.Назовём ребро дополняющего пути критическим, если егопропускная способность совпадает с пропускной способностьюпути.Одно и то же ребро может стать критическим в ходе работыалгоритма не более O(|V |) раз.Всего же критическим могут быть не более O(|E |) рёбер.Поскольку каждая итерация требует времени O(|E |), общее времяработы есть O(|V ||E |2).

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 18 / 43

Page 62: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Идеи доказательства

ДоказательствоИдеи доказательства:

Расстояние от истока до любой вершины не убывает в течениеработы алгоритма.

Назовём ребро дополняющего пути критическим, если егопропускная способность совпадает с пропускной способностьюпути.Одно и то же ребро может стать критическим в ходе работыалгоритма не более O(|V |) раз.Всего же критическим могут быть не более O(|E |) рёбер.Поскольку каждая итерация требует времени O(|E |), общее времяработы есть O(|V ||E |2).

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 18 / 43

Page 63: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Идеи доказательства

ДоказательствоИдеи доказательства:

Расстояние от истока до любой вершины не убывает в течениеработы алгоритма.Назовём ребро дополняющего пути критическим, если егопропускная способность совпадает с пропускной способностьюпути.

Одно и то же ребро может стать критическим в ходе работыалгоритма не более O(|V |) раз.Всего же критическим могут быть не более O(|E |) рёбер.Поскольку каждая итерация требует времени O(|E |), общее времяработы есть O(|V ||E |2).

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 18 / 43

Page 64: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Идеи доказательства

ДоказательствоИдеи доказательства:

Расстояние от истока до любой вершины не убывает в течениеработы алгоритма.Назовём ребро дополняющего пути критическим, если егопропускная способность совпадает с пропускной способностьюпути.Одно и то же ребро может стать критическим в ходе работыалгоритма не более O(|V |) раз.

Всего же критическим могут быть не более O(|E |) рёбер.Поскольку каждая итерация требует времени O(|E |), общее времяработы есть O(|V ||E |2).

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 18 / 43

Page 65: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Идеи доказательства

ДоказательствоИдеи доказательства:

Расстояние от истока до любой вершины не убывает в течениеработы алгоритма.Назовём ребро дополняющего пути критическим, если егопропускная способность совпадает с пропускной способностьюпути.Одно и то же ребро может стать критическим в ходе работыалгоритма не более O(|V |) раз.Всего же критическим могут быть не более O(|E |) рёбер.

Поскольку каждая итерация требует времени O(|E |), общее времяработы есть O(|V ||E |2).

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 18 / 43

Page 66: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Идеи доказательства

ДоказательствоИдеи доказательства:

Расстояние от истока до любой вершины не убывает в течениеработы алгоритма.Назовём ребро дополняющего пути критическим, если егопропускная способность совпадает с пропускной способностьюпути.Одно и то же ребро может стать критическим в ходе работыалгоритма не более O(|V |) раз.Всего же критическим могут быть не более O(|E |) рёбер.Поскольку каждая итерация требует времени O(|E |), общее времяработы есть O(|V ||E |2).

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 18 / 43

Page 67: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

План лекции

1 Введение

2 Метод Форда-Фалкерсона

3 Алгоритм проталкивания предпотока

4 Алгоритм “поднять-и-в-начало”

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 19 / 43

Page 68: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Предпоток

Определение

Предпотоком (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: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Предпоток

ОпределениеПредпотоком (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: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Предпоток

ОпределениеПредпотоком (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: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Предпоток

ОпределениеПредпотоком (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: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Основные идеи

Основные идеи

Итак, в ходе работы алгоритма в каждой вершине будетнакапливаться некоторый избыток.Все вершины также постепенно поднимаются на некоторуювысоту.Избыток из вершины можно направить только вниз.Если в некоторый момент избыток из вершины никуда ненаправить, алгоритм поднимает эту вершину.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 21 / 43

Page 73: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Основные идеи

Основные идеиИтак, в ходе работы алгоритма в каждой вершине будетнакапливаться некоторый избыток.

Все вершины также постепенно поднимаются на некоторуювысоту.Избыток из вершины можно направить только вниз.Если в некоторый момент избыток из вершины никуда ненаправить, алгоритм поднимает эту вершину.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 21 / 43

Page 74: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Основные идеи

Основные идеиИтак, в ходе работы алгоритма в каждой вершине будетнакапливаться некоторый избыток.Все вершины также постепенно поднимаются на некоторуювысоту.

Избыток из вершины можно направить только вниз.Если в некоторый момент избыток из вершины никуда ненаправить, алгоритм поднимает эту вершину.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 21 / 43

Page 75: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Основные идеи

Основные идеиИтак, в ходе работы алгоритма в каждой вершине будетнакапливаться некоторый избыток.Все вершины также постепенно поднимаются на некоторуювысоту.Избыток из вершины можно направить только вниз.

Если в некоторый момент избыток из вершины никуда ненаправить, алгоритм поднимает эту вершину.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 21 / 43

Page 76: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Основные идеи

Основные идеиИтак, в ходе работы алгоритма в каждой вершине будетнакапливаться некоторый избыток.Все вершины также постепенно поднимаются на некоторуювысоту.Избыток из вершины можно направить только вниз.Если в некоторый момент избыток из вершины никуда ненаправить, алгоритм поднимает эту вершину.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 21 / 43

Page 77: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Высота вершин

ОпределениеПусть 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: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Высота вершин

ОпределениеПусть 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: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Операция проталкивания

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: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Операция проталкивания

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: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Операция проталкивания

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: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Операция проталкивания

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: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Операция подъёма

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: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Операция подъёма

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: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Операция подъёма

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: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Операция подъёма

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: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Операция подъёма

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: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Общая схема алгоритма

Generic-Preflow-Push(G )

1 положить поток по всем выходящим из истока рёбрамравным их пропускной способности,по всем остальным — равным нулю

2 исток поднять на высоту |V |, все остальные вершиныоставить на нулевой высоте

3 while возможны операции подъёма или проталкивания4 do выполнить одну из этих операций

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 25 / 43

Page 89: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Корректность

Корректность

Если u переполнена, то в ней возможно либо проталкивание, либоподъём.В течение работы алгоритма высотная функция остаётся таковойи не убывает ни для какой вершины.В течение работы алгоритма в остаточной сети не существуетпути из истока в сток: если бы был, то был бы и путь длиныменее |V |, высота вдоль которого падала бы с |V | до нуля, нотогда бы в этом пути нашлось ребро с перепадом высот хотя бы 2.Когда алгоритм закончит работу, текущий предпоток будетпотоком. Поскольку в остаточной сети не будет дополняющихпутей, он будет максимальным.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 26 / 43

Page 90: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Корректность

КорректностьЕсли u переполнена, то в ней возможно либо проталкивание, либоподъём.

В течение работы алгоритма высотная функция остаётся таковойи не убывает ни для какой вершины.В течение работы алгоритма в остаточной сети не существуетпути из истока в сток: если бы был, то был бы и путь длиныменее |V |, высота вдоль которого падала бы с |V | до нуля, нотогда бы в этом пути нашлось ребро с перепадом высот хотя бы 2.Когда алгоритм закончит работу, текущий предпоток будетпотоком. Поскольку в остаточной сети не будет дополняющихпутей, он будет максимальным.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 26 / 43

Page 91: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Корректность

КорректностьЕсли u переполнена, то в ней возможно либо проталкивание, либоподъём.В течение работы алгоритма высотная функция остаётся таковойи не убывает ни для какой вершины.

В течение работы алгоритма в остаточной сети не существуетпути из истока в сток: если бы был, то был бы и путь длиныменее |V |, высота вдоль которого падала бы с |V | до нуля, нотогда бы в этом пути нашлось ребро с перепадом высот хотя бы 2.Когда алгоритм закончит работу, текущий предпоток будетпотоком. Поскольку в остаточной сети не будет дополняющихпутей, он будет максимальным.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 26 / 43

Page 92: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Корректность

КорректностьЕсли u переполнена, то в ней возможно либо проталкивание, либоподъём.В течение работы алгоритма высотная функция остаётся таковойи не убывает ни для какой вершины.В течение работы алгоритма в остаточной сети не существуетпути из истока в сток: если бы был, то был бы и путь длиныменее |V |, высота вдоль которого падала бы с |V | до нуля, нотогда бы в этом пути нашлось ребро с перепадом высот хотя бы 2.

Когда алгоритм закончит работу, текущий предпоток будетпотоком. Поскольку в остаточной сети не будет дополняющихпутей, он будет максимальным.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 26 / 43

Page 93: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Корректность

КорректностьЕсли u переполнена, то в ней возможно либо проталкивание, либоподъём.В течение работы алгоритма высотная функция остаётся таковойи не убывает ни для какой вершины.В течение работы алгоритма в остаточной сети не существуетпути из истока в сток: если бы был, то был бы и путь длиныменее |V |, высота вдоль которого падала бы с |V | до нуля, нотогда бы в этом пути нашлось ребро с перепадом высот хотя бы 2.Когда алгоритм закончит работу, текущий предпоток будетпотоком. Поскольку в остаточной сети не будет дополняющихпутей, он будет максимальным.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 26 / 43

Page 94: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Оценка высоты

ЛеммаВысота любой вершины в течение работы алгоритма не превосходит2|V | − 1.

ДоказательствоЕсли вершина u переполнена, то в Gf есть простой пусть из u в s(поскольку в G есть путь из s в u, по которому идётположительный поток).Высота не может убывать вдоль этого пути более чем на 1.Следовательно, высота u не превосходит 2|V | − 1.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 27 / 43

Page 95: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Оценка высоты

ЛеммаВысота любой вершины в течение работы алгоритма не превосходит2|V | − 1.

Доказательство

Если вершина u переполнена, то в Gf есть простой пусть из u в s(поскольку в G есть путь из s в u, по которому идётположительный поток).Высота не может убывать вдоль этого пути более чем на 1.Следовательно, высота u не превосходит 2|V | − 1.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 27 / 43

Page 96: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Оценка высоты

ЛеммаВысота любой вершины в течение работы алгоритма не превосходит2|V | − 1.

ДоказательствоЕсли вершина u переполнена, то в Gf есть простой пусть из u в s(поскольку в G есть путь из s в u, по которому идётположительный поток).

Высота не может убывать вдоль этого пути более чем на 1.Следовательно, высота u не превосходит 2|V | − 1.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 27 / 43

Page 97: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Оценка высоты

ЛеммаВысота любой вершины в течение работы алгоритма не превосходит2|V | − 1.

ДоказательствоЕсли вершина u переполнена, то в Gf есть простой пусть из u в s(поскольку в G есть путь из s в u, по которому идётположительный поток).Высота не может убывать вдоль этого пути более чем на 1.

Следовательно, высота u не превосходит 2|V | − 1.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 27 / 43

Page 98: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Оценка высоты

ЛеммаВысота любой вершины в течение работы алгоритма не превосходит2|V | − 1.

ДоказательствоЕсли вершина u переполнена, то в Gf есть простой пусть из u в s(поскольку в G есть путь из s в u, по которому идётположительный поток).Высота не может убывать вдоль этого пути более чем на 1.Следовательно, высота u не превосходит 2|V | − 1.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 27 / 43

Page 99: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Оценка числа подъёмов

ЛеммаОбщее число операций подъёма не превосходит 2|V |2.

ДоказательствоКаждую вершину поднять можно не более 2|V | − 1 раз, всего жевершин, которые можно поднимать, |V | − 2.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 28 / 43

Page 100: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Оценка числа подъёмов

ЛеммаОбщее число операций подъёма не превосходит 2|V |2.

ДоказательствоКаждую вершину поднять можно не более 2|V | − 1 раз, всего жевершин, которые можно поднимать, |V | − 2.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 28 / 43

Page 101: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Оценка числа насыщающих проталкиваний

ЛеммаОбщее число насыщающих проталкиваний не превосходит 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: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Оценка числа насыщающих проталкиваний

ЛеммаОбщее число насыщающих проталкиваний не превосходит 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: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Оценка числа насыщающих проталкиваний

ЛеммаОбщее число насыщающих проталкиваний не превосходит 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: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Оценка числа насыщающих проталкиваний

ЛеммаОбщее число насыщающих проталкиваний не превосходит 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: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Оценка числа насыщающих проталкиваний

ЛеммаОбщее число насыщающих проталкиваний не превосходит 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: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Оценка числа насыщающих проталкиваний

ЛеммаОбщее число насыщающих проталкиваний не превосходит 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: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Оценка числа насыщающих проталкиваний

ЛеммаОбщее число насыщающих проталкиваний не превосходит 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: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Оценка числа ненасыщающих проталкиваний

ЛеммаОбщее число ненасыщающих проталкиваний не превосходит4|V |2(|V |+ |E |).

ДоказательствоНазовём потенциалом сумму высот переполненных вершин.Подъём вершины увеличивает потенциал не более чем на 2|V |.Насыщающее проталкивание также увеличивает не более чем на2|V | (при появлении новой переполненной вершины).Ненасыщающее проталкиваие из u в v уменьшает потенциал хотябы на 1, поскольку при таком проталкивании u перестаёт бытьпереполненной, а стать переполненной может только v , высотакоторой на 1 меньше.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 30 / 43

Page 109: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Оценка числа ненасыщающих проталкиваний

ЛеммаОбщее число ненасыщающих проталкиваний не превосходит4|V |2(|V |+ |E |).

Доказательство

Назовём потенциалом сумму высот переполненных вершин.Подъём вершины увеличивает потенциал не более чем на 2|V |.Насыщающее проталкивание также увеличивает не более чем на2|V | (при появлении новой переполненной вершины).Ненасыщающее проталкиваие из u в v уменьшает потенциал хотябы на 1, поскольку при таком проталкивании u перестаёт бытьпереполненной, а стать переполненной может только v , высотакоторой на 1 меньше.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 30 / 43

Page 110: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Оценка числа ненасыщающих проталкиваний

ЛеммаОбщее число ненасыщающих проталкиваний не превосходит4|V |2(|V |+ |E |).

ДоказательствоНазовём потенциалом сумму высот переполненных вершин.

Подъём вершины увеличивает потенциал не более чем на 2|V |.Насыщающее проталкивание также увеличивает не более чем на2|V | (при появлении новой переполненной вершины).Ненасыщающее проталкиваие из u в v уменьшает потенциал хотябы на 1, поскольку при таком проталкивании u перестаёт бытьпереполненной, а стать переполненной может только v , высотакоторой на 1 меньше.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 30 / 43

Page 111: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Оценка числа ненасыщающих проталкиваний

ЛеммаОбщее число ненасыщающих проталкиваний не превосходит4|V |2(|V |+ |E |).

ДоказательствоНазовём потенциалом сумму высот переполненных вершин.Подъём вершины увеличивает потенциал не более чем на 2|V |.

Насыщающее проталкивание также увеличивает не более чем на2|V | (при появлении новой переполненной вершины).Ненасыщающее проталкиваие из u в v уменьшает потенциал хотябы на 1, поскольку при таком проталкивании u перестаёт бытьпереполненной, а стать переполненной может только v , высотакоторой на 1 меньше.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 30 / 43

Page 112: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Оценка числа ненасыщающих проталкиваний

ЛеммаОбщее число ненасыщающих проталкиваний не превосходит4|V |2(|V |+ |E |).

ДоказательствоНазовём потенциалом сумму высот переполненных вершин.Подъём вершины увеличивает потенциал не более чем на 2|V |.Насыщающее проталкивание также увеличивает не более чем на2|V | (при появлении новой переполненной вершины).

Ненасыщающее проталкиваие из u в v уменьшает потенциал хотябы на 1, поскольку при таком проталкивании u перестаёт бытьпереполненной, а стать переполненной может только v , высотакоторой на 1 меньше.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 30 / 43

Page 113: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Оценка числа ненасыщающих проталкиваний

ЛеммаОбщее число ненасыщающих проталкиваний не превосходит4|V |2(|V |+ |E |).

ДоказательствоНазовём потенциалом сумму высот переполненных вершин.Подъём вершины увеличивает потенциал не более чем на 2|V |.Насыщающее проталкивание также увеличивает не более чем на2|V | (при появлении новой переполненной вершины).Ненасыщающее проталкиваие из u в v уменьшает потенциал хотябы на 1, поскольку при таком проталкивании u перестаёт бытьпереполненной, а стать переполненной может только v , высотакоторой на 1 меньше.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 30 / 43

Page 114: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Доказательство (завершение)

Доказательство

Суммарное увеличение потенциала не превосходит(2|V |)(2|V |2) + (2|V |)(2|V ||E |) = 4|V |2(|V |+ |E |).Поскольку потенциал всегда не меньше нуля, его суммарноеуменьшение не превосходит его суммарного увеличения.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 31 / 43

Page 115: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Доказательство (завершение)

ДоказательствоСуммарное увеличение потенциала не превосходит(2|V |)(2|V |2) + (2|V |)(2|V ||E |) = 4|V |2(|V |+ |E |).

Поскольку потенциал всегда не меньше нуля, его суммарноеуменьшение не превосходит его суммарного увеличения.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 31 / 43

Page 116: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Доказательство (завершение)

ДоказательствоСуммарное увеличение потенциала не превосходит(2|V |)(2|V |2) + (2|V |)(2|V ||E |) = 4|V |2(|V |+ |E |).Поскольку потенциал всегда не меньше нуля, его суммарноеуменьшение не превосходит его суммарного увеличения.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 31 / 43

Page 117: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Время работы

ТеоремаАлгоритм, основанный на проталкивании предпотока, можнореализовать так, чтобы время его работы было O(|V |2|E |).

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 32 / 43

Page 118: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

План лекции

1 Введение

2 Метод Форда-Фалкерсона

3 Алгоритм проталкивания предпотока

4 Алгоритм “поднять-и-в-начало”

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 33 / 43

Page 119: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Общие идеи

Общие идеи

Алгоритм “поднять-и-в-начало” основан на методе проталкиванияпредпотока и применяет операции подъёма и проталкивания вразумном порядке.Все вершины хранятся в списке.Алгоритм просматривает список и находит переполненнуювершину, после чего применяет к ней операции подъёма ипроталкивания до тех пор, пока избыток в ней не обнулится.Если при этом вершина была поднята, вершина перемещается вначало списка.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 34 / 43

Page 120: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Общие идеи

Общие идеиАлгоритм “поднять-и-в-начало” основан на методе проталкиванияпредпотока и применяет операции подъёма и проталкивания вразумном порядке.

Все вершины хранятся в списке.Алгоритм просматривает список и находит переполненнуювершину, после чего применяет к ней операции подъёма ипроталкивания до тех пор, пока избыток в ней не обнулится.Если при этом вершина была поднята, вершина перемещается вначало списка.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 34 / 43

Page 121: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Общие идеи

Общие идеиАлгоритм “поднять-и-в-начало” основан на методе проталкиванияпредпотока и применяет операции подъёма и проталкивания вразумном порядке.Все вершины хранятся в списке.

Алгоритм просматривает список и находит переполненнуювершину, после чего применяет к ней операции подъёма ипроталкивания до тех пор, пока избыток в ней не обнулится.Если при этом вершина была поднята, вершина перемещается вначало списка.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 34 / 43

Page 122: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Общие идеи

Общие идеиАлгоритм “поднять-и-в-начало” основан на методе проталкиванияпредпотока и применяет операции подъёма и проталкивания вразумном порядке.Все вершины хранятся в списке.Алгоритм просматривает список и находит переполненнуювершину, после чего применяет к ней операции подъёма ипроталкивания до тех пор, пока избыток в ней не обнулится.

Если при этом вершина была поднята, вершина перемещается вначало списка.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 34 / 43

Page 123: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Общие идеи

Общие идеиАлгоритм “поднять-и-в-начало” основан на методе проталкиванияпредпотока и применяет операции подъёма и проталкивания вразумном порядке.Все вершины хранятся в списке.Алгоритм просматривает список и находит переполненнуювершину, после чего применяет к ней операции подъёма ипроталкивания до тех пор, пока избыток в ней не обнулится.Если при этом вершина была поднята, вершина перемещается вначало списка.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 34 / 43

Page 124: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Допустимые рёбра

Определение

Ребро (u, v) называется допустимым (admissible), если оно входитв остаточную сеть и h(u) = h(v) + 1.Оставшиеся рёбра называются недопустимыми (inadmissible).Сеть Gf ,h = (V , Ef ,h), где Ef ,h — множество допустимых рёбер,назовём сетью допустимых рёбер (admissible network).

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 35 / 43

Page 125: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Допустимые рёбра

ОпределениеРебро (u, v) называется допустимым (admissible), если оно входитв остаточную сеть и h(u) = h(v) + 1.

Оставшиеся рёбра называются недопустимыми (inadmissible).Сеть Gf ,h = (V , Ef ,h), где Ef ,h — множество допустимых рёбер,назовём сетью допустимых рёбер (admissible network).

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 35 / 43

Page 126: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Допустимые рёбра

ОпределениеРебро (u, v) называется допустимым (admissible), если оно входитв остаточную сеть и h(u) = h(v) + 1.Оставшиеся рёбра называются недопустимыми (inadmissible).

Сеть Gf ,h = (V , Ef ,h), где Ef ,h — множество допустимых рёбер,назовём сетью допустимых рёбер (admissible network).

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 35 / 43

Page 127: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Допустимые рёбра

ОпределениеРебро (u, v) называется допустимым (admissible), если оно входитв остаточную сеть и h(u) = h(v) + 1.Оставшиеся рёбра называются недопустимыми (inadmissible).Сеть Gf ,h = (V , Ef ,h), где Ef ,h — множество допустимых рёбер,назовём сетью допустимых рёбер (admissible network).

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 35 / 43

Page 128: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Разгрузка переполненной вершины

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: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Разгрузка переполненной вершины

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: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Разгрузка переполненной вершины

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: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Разгрузка переполненной вершины

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: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Корректность процедуры

Корректность процедуры

Ясно, что проталкивание осуществляется только тогда, когда оновозможно.Покажем, что и подъём осуществляется корректно.Для этого достаточно показать, что в этот момент все выходящиеиз u остаточные рёбра недопустимы.Перед подъёмом вершины всё её соседи просматриваются, приэтом могут производиться проталкивания.Нетрудно видеть, что при этом никакое исходящее из u ребродопустимым стать не могло: проталкивания допустимых рёбер несоздают, а подъёмы других вершин создают лишь выходящие изних допустимые рёбра.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 37 / 43

Page 133: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Корректность процедуры

Корректность процедурыЯсно, что проталкивание осуществляется только тогда, когда оновозможно.

Покажем, что и подъём осуществляется корректно.Для этого достаточно показать, что в этот момент все выходящиеиз u остаточные рёбра недопустимы.Перед подъёмом вершины всё её соседи просматриваются, приэтом могут производиться проталкивания.Нетрудно видеть, что при этом никакое исходящее из u ребродопустимым стать не могло: проталкивания допустимых рёбер несоздают, а подъёмы других вершин создают лишь выходящие изних допустимые рёбра.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 37 / 43

Page 134: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Корректность процедуры

Корректность процедурыЯсно, что проталкивание осуществляется только тогда, когда оновозможно.Покажем, что и подъём осуществляется корректно.

Для этого достаточно показать, что в этот момент все выходящиеиз u остаточные рёбра недопустимы.Перед подъёмом вершины всё её соседи просматриваются, приэтом могут производиться проталкивания.Нетрудно видеть, что при этом никакое исходящее из u ребродопустимым стать не могло: проталкивания допустимых рёбер несоздают, а подъёмы других вершин создают лишь выходящие изних допустимые рёбра.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 37 / 43

Page 135: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Корректность процедуры

Корректность процедурыЯсно, что проталкивание осуществляется только тогда, когда оновозможно.Покажем, что и подъём осуществляется корректно.Для этого достаточно показать, что в этот момент все выходящиеиз u остаточные рёбра недопустимы.

Перед подъёмом вершины всё её соседи просматриваются, приэтом могут производиться проталкивания.Нетрудно видеть, что при этом никакое исходящее из u ребродопустимым стать не могло: проталкивания допустимых рёбер несоздают, а подъёмы других вершин создают лишь выходящие изних допустимые рёбра.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 37 / 43

Page 136: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Корректность процедуры

Корректность процедурыЯсно, что проталкивание осуществляется только тогда, когда оновозможно.Покажем, что и подъём осуществляется корректно.Для этого достаточно показать, что в этот момент все выходящиеиз u остаточные рёбра недопустимы.Перед подъёмом вершины всё её соседи просматриваются, приэтом могут производиться проталкивания.

Нетрудно видеть, что при этом никакое исходящее из u ребродопустимым стать не могло: проталкивания допустимых рёбер несоздают, а подъёмы других вершин создают лишь выходящие изних допустимые рёбра.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 37 / 43

Page 137: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Корректность процедуры

Корректность процедурыЯсно, что проталкивание осуществляется только тогда, когда оновозможно.Покажем, что и подъём осуществляется корректно.Для этого достаточно показать, что в этот момент все выходящиеиз u остаточные рёбра недопустимы.Перед подъёмом вершины всё её соседи просматриваются, приэтом могут производиться проталкивания.Нетрудно видеть, что при этом никакое исходящее из u ребродопустимым стать не могло: проталкивания допустимых рёбер несоздают, а подъёмы других вершин создают лишь выходящие изних допустимые рёбра.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 37 / 43

Page 138: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Алоритм “поднять-и-в-начало”

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: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Корректность алгоритма

Корректность алгоритма

Покажем, что в ходе работы алгоритма список L остаётся линейноупорядоченным относительно текущей допустимой сети.Изначально это верно, поскольку допустимых рёбер нет вообще.Проталкивания не создают новых допустимых рёбер.При подъёме вершины все рёбра, входящие в неё, недопустимы.Поэтому после перемещения поднятой вершины в началоинвариант сохраняется.Таким образом, алгоритм заканчивает свою работу, разгрузивкаждую вершину списка.Причём при проталкивании потока из u избыток может появитьсятолько в вершинах, идущих в списке после u.В конце работы алгоритма ни проталкивание, ни подъём неприменимы.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 39 / 43

Page 140: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Корректность алгоритма

Корректность алгоритмаПокажем, что в ходе работы алгоритма список L остаётся линейноупорядоченным относительно текущей допустимой сети.

Изначально это верно, поскольку допустимых рёбер нет вообще.Проталкивания не создают новых допустимых рёбер.При подъёме вершины все рёбра, входящие в неё, недопустимы.Поэтому после перемещения поднятой вершины в началоинвариант сохраняется.Таким образом, алгоритм заканчивает свою работу, разгрузивкаждую вершину списка.Причём при проталкивании потока из u избыток может появитьсятолько в вершинах, идущих в списке после u.В конце работы алгоритма ни проталкивание, ни подъём неприменимы.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 39 / 43

Page 141: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Корректность алгоритма

Корректность алгоритмаПокажем, что в ходе работы алгоритма список L остаётся линейноупорядоченным относительно текущей допустимой сети.Изначально это верно, поскольку допустимых рёбер нет вообще.

Проталкивания не создают новых допустимых рёбер.При подъёме вершины все рёбра, входящие в неё, недопустимы.Поэтому после перемещения поднятой вершины в началоинвариант сохраняется.Таким образом, алгоритм заканчивает свою работу, разгрузивкаждую вершину списка.Причём при проталкивании потока из u избыток может появитьсятолько в вершинах, идущих в списке после u.В конце работы алгоритма ни проталкивание, ни подъём неприменимы.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 39 / 43

Page 142: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Корректность алгоритма

Корректность алгоритмаПокажем, что в ходе работы алгоритма список L остаётся линейноупорядоченным относительно текущей допустимой сети.Изначально это верно, поскольку допустимых рёбер нет вообще.Проталкивания не создают новых допустимых рёбер.

При подъёме вершины все рёбра, входящие в неё, недопустимы.Поэтому после перемещения поднятой вершины в началоинвариант сохраняется.Таким образом, алгоритм заканчивает свою работу, разгрузивкаждую вершину списка.Причём при проталкивании потока из u избыток может появитьсятолько в вершинах, идущих в списке после u.В конце работы алгоритма ни проталкивание, ни подъём неприменимы.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 39 / 43

Page 143: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Корректность алгоритма

Корректность алгоритмаПокажем, что в ходе работы алгоритма список L остаётся линейноупорядоченным относительно текущей допустимой сети.Изначально это верно, поскольку допустимых рёбер нет вообще.Проталкивания не создают новых допустимых рёбер.При подъёме вершины все рёбра, входящие в неё, недопустимы.

Поэтому после перемещения поднятой вершины в началоинвариант сохраняется.Таким образом, алгоритм заканчивает свою работу, разгрузивкаждую вершину списка.Причём при проталкивании потока из u избыток может появитьсятолько в вершинах, идущих в списке после u.В конце работы алгоритма ни проталкивание, ни подъём неприменимы.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 39 / 43

Page 144: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Корректность алгоритма

Корректность алгоритмаПокажем, что в ходе работы алгоритма список L остаётся линейноупорядоченным относительно текущей допустимой сети.Изначально это верно, поскольку допустимых рёбер нет вообще.Проталкивания не создают новых допустимых рёбер.При подъёме вершины все рёбра, входящие в неё, недопустимы.Поэтому после перемещения поднятой вершины в началоинвариант сохраняется.

Таким образом, алгоритм заканчивает свою работу, разгрузивкаждую вершину списка.Причём при проталкивании потока из u избыток может появитьсятолько в вершинах, идущих в списке после u.В конце работы алгоритма ни проталкивание, ни подъём неприменимы.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 39 / 43

Page 145: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Корректность алгоритма

Корректность алгоритмаПокажем, что в ходе работы алгоритма список L остаётся линейноупорядоченным относительно текущей допустимой сети.Изначально это верно, поскольку допустимых рёбер нет вообще.Проталкивания не создают новых допустимых рёбер.При подъёме вершины все рёбра, входящие в неё, недопустимы.Поэтому после перемещения поднятой вершины в началоинвариант сохраняется.Таким образом, алгоритм заканчивает свою работу, разгрузивкаждую вершину списка.

Причём при проталкивании потока из u избыток может появитьсятолько в вершинах, идущих в списке после u.В конце работы алгоритма ни проталкивание, ни подъём неприменимы.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 39 / 43

Page 146: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Корректность алгоритма

Корректность алгоритмаПокажем, что в ходе работы алгоритма список L остаётся линейноупорядоченным относительно текущей допустимой сети.Изначально это верно, поскольку допустимых рёбер нет вообще.Проталкивания не создают новых допустимых рёбер.При подъёме вершины все рёбра, входящие в неё, недопустимы.Поэтому после перемещения поднятой вершины в началоинвариант сохраняется.Таким образом, алгоритм заканчивает свою работу, разгрузивкаждую вершину списка.Причём при проталкивании потока из u избыток может появитьсятолько в вершинах, идущих в списке после u.

В конце работы алгоритма ни проталкивание, ни подъём неприменимы.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 39 / 43

Page 147: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Корректность алгоритма

Корректность алгоритмаПокажем, что в ходе работы алгоритма список L остаётся линейноупорядоченным относительно текущей допустимой сети.Изначально это верно, поскольку допустимых рёбер нет вообще.Проталкивания не создают новых допустимых рёбер.При подъёме вершины все рёбра, входящие в неё, недопустимы.Поэтому после перемещения поднятой вершины в началоинвариант сохраняется.Таким образом, алгоритм заканчивает свою работу, разгрузивкаждую вершину списка.Причём при проталкивании потока из u избыток может появитьсятолько в вершинах, идущих в списке после u.В конце работы алгоритма ни проталкивание, ни подъём неприменимы.

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 39 / 43

Page 148: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Анализ времени работы

ТеоремаВремя работы алгоритма Lift-To-Front есть O(|V |3).

ДоказательствоКак мы уже знаем, общее количество подъёмов есть O(|V |2)(поскольку высота каждой вершины ограничена числом 2|V |).Между двумя последовательными подъёмами происходит неболее |V | вызовов процедуры разгрузки.При каждом проходе цикла процедуры разгрузки происходит либоподъём, либо проталкивание, либо перемещение указателя.Количество подъёмов есть O(|V |2), на все же подъемы требуетсявремени O(|V ||E |) (подъем одной вершины осуществляется завремя, пропорциональное её степени).

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 40 / 43

Page 149: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Анализ времени работы

ТеоремаВремя работы алгоритма Lift-To-Front есть O(|V |3).

Доказательство

Как мы уже знаем, общее количество подъёмов есть O(|V |2)(поскольку высота каждой вершины ограничена числом 2|V |).Между двумя последовательными подъёмами происходит неболее |V | вызовов процедуры разгрузки.При каждом проходе цикла процедуры разгрузки происходит либоподъём, либо проталкивание, либо перемещение указателя.Количество подъёмов есть O(|V |2), на все же подъемы требуетсявремени O(|V ||E |) (подъем одной вершины осуществляется завремя, пропорциональное её степени).

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 40 / 43

Page 150: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Анализ времени работы

ТеоремаВремя работы алгоритма Lift-To-Front есть O(|V |3).

ДоказательствоКак мы уже знаем, общее количество подъёмов есть O(|V |2)(поскольку высота каждой вершины ограничена числом 2|V |).

Между двумя последовательными подъёмами происходит неболее |V | вызовов процедуры разгрузки.При каждом проходе цикла процедуры разгрузки происходит либоподъём, либо проталкивание, либо перемещение указателя.Количество подъёмов есть O(|V |2), на все же подъемы требуетсявремени O(|V ||E |) (подъем одной вершины осуществляется завремя, пропорциональное её степени).

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 40 / 43

Page 151: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Анализ времени работы

ТеоремаВремя работы алгоритма Lift-To-Front есть O(|V |3).

ДоказательствоКак мы уже знаем, общее количество подъёмов есть O(|V |2)(поскольку высота каждой вершины ограничена числом 2|V |).Между двумя последовательными подъёмами происходит неболее |V | вызовов процедуры разгрузки.

При каждом проходе цикла процедуры разгрузки происходит либоподъём, либо проталкивание, либо перемещение указателя.Количество подъёмов есть O(|V |2), на все же подъемы требуетсявремени O(|V ||E |) (подъем одной вершины осуществляется завремя, пропорциональное её степени).

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 40 / 43

Page 152: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Анализ времени работы

ТеоремаВремя работы алгоритма Lift-To-Front есть O(|V |3).

ДоказательствоКак мы уже знаем, общее количество подъёмов есть O(|V |2)(поскольку высота каждой вершины ограничена числом 2|V |).Между двумя последовательными подъёмами происходит неболее |V | вызовов процедуры разгрузки.При каждом проходе цикла процедуры разгрузки происходит либоподъём, либо проталкивание, либо перемещение указателя.

Количество подъёмов есть O(|V |2), на все же подъемы требуетсявремени O(|V ||E |) (подъем одной вершины осуществляется завремя, пропорциональное её степени).

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 40 / 43

Page 153: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Анализ времени работы

ТеоремаВремя работы алгоритма Lift-To-Front есть O(|V |3).

ДоказательствоКак мы уже знаем, общее количество подъёмов есть O(|V |2)(поскольку высота каждой вершины ограничена числом 2|V |).Между двумя последовательными подъёмами происходит неболее |V | вызовов процедуры разгрузки.При каждом проходе цикла процедуры разгрузки происходит либоподъём, либо проталкивание, либо перемещение указателя.Количество подъёмов есть O(|V |2), на все же подъемы требуетсявремени O(|V ||E |) (подъем одной вершины осуществляется завремя, пропорциональное её степени).

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 40 / 43

Page 154: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Доказательство (завершение)

Доказательство

По тем же причинам общее перемещение указателей естьO(|V ||E |).Количество насыщающих проталкиваний есть O(|V ||E |).За один вызов процедуры разгрузки производится не болееодного ненасыщающего проталкивания, поэтому общееколичество ненасыщающих проталкиваний есть O(|V |3).

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 41 / 43

Page 155: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Доказательство (завершение)

ДоказательствоПо тем же причинам общее перемещение указателей естьO(|V ||E |).

Количество насыщающих проталкиваний есть O(|V ||E |).За один вызов процедуры разгрузки производится не болееодного ненасыщающего проталкивания, поэтому общееколичество ненасыщающих проталкиваний есть O(|V |3).

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 41 / 43

Page 156: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Доказательство (завершение)

ДоказательствоПо тем же причинам общее перемещение указателей естьO(|V ||E |).Количество насыщающих проталкиваний есть O(|V ||E |).

За один вызов процедуры разгрузки производится не болееодного ненасыщающего проталкивания, поэтому общееколичество ненасыщающих проталкиваний есть O(|V |3).

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 41 / 43

Page 157: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Доказательство (завершение)

ДоказательствоПо тем же причинам общее перемещение указателей естьO(|V ||E |).Количество насыщающих проталкиваний есть O(|V ||E |).За один вызов процедуры разгрузки производится не болееодного ненасыщающего проталкивания, поэтому общееколичество ненасыщающих проталкиваний есть O(|V |3).

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 41 / 43

Page 158: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Что мы узнали за сегодня?

Что мы узнали за сегодня?

алгоритм время работы

Эдмондса-Карпа |V ||E |2

проталкивание предпотока |V |2|E |“поднять-и-в-начало” |V |3

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 42 / 43

Page 159: Эффективные алгоритмы, осень 2007: Нахождение максимального потока

Спасибо за внимание!

А. Куликов (CS клуб при ПОМИ) 18. Нахождение максимального потока 43 / 43


Recommended