Введение.
Одной из основных и наиболее изученных потоковых задач является задача о поиске максимального потока. Важность величины максимального потока в сети проистекает из того, что это глобальная характеристика всей сети, позволяющая оценить такие свойства сетей (транспортных, телекоммуникационных, ресурсных), как общая загруженность сети. Основываясь на знании о строении сети и максимальном допустимом потоке, можно выявить такие особенности конкретной сети, как избыточность дуг сети в ситуации, когда максимальный поток достижим без использования пропускных способностей некоторых из дуг или, например, определить узкие места в инфраструктуре, моделируемой сетью.
Однако несмотря на то, что известны быстрые, полиномиально вычислимые алгоритмы поиска максимального потока ранее было показано, что эти алгоритмы, как и иные классические алгоритмы на графах, в общем случае неприменимы для решения задач в сетях со связанными дугами [1]. Постановка задачи о максимальном потоке в сети со связанными дугами описана далее.
Целью данной работы является нахождение класса сетей со связанными дугами, для которых возможно построение полиномиального алгоритма решения задачи поиска максимального потока.
1. Постановка задачи. В классической постановке потоковых задач рассматриваются сети следующего вида.
Определение 1. Сетью назовем связный конечный ориентированный граф , в котором множество вершин сети, множество дуг сети, отображение инцидентности, отображение, назначающее каждой из дуг пропускную способность .
Сети, удовлетворяющие определению 1 будем называть классическими сетями. Как и в [8], источник будем обозначать через , сток через , а все вершины сети из множества будем называть промежуточными.
Определение 2. Потоком в сети называется отображение , ставящее в соответствие каждой из дуг значение из , удовлетворяющее в каждой промежуточной вершине соотношению неразрывности потока
Величиной потока (обозначаемой через ) в сети назовем суммарную величину потока по дугам, входящим в сток, т.е.
Для классических сетей задача поиска величины максимального потока решена Л. Фордом и Д. Фалкерсоном (см. [6]). Для ее решения используются алгоритмы, в том числе имеющие квадратичную от размеров сети вычислительную сложность (см. [7]).
Определение 3. Сеть со связанными дугами это сеть, множество дуг которой содержит такое подмножество дуг , , называемое множеством связанных дуг. Для дуг из не задана пропускная способность , а задана суммарная пропускная способность . Сети со связанными дугами возникают естественным образом при рассмотрении сетей с ограничениями на достижимость (см. [2, 4]).
В общем случае может быть задано несколько множеств связанных дуг, причем они должны быть попарно непересекающимися, но в данной работе будем считать, что сеть содержит ровно одно множество связанных дуг.
Для связанных дуг не определена пропускная способность, а значит для них не может быть определен поток (см. определение 2) и, следовательно, задача поиска величины максимального потока должна иметь другую постановку.
Для того, чтобы стало возможным назначать поток связанным дугам, необходимо сначала определить пропускную способность каждой из связанных дуг , так, чтобы выполнялось соотношение
(1)
После назначения для дуг множества сеть со связанными дугами может рассматриваться как классическая сеть, которую будем обозначать , и на полученной сети уже можно рассматривать задачу о нахождении величины максимального потока .
Определение 4. Величиной максимального потока в сети со связанными дугами называют величину , где берется по всем возможным назначениям , .
Замечание. Ясно, что для нахождения в сети со связанными дугами можно рассматривать только такие назначения пропускных способностей, для которых в (1) выполняется равенство.
Рассмотрим пример сети со связанными дугами и обсудим, как различные варианты назначения связанным дугам влияют на .
Пример 1. На рис. 1 изображена сеть со связанными дугами. Здесь и далее в примерах связанные дуги изображены стрелками со штриховыми линиями, а несвязанные дуги стрелками со сплошными линиями. Пропускные способности дуг указаны на рисунке, а .
Рис. 1. Сеть с двумя связанными дугами
Если для верхней связанной дуги с рис. 1 назначить , а для нижней связанной дуги назначить , то будет получена сеть, изображенная на рис. 2, для которой величина максимального потока равна .
Рис. 2. Неоптимальное назначение пропускных способностей связанных дуг
Однако для сети, изображенной на рис. 1, существует оптимальное назначение пропускных способностей дуг, при котором достигается максимальный поток величиной в , а именно, такое назначение, что , (рис. 3).
Рис. 3. Оптимальное назначение пропускных способностей связанных дуг
Ясно, что существует бесконечное количество способов назначения для , а значит, и бесконечное количество классических сетей, которые могут быть получены из сети со связанными дугами. Тогда задача поиска максимального потока величиной для сети со связанными дугами формулируется как задача нахождения такого назначения пропускных способностей связанным дугам, при котором будет получена сеть, максимальный поток в которой является наибольшим по величине среди максимальных потоков всех возможных сетей, которые могут быть получены из путем назначения для дуг .
Сеть, изображенная на рисунке 1, примечательна тем, что при любом назначении пропускных способностей, при котором и будет получена классическая сеть, величина максимального потока в которой не будет равна .
Однако существуют сети со связанными дугами, из которых может быть получено более одной классической сети, имеющей . Например, если для сети, изображенной на рис. 1, суммарная пропускная способность , то при любых назначениях, при которых одновременно и , будет . Кроме того, при назначении не всей суммарной пропускной способности, а только и из , остаточная (неиспользованная) пропускная способность составит , а максимальный поток величины все равно будет получен. Но также ясно, что при любом или величина максимального потока получаемой классической сети .
В сетях со связанными дугами проявляется «нелокальность» влияния назначений пропускных способностей. Приведенный ниже пример раскрывает данную проблему.
Пример 2. Пусть дуги сети (рис. 4), не принадлежащие множеству связанных дуг, имеют пропускные способности, равные , а , где состоит из дуг - и - .
Рис. 4. Сеть со связанными дугами 1-2 и 3-5
При назначении пропускной способности по дуге - величиной используется вся пропускная способность связанных дуг, а поток в данной сети осуществим лишь по пути - - (рис. 5) и является максимальным потоком. Возможность назначения ненулевого потока по дуге - заблокирована, однако величина максимального потока в полученной сети не равна .
Рис. 5. Блокирующий поток в сети со связанными дугами
Однако если произвести назначение пропускной способности величиной по дуге - , то по дугам - , - , - , - , - (рис. 6) станет осуществимым максимальный поток величиной .
Рис. 6. Максимальный поток в сети со связанными дугами
Этот пример отражает не только свойство нелокальности изменений, происходящих при назначениях пропускных способностей в сети со связанными дугами, но также заставляет обратить внимание, на то, что несмотря на одинаковые пропускные способности (а соответственно, и возможность внести одинаковый вклад в формирование максимального потока), связанные дуги - и - неравноценны и любое назначение ненулевой пропускной способности по дуге - приводит получению сети, величина максимального потока в которой не равна .
Может показаться, что найденный максимальный поток равен сумме пропускных способностей дуг любого из минимальных разрезов данной сети (например, разреза, состоящего из дуг - и - ). Но для сетей со связанными дугами понятие минимального разреза не имеет смысла, так как для каждой из связанных дуг, взятой в отдельности, пропускная способность не определена. Минимальный разрез может быть определен лишь для классических сетей, полученных из сети со связанными дугами.
По причине возникновения блокирующих потоков наподобие изображенного на рис. 4 в сети с произвольной топологией назначение пропускной способности для одной из связанных дуг может повлиять на возможность назначения потока в любом из участков сети, содержащих связанные дуги из того же множества связанных дуг. Поэтому рассмотрим решение задачи о максимальном потоке начиная с наиболее простых классов сетей параллельных сетей.
2. Максимальный поток в параллельных сетях с одним множеством связанных дуг
Определение 5. Параллельная сеть сеть, содержащая только простые пути, ведущие из источника в сток, которые не имеют общих вершин, отличных от источника и стока (см. [5]).
Представленная ранее сеть (см. рис. 4) не удовлетворяет приведенному определению 5, поскольку простые пути - - и - - - из источника в сток в пересечении по вершинам содержат не только источник и сток, но и общую промежуточную вершину . Из определения 5 следует, что
(2)
(3)
где , полустепени захода и исхода вершины ( ) соответственно, а количество параллельных путей.
Если сеть удовлетворяет определению 1, а именно,
(4)
где число компонент связности графа , то следствия (2) и (3) необходимые и достаточные условия, при выполнении которых является параллельной сетью.
Из условий (2), (3), (4) определение того, является ли сеть параллельной, осуществимо за линейное от размеров сети (количества дуг и вершин сети) время путем модифицированного обхода в глубину (см. [3]).
Замечание. Определение 4 сформулировано для сетей с одним источником и одним стоком, но может быть распространено и на сети с несколькими источниками и стоками. Если при объединении всех источников в один источник и объединении всех стоков в один сток будет получена параллельная сеть, то будем считать исходную сеть параллельной (для такой сети условия (2), (3), (4) должны быть сформулированы с учетом нескольких источников и стоков).
Примером параллельной сети с одним множеством связанных дуг является сеть, изображённая на рис. 7.
Рис. 7. Параллельная сеть со связанными дугами
Пример 3. Пропускные способности несвязанных дуг указаны на рис. 7, . Если для этой сети, назначить ненулевую пропускную способность величины для связанных дуг по пути - - - , а для остальных связанных дуг установить пропускную способность в , то будет получена сеть, изображенная на рис. 8, для которой .
Рис. 8. Параллельная сеть с ненулевыми пропускными способностями пути 1-2-3-4
Если при назначении пропускных способностей для этой же сети установить ненулевую пропускную способность только для связанных дуг пути - - - - величины , а для остальных связанных дуг назначить нулевую пропускную способность, то будет получена классическая сеть, изображенная на рис. 9. Величина максимального потока в полученной сети составит .
Рис. 9. Параллельная сеть с ненулевыми пропускными способностями пути 1-5-6-7-4
Если при назначении пропускных способностей для этой же сети установить для связанных дуг - , - , - пропускную способность величины , а для остальных связанных дуг нулевую пропускную способность, то будет получена классическая сеть, изображенная на рис. 10, у которой .
Рис. 10. Параллельная сеть с VGρ = VG
Для того, чтобы сравнить полученные варианты назначений потоков (рис. 810) для каждого из путей , из в , определим две характеристики кратность связанных дуг и пропускную способность по несвязанным дугам следующим образом:
Необходимо отметить, что в приведенных выше примерах (рис. 810), «цена» прохождения потока в отношении использования по разным путям различна. Для того, чтобы организовать поток величины ( ) по пути - - - , потребуется использовать пропускной способности из по на каждую из трех дуг этого пути. Поток величины по пути - - - - потребует уже задействования суммарной пропускной способности величиной из . Путь - - - - - является самым выгодным по отношению использования прохождение потока величиной по этому пути требует назначения пропускной способности величины по единственной связанной дуге в этом пути - .
Таким образом, поток, проходящий по пути с меньшим числом связанных дуг, т.е. с меньшей кратностью , получает меньшую «цену» в отношении использования . На основе этого принципа строится алгоритм поиска максимального потока для параллельных сетей с одним множеством связанных дуг, который описан далее.
3. Алгоритм нахождения максимального потока в параллельной сети с одним множеством связанных дуг
Алгоритм нахождения максимального потока в параллельной сети с одним множеством связанных дуг состоит из следующих шагов.
Шаг 1. Пронумеровать параллельные пути в неубывающем по порядке. В случае, если (), доупорядочить так, чтобы .
Шаг. 2. Положить .
Шаг. 3. Положить, что пропускная способность всех путей .
Шаг. 4. Производить перебор путей в порядке возрастания их порядковых номеров и для каждого из путей перейти на шаг 5. По завершении перебора путей перейти на шаг 7.
Шаг. 5. Если , то и перейти на шаг 4; иначе перейти на шаг 6.
Шаг. 6. Вычислить . Если , то , присвоить всем связанным дугам пути пропускную способность, равную и , а также перейти на шаг 4; иначе присвоить всем связанным дугам пути пропускную способность, равную и , установить и перейти на шаг 7.
Шаг. 7. Вычислить величину максимального потока, просуммировав . Завершить работу алгоритма.
Этот алгоритм имеет полиномиальную вычислительную сложность от размеров сети, так как подсчет количества связанных дуг для каждого из путей осуществим за линейное время, а сортировка путей по кратностям связанных дуг за полиномиальное c помощью известных алгоритмов сортировки, таких как сортировка бинарным деревом, сортировка слиянием, имеющих квадратичную вычислительную сложность (см. [3]).
Замечание 1.
1.Если работа алгоритма прекращается досрочно, то это означает, что суммарной пропускной способности связанных дуг недостаточно, чтобы обеспечить наличие ненулевого потока на каждом из параллельных путей.
2.Доупорядочение последовательности путей в случае по условию может существенно ускорить выполнение алгоритма, когда суммарной пропускной способности связанных дуг недостаточно, чтобы обеспечить наличие ненулевого потока на каждом из параллельных путей.
Пример 4. Применим вышеописанный алгоритм к сети, изображенной на рис. 11, для которой , а пропускные способности дуг из указаны на рис. 11 рядом с каждой из дуг.
Рис. 11. Параллельная сеть
Обозначим пути из в на рис. 11 как в порядке сверху вниз. Шаг 1 алгоритма предполагает вычисление и . Для рис. 11 значения путей и значения равны
Тогда по завершении шага 1 алгоритма порядок выбора путей будет следующим:
при этом пути , и , попарно равны по , поэтому были доупорядочены по .
На шаге 2 . На шаге 3 пропускные способности всех путей обнуляются. В цикле, начинающемся на шаге 4, пути и будут получать пропускные способности величиной на шаге 5, поскольку не имеют в своем составе связанных дуг. Для пути на шаге 5 будет определена пропускная способность величиной в , поскольку , а на данном шаге станет равным .
Для пути на шаге 5 будет израсходована вся остаточная пропускная способность , за счет которой связанным дугам этого пути будет назначена пропускная способность , после чего произойдет переход на шаг 7 с подсчетом величины максимального потока и завершение работы алгоритма, следовательно путь не будет обработан в цикле и назначенная для него на шаге 3 пропускная способность останется равной . Итак, по результатам работы алгоритма максимальный поток для параллельной сети со связанными дугами с рис. 11 будет равен .
Заключение.
В работе были рассмотрены параллельные сети со связанными дугами как отдельный класс сетей. Показано что из всех сетей со связанными дугами можно выделить классы, для которых существуют алгоритмы с полиномиальным временем решения потоковых задач (подобно представленному алгоритму нахождения максимального потока) несмотря на NP-разрешимость общей задачи.
Дальнейшая работа по изучению потоков в сетях со связанными дугами может включать решение задачи о максимальном потоке в параллельных сетях с несколькими множествами связанных дуг. Помимо параллельных сетей, большой интерес представляет выделение других классов сетей и отыскание для них быстрых алгоритмов решения потоковых задач.