Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Глава 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, позволяющий манипулировать указателями на ребра, которые реализует этот интерфейс. Ребра ориентированы, тем не менее функции-элементы реализуют абстракцию остаточной сети, которая охватывает оба направления каждого ребра (см. текст).






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.