← Все вопросы

Почему жадный алгоритм без обратных рёбер не находит максимальный поток? Контрпример

Задан 37 месяцев назад303 просмотров2 ответа
8

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

2 ответа

14
✓ Принятый ответ — помог автору

Классический контрпример на 4 вершинах. Вершины s,a,b,ts, a, b, t. Рёбра (все пропускной способности 1, кроме среднего):

s -> a : 1
s -> b : 1
a -> t : 1
b -> t : 1
a -> b : 1   (это «диагональ»)

Максимальный поток здесь равен 2: пускаем s→a→ts\to a\to t и s→b→ts\to b\to t.

Но жадность может сначала выбрать «неудачный» путь s→a→b→ts \to a \to b \to t (величина 1). После этого рёбра s→as\to a, a→ba\to b, b→tb\to t насыщены. Остаётся только s→bs\to b и a→ta\to t, но между ними нет пути (bb ведёт только в tt через насыщенное ребро, а в aa зайти неоткуда). Жадность останавливается на потоке 1 — это не оптимум.

Обратные рёбра спасают: после пуска s→a→b→ts\to a\to b\to t в остаточной сети есть обратное ребро b→ab\to a (пропускная 1). Теперь находится путь s→b→a→ts \to b \to a \to t, использующий это обратное ребро. Пуск по нему «откатывает» поток на a→ba\to b и перенаправляет его правильно. Итог — поток 2. Обратное ребро формально означает «я передумал гнать поток через эту диагональ».

Именно поэтому корректные алгоритмы (Форд-Фалкерсон и потомки) всегда работают в остаточной сети, а не в исходной.

5

Полезная интуиция: обратное ребро — это не «физический» канал, а право отмены уже принятого решения. Без возможности откатить раннюю ошибку жадный выбор пути может загнать в локальный оптимум. Теорема Форда-Фалкерсона гарантирует: если в остаточной сети нет ни одного увеличивающего пути, то поток максимален (и тогда же находится минимальный разрез). Без обратных рёбер вы проверяете отсутствие путей в неправильном графе, поэтому и получаете неправильный ответ.

Ваш ответ

, чтобы ответить на вопрос.