![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Глава 22. Потоки в сетях 381
Свойство 22.5. (Теорема о максимальных потоках и минимальных сечениях). Максимальный поток среди всех st-потоков в сети равен минимальной пропускной способности среди всех st-сечений. Доказательство: Достаточно найти такой поток и такое сечение, чтобы величина потока была равна пропускной способности этого сечения. Этот поток должен быть максимальным, поскольку величина никакого другого потока не может превысить пропускной способности сечения, а сечение должно быть минимальным, поскольку пропускная способность никакого другого сечения не может быть меньше величины потока, протекающего через этот сечение (свойство 22.4). Алгоритм Форда-Фалкерсона точно определяет такой поток и такое сечение: когда этот алгоритм завершает работу, выделите первое заполненное прямое или опорожненное обратное ребро для каждого пути из вершины s в вершину t графа. Пусть Cs есть множество всех вершин, достижимых из s через неориентированный путь, который не содержит наполненного прямого или порожнего обратного ребра, и пусть Ct есть множество всех остальных вершин. Тогда вершина /должна находиться в С,, так что (Сs, C1) естьst/-сечение, разделяющее множество которого состоит исключительно из заполненных прямых или порожних обратных ребер. Поток через это сечение равен пропускной способности этого сечения (поскольку прямые ребра заполнены, а обратные ребра пусты), равной величине потока сети (свойство 22.3). ■ Это доказательство однозначно устанавливает, что алгоритм Форда-Фалкерсона способен отыскать максимальный поток. Независимо от того, какой метод мы выберем для того, чтобы найти аугментальный путь, а также независимо от того, какой путь мы найдем, он всегда заканчивается определением сечения, поток которого равен его пропускной способности, и в силу этого обстоятельства, равен величине потока сети, который по этой причине должен быть максимальным потоком. Другое следствие правильности алгоритма Форда-Фалкерсона заключается в том, что для любой транспортной сети с целочисленными пропускными способностями ребер, существует решение задачи определения максимального потока, в котором все потоки также принимают целочисленные значения. Каждый аугментальный путь увеличивает величину потока сети на некоторое положительное целое число (минимальная из неиспользованных пропускных способностей в прямых ребрах и потоки в обратных ребрах, величины которых всегда принимают положительные значения). Этот факт оправдывает наше решение уделить основное внимание целочисленным значениям пропускных способностей и величин потоков. Можно применить максимальные потоки с величинами, выраженными нецелыми числами, даже в тех случаях, когда все пропускные способности суть целые числа (см. упражнение 22.23), однако в этом пока нет необходимости. Часть 5. Алгоритмы на графах
Обобщенный алгоритм Форда-Фалкерсона не дает специального описания какого-либо конкретного метода определения аугментальных путей. Возможно, наиболее перспективное направление дальнейших исследований заключается в использовании обобщенной стратегии поиска на графе, рассмотренной в разделе 18.8. С этой целью мы начнем со следующего определения. Определение 22.4. Пусть задана транспортная сеть и поток в ней, остаточная сеть (residual network) для потока в транспортной сети содержит те же вершины, что и исходная сеть, и одно или два ребра в остаточной сети приходится на каждое ребро исходной сети, которые определены следующим образом: для каждого ребра v-w в исходной сети пусть f есть поток, с — пропускная способность. Если f положительно, следует включить w-v в остаточную сеть с пропускной способностью f; и если f меньше с, необходимо включить ребро v-w в остаточную сеть с пропускной способностью c-f. Если ребро v-w порожнее (f равно 0), в остаточной сети существует одно ребро, соответствующее v-w, с пропускной способностью с; если ребро v-w заполнено (f равно с), то в остаточной сети существует единственное ребро с пропускной способностью f, соответствующее ребру v-w; и если v-w ни заполнено, ни пусто, то оба ребра v-w и w-v входят в остаточную сеть с соответствующими им пропускными способностями. Программа 22.2 определяет класс EDGE, который мы используем для реализации абстракции остаточной сети, с функциями-элементами класса. При такой реализации мы будем работать исключительно с указателями на ребра клиентов. Наши алгоритмы работают с остаточной сетью, однако, по существу, они проверяют пропускные способности и изменения потоков (через указатели на ребра) ребер в клиентских программах. Функции-элементы from и Plotherl позволяют производить обработку ребер с любой ориентацией: функция e.other(v) возвращает конечную точку е, которая не есть v. Функции-элементы capRto и addflowRto(v) реализуют остаточную сеть: если е есть указатель на ребро v-w с пропускной способностью с и потоком f; то е-> capRto(w) есть c-f, a e-> capRto(v) есть f; e-> addflowRto(w, d) добавляет величину d к потоку в этом ребре, а е-> addflowRto(v, d) вычитает величину d из этого потока. Программа 22, 2. Ребра транспортной сети____________________________________ Чтобы реализовать транспортную сеть, мы используем класс GRAPH неориентированного графа из главы 20, позволяющий манипулировать указателями на ребра, которые реализует этот интерфейс. Ребра ориентированы, тем не менее функции-элементы реализуют абстракцию остаточной сети, которая охватывает оба направления каждого ребра (см. текст).
|