Алгоритм Форда-Фалкерсона и теорема о максимальном потоке и минимальном разрезе

Здравствуйте, у меня проблемы с изучением алгоритма Форда-Фалкерсона с помощью теоремы max-flow min-cut .

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

Однако просмотр видео https://www.youtube.com/watch?v=Tl90tNtKvxs, это приводит меня в замешательство. Лектор говорит, что максимальный расход 19 по алгоритму Форда-Фалкерсона, но я не могу найти ни одного разреза с расходом 19. Что не так?


person Jiseop Han    schedule 02.12.2018    source источник
comment
Ну, после того, как алгоритм выполнен, вы делаете разрез (неважно, какой разрез), и суммируете поток всех ребер, прошедших разрез, и получается 19.   -  person Willem Van Onsem    schedule 02.12.2018
comment
Ах. Я заметил, что я ошибочно рассчитал расход реза с мощностью, а не потоком. Большое спасибо   -  person Jiseop Han    schedule 02.12.2018
comment
Привет, Джисоп. Решил как именно? Если вы имеете в виду ответ ниже, вы отмечаете вопрос как решенный, устанавливая галочку рядом с ответом. Если нет, возможно, вы могли бы добавить свой собственный ответ. Пометка заголовка вашего вопроса как решенного - это не то, как это делается в Stack Overflow. Вы можете прочитать это для получения дополнительной информации об этом: Что мне делать, когда кто-то отвечает на мой вопрос? А пока я Я откатил ваш вопрос, чтобы удалить решенное из заголовка.   -  person TT.    schedule 02.12.2018
comment
@JiseopHan, вы абсолютно точно рассчитываете стоимость сокращения мощности.   -  person Matt Timmermans    schedule 02.12.2018


Ответы (2)


В вашей интерпретации теоремы о максимальном потоке и минимальном разрезе нет ничего неправильного.

Минимальный набор отрезков состоит из ребер SA и CD общей мощностью 19.

Чтобы сделать разрез и рассчитать его стоимость, вы можете:

  1. Разделите все вершины на 2 множества, S и D, так, чтобы исток находился в S, а сток — в D.
  2. Отрежьте все ребра от вершины в S до вершины в D. Обратите внимание, что вам не нужно обрезать ребра, идущие от D к S.
  3. Сложите мощности кромок, которые вы обрезаете.

Для приведенного выше минимального разреза S содержит вершины s и c, а D содержит остальные.

person Matt Timmermans    schedule 02.12.2018

Разрез означает, что вы определяете разрез между истоком и стоком. Этот срез не обязательно должен быть прямой линией, кривой или любой другой формы.

Например, здесь я выбрал синий разрез таким образом, чтобы края AB, AD и CD проходили через разрез. Теперь, если мы посмотрим на назначенный поток этих ребер и суммируем их, мы получим 4+6+9=19.

Альтернативная огранка, например, зеленого цвета. Здесь у нас есть ребра BT, AD и AC, которые перемещаются «вперед», и ребро DC, которое перемещается « назад». Таким образом, сумма потоков равна 9+6+9-5=19. Таким образом, независимо от того, какой разрез мы делаем, сумма всегда равна 19 (конечно, нам нужно вести надлежащий учет и вычитать потоки в противоположном направлении).

Конечно, вы можете выбрать любой срез (например, срез сразу после истока или непосредственно перед сливом), если алгоритм выполнен правильно, то сумма всех этих срезов всегда равна 19. Это логично, так как если поток одного разреза будет больше (или меньше) 19, тогда существование разреза, который «продвигает» один узел с потоком 19, означает, что в этом узле поток исчез или появился.

Однако считается, что если вы будете перебирать все возможные разрезы, то минимальный разрез — это тот, при котором сумма мощностей максимальна. Так что мы можем, строго говоря, перебрать все возможные разрезы, и каждый раз следить за суммой мощностей, и в конце выбирать тот, с наименьшим расходом. Однако наивный подход, заключающийся в простом повторении всех разрезов, привел бы к алгоритму O(2n), что по сравнению с алгоритмом Форда–Фалкерсона, конечно не желательно.

два сокращения в конце алгоритма

person Willem Van Onsem    schedule 02.12.2018