Научная статья на тему 'Потоки в кратных сетях'

Потоки в кратных сетях Текст научной статьи по специальности «Математика»

CC BY
83
12
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
КРАТНЫЕ СЕТИ / КРАТНЫЕ ПОТОКИ / NP-ПОЛНОТА / ДЕЛИМЫЕ СЕТИ / ОБОБЩЕННЫЙ АЛГОРИТМ ПОМЕТОК / MULTIPLE NETWORKS / MULTIPLE FLOWS / NP-COMPLETENESS / DIVISIBLE NETWORKS / A GENERALIZED LABELING ALGORITHM

Аннотация научной статьи по математике, автор научной работы — Рублев Вадим Сергеевич, Смирнов Александр Валерьевич

Рассматривается задача нахождения наибольшего потока в кратной сети. Обосновывается NP-полнота задачи для сети произвольной кратности к ≥ 2. Также рассматриваются кратные сети специального вида (делимые сети). Для делимых сетей приводится алгоритм нахождения максимального кратного потока.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Flows in Multiple Networks

The article is devoted to the problem of finding maximum flow in a multiple network. NP-completeness of this problem is proved for networks of any multiplicity к ≥ 2. Also, the networks of a special form (divisible networks) are explored. The algorithm of finding the maximum multiple flow in the divisible network is offered.

Текст научной работы на тему «Потоки в кратных сетях»

УДК 519.85

В.С. Рублев, А.В. Смирнов

Потоки в кратных сетях

Работа выполнена при поддержке ФЦП «Научные и научно-педагогические кадры инновационной России» на 2009-2013 годы (государственный контракт № П161).

Рассматривается задача нахождения наибольшего потока в кратной сети. Обосновывается АР-полнота задачи для сети произвольной кратности k > 2. Также рассматриваются кратные сети специального вида (делимые сети). Для делимых сетей приводится алгоритм нахождения максимального кратного потока.

Ключевые слова: кратные сети, кратные потоки, АР-полнота, делимые сети, обобщенный алгоритм пометок.

V.S. Rublev, A.V. Smirnov

Flows in Multiple Networks

The article is devoted to the problem of finding maximum flow in a multiple network. АР-completeness of this problem is proved for networks of any multiplicity k > 2. Also, the networks of a special form (divisible networks) are explored. The algorithm of finding the maximum multiple flow in the divisible network is offered.

Key words: multiple networks, multiple flows, АР-completeness, divisible networks, a generalized labeling algorithm.

1. Основные понятия и определения

Данная статья посвящена изучению потоков в кратных сетях. Понятие кратных сетей и кратных потоков было введено в работах [2], [4]-[8] применительно к задаче целочисленного сбалансирования трехмерной матрицы. Дадим несколько определений.

Сначала введем целое k>1, которое назовем кратностью потока. В качестве сети рассматривается ориентированный мультиграф G(X,U), между вершинами которого могут быть дуги одного из 3 видов:

1) обычная дуга it с пропускной способностью c(u°), поток по которой не связан с потоком по другим дугам; множество обычных дуг обозначим через U;

2) кратная дуга uk между двумя вершинами, которая состоит из k дуг одной ориентации с одинаковой пропускной способностью c(uk) и одинаковым потоком по каждой из них; множество кратных дуг обозначим через Uk;

3) связанная дуга u между двумя вершинами, которая связана еще с k-1 дугой, имеющими одинаковый один из концов; множество связанных дуг, выходящих из одной вершины или входящих в одну вершину, будем называть мультидугой um; пропускная способность всех связанных дуг одной мультидуги одинакова; поток по каждой связанной дуге из мультидуги одинаков; множество мульти-дуг обозначим через Um.

Множество выходящих из вершины дуг может быть либо только кратными дугами, либо только одной мультидугой (k связанных дуг), либо только обычными дугами.

Из источника x0 сети выходят только кратные дуги, а в сток z сети входит только одна мультидуга. Если из вершины выходят связанные дуги мультидуги, то в нее обязательно входит кратная дуга. Если в вершину входит мультидуга, то из нее может выходить только кратная дуга. Определенный таким образом мультиграф G(X,U) с целочисленными пропускными способностями дуг назовем кратной (транспортной) сетью.

Кратным потоком по сети называется целочисленная функция, определенная на множестве дуг U=UoUUkUUm, для которой выполнены условия неотрицательности, ограниченности (пропускными способностями дуг) и неразрывности потока (в каждой вершине).

© Рублев В.С., Смирнов А.В., 2011

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

Отметим, что при к=1 кратная сеть превращается в обычную транспортную сеть, а кратный поток - в обычный поток по этой сети. Задача о наибольшем кратном потоке для кратной сети является обобщением задачи о наибольшем потоке для обычной транспортной сети.

Обозначим через с(и) пропускную способность дуги и, а через_Ди) - поток на ней.

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

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

Данную задачу мы в дальнейшем будем называть задачей КПк, где к - кратность сети. При такой постановке для положительного ответа на вопрос достаточно указать такой поток в кратной сети, величина которого в точности равна К. Однако этот поток, в точности равный К, указать не всегда возможно, так как если в кратной сети существует поток величины кТ, то в ней не всегда существует поток любой другой величины кБ (1 < S < Т).

Рассмотрим пример. Пусть сеть имеет кратность 2. Определим вершины и дуги сети следующим образом:

X = (Хо, ХЬ Х2, Хз, Х4, Х5, Хб, Х7, Х8, г}, и = ((Хо, Х1), (Хо, Х2)}, и" = {(Х1, (Хз, Х4}), (Х2, (Х5, Хб}), ({Х7, Х8}, г)}, = Х^Х (x4, x7), (x5, Х8Х (xб, Х8)}.

Установим пропускные способности обычных дуг равными 1, пропускную способность мультиду-ги с концом в г установим равной 4, а пропускные способности остальных дуг сделаем равными 2.

Нетрудно убедиться в том, что в данной сети существует поток величины 4 (поток на каждой дуге равен ее пропускной способности), однако невозможно построить поток величины 2.

Отметим однако, что для некоторых классов сетей (например, для делимых сетей, рассмотренных в разделах 4-б) отмеченное свойство будет выполняться, то есть в случае, когда в сети существует поток величины кТ, в ней можно построить и поток любой другой величины, меньшей кТ, с учетом кратности.

2. ЛР-полнота задачи о максимальном потоке кратности 2 Теорема 1. Задача КП2 для сети с целочисленными пропускными способностями дуг является ЫР-полной.

Доказательство. Во-первых, заметим, что задача КП2 для сети с целочисленными пропускными способностями дуг принадлежит классу АР.

Действительно, пусть число вершин кратной сети равно п. Множество дуг U=U°UUkUUm, где J -множество всех обычных дуг, J - множество всех кратных дуг и J - множество всех мультидуг. Общее число обычных дуг будет меньше, чем (п2-п)/2, общее число кратных дуг также не превысит (п2-п)/2, а общее количество мультидуг не превзойдет СП=п(п-1)(п-2)/6. Тогда

U =| ио | + | Jk | + | Jjm |< п2 - п + п - п + п(п - 1)(п - 2) = n3 + 3пп - 4п

1 1 1 1 1 1 2 2 6 6 .

Каждую дугу можно представить в виде пятерки

u = <{Х1, Х2}, {Хз, Х4}, t, c, j>,

где {xi, x2} - вершины, являющиеся началом дуги (x2=0, если u не является мультидугой вида ({хь х2}, х3)), {х3, х4} - вершины, являющиеся концом дуги (х4=0, если u не является мультидугой вида (х1, {х3, х4})), t - тип дуги (обычная, кратная или мультидуга), c - пропускная способность дуги (натуральное число), f - поток на дуге (неотрицательное целое число).

Поскольку кратная сеть G(X,J) однозначно определяется множеством вершин X и множеством дуг J, то вышесказанное позволяет заключить, что объем входных данных задачи нахождения кратного потока заданной величины кратности 2 полиномиален.

Ответ в задаче КП2 задается как целочисленная функция f(u), определяющая величину потока на каждой дуге u, и целое число F - величина кратного потока в рассматриваемой сети. Для того, чтобы проверить, является ли набор f '(u) (u е J), F решением задачи, достаточно установить, что f '(u)<c(u) Vu е J и F>K (соответствует ответу «да» в задаче КП2) и что выполнены условия неразрывности потока в каждой вершине. Обе проверки выполняются за полиномиальное время.

Таким образом, мы установили, что объем входных данных в задаче КП2 полиномиален и проверка ответа осуществляется за полиномиальное время, то есть задача КП2 принадлежит классу АР.

В работах [2, 3, 4] была обоснована АР-полнота задачи целочисленного сбалансирования трехмерной матрицы. Для доказательства этого факта было построено полиномиальное сведение классической задачи о 3-сочетаниях (см. [1]) к следующему сужению класса задач целочисленного сбалансирования (названного задачей ЦС3):

m = t = п; üjjpе [0,1) (i = 1,...,п, j = 1,...,п,p = 1,...,п); a,00 < 1 (i = 1,...,п); a0j0 < 1 (j = 1,.,п); 000p < 1 (p = 1,.,п).

Построим для произвольной индивидуальной задачи ЦС3 кратную сеть целочисленного сбалансирования (см. [4-6]). Установим K = 2п и покажем, что задача ЦС3 полиномиально сводится к задаче КП2 с параметром K = 2п, при этом существенно, что величина потока в такой сети не может быть больше, чем 2п, так как пропускная способность мультидуги с концом в z равна 2п. Следовательно, задача КП2 для этой сети имеет решение тогда и только тогда, когда в сети возможно построить поток величины 2п.

Если существует решение задачи ЦС3, то оно индуцирует поток величины 2п в кратной сети целочисленного сбалансирования.

Из результатов статьи [4] следует, что любой поток величины 2п в кратной сети целочисленного сбалансирования, построенной по задаче ЦС3, индуцирует решение задачи ЦС3, если удовлетворяет условиям:

Т(хЮ0,ху0) + Лх'ю0,ху0) > c(xi00,xj0);

ßx0jp,x0j0) + f(x0jp,x'0j0) > c(x0jp,x0j0); fxi0p,x00p) + j\xi0p,x00p) > c(xi0p,x00p);

(i = 1,...,п, j = 1,.,п, p = 1,...,п).

Покажем, что для потока величины 2п в кратной сети целочисленного сбалансирования, построенной по задаче ЦС3, данные условия выполняются всегда.

Проведем доказательство только для первого условия (выполнение остальных условий устанавливается аналогично).

Возьмем произвольное i = 1,...,п. Заметим, что если ai00 < 1, то aij0 < 1 для всех j =1,.,п, следовательно, c(xi00,xij0) = 0 для всех j = 1,.,п.

Пусть аг00 = 1. Тогда либо все ау0 < 1, и ситуация получается эквивалентной уже рассмотренной, либо же существует агу*0 = 1, а все остальные ау0 = 0. В этом случае с(хг00,ху*0)=2 и с(хЮ0,хгу0)=0 для остальных у. Также в этом случае с(хг00,х'г00)=0. В силу построения сети через вершину хг00 проходит поток величины 2, следовательно, /хг00,хгу*0)=2 и требуемое условие выполняется.

Таким образом, если в сети целочисленного сбалансирования существует поток величины 2п, то по нему можно построить решение задачи ЦС3.

Построение сети по матрице производится с помощью полиномиального алгоритма, все остальные операции, указанные выше, также полиномиальны, следовательно, мы произвели полиномиальное сведение задачи ЦС3 к задаче КП2, и задача КП2 является ЫР-полной.

Теорема доказана.

Следствие. Задача нахождения максимального кратного потока в сети кратности 2 с целочисленными пропускными способностями дуг является ЫР-полной.

Доказательство. Задача КП2 может быть решена при помощи следующего алгоритма:

1) нахождение максимального кратного потока;

2) проверка Р>К (соответствует ответу «да» в задаче КП2), где Р - величина этого максимального потока.

Проверка шага 2 выполняется за константное время, а задача КП2 ЫР-полна. Следовательно, задача нахождения максимального кратного потока в сети кратности 2 с целочисленными пропускными способностями дуг также ЫР-полна.

3. Обобщение для произвольного к

Теорема 2. Задача нахождения максимального кратного потока в сети кратности к с целочисленными пропускными способностями дуг является ЫР-полной, если к>2.

Доказательство. Для доказательства утверждения теоремы покажем сначала ЫР-полноту задачи КПк для произвольного фиксированного к>2.

Во-первых, заметим, что задача КПк для сети с целочисленными пропускными способностями дуг принадлежит классу ЫР.

Действительно, пусть число вершин кратной сети равно п. Множество дуг и=и°иикиЦя, где V -множество всех обычных дуг, Ц - множество всех кратных дуг, и V" - множество всех мультидуг. Общее число обычных дуг будет меньше, чем (п2-п)/2, общее число кратных дуг так же не превысит (п -п)/2, а общее количество мультидуг не превзойдет СП. Тогда

2 2

и =| и01 +1 ик | +1 ит |< + + Ск = 0(пк).

......2 2 п ^

Каждую дугу можно представить в виде пятерки

и = <Х, Х2, 1, с, />,

где X] - множество вершин, являющихся началом дуги (при этом либо |Х[|=1, либо |=к), Х2 - множество вершин, являющихся концом дуги (при этом либо |Х2|=1, либо Х2|=к), 1 - тип дуги (обычная, кратная или мультидуга), с - пропускная способность дуги (натуральное число), / - поток на дуге (неотрицательное целое число).

Поскольку кратная сеть G(X,U) однозначно определяется множеством вершин X и множеством дуг Ц, то вышесказанное позволяет заключить, что объем входных данных задачи нахождения кратного потока заданной величины кратности к полиномиален.

Ответ в задаче КПк задается как целочисленная функция /(и), определяющая величину потока на каждой дуге и, и целое число Р - величина кратного потока в рассматриваемой сети. Для того, чтобы проверить, является ли набор / '(и) (и еЦ), Р решением задачи, достаточно установить, что / '(и)<с(и) Уи еЦ и Р>К (соответствует ответу «да» в задаче КПк) и что выполнены условия неразрывности потока в каждой вершине. Обе проверки выполняются за полиномиальное время.

Таким образом, мы установили, что объем входных данных в задаче КПк полиномиален и проверка ответа осуществляется за полиномиальное время, то есть задача КПк принадлежит классу ЫР.

Покажем теперь полиномиальную сводимость задачи КП2, построенной по произвольной индивидуальной задаче ЦС3, к задаче КПк.

Изменим сеть следующим образом.

1. Добавим вершины xq, zq и обычные дуги (xq, zq) (q = 3,..,,k). Установим пропускную способность этих дуг равной п.

2. К каждой кратной дуге добавим k - 2 связанных дуг; пропускная способность каждой кратной дуги увеличится, соответственно, в k/2 раз.

3. Заменим мультидугу с концом в z на мультидугу ({z1,., zk}, z) пропускной способности kn (каждая связанная дуга этой мультидуги имеет пропускную способность п).

4. Мультидуги (XijP, {xojp, xMp}) заменим на мультидуги (ХуР, {xojp, хЮр, Хз,., Xk}) (/>0, j>0, p>0) пропускной способности k (каждая связанная дуга этих мультидуг имеет пропускную способность 1).

5. Установим K = kn.

Очевидно, что после выполнения указанных операций сеть будет иметь кратность k, а решение задачи КП2 с K = 2п будет эквивалентно решению задачи КПк с K = kn. Операции шагов 1-5 выполняются за полиномиальное количество шагов, при этом существенно, что величина потока в такой сети не может быть больше, чем kn, так как пропускная способность мультидуги с концом в z равна kn. Следовательно, задача КПк для этой сети имеет решение тогда и только тогда, когда в сети возможно построить поток величины kn.

Таким образом, мы выполнили полиномиальное сведение задачи КП2, построенной по произвольной индивидуальной задаче ЦС3, к задаче КПк. В теореме 1 была доказана NP--полнота такой задачи КП2, следовательно, задача КПк также является NP-полной.

Задача КПк может быть решена при помощи следующего алгоритма:

1) нахождение максимального кратного потока;

2) проверка F*>K (соответствует ответу «да» в задаче КПк), где F - величина этого максимального потока.

Проверка шага 2 выполняется за константное время, а задача КПк NP-полна. Следовательно, задача нахождения максимального кратного потока в сети кратности k с целочисленными пропускными способностями дуг также NP-полна.

Теорема доказана.

4. Кратные сети специального вида

Пусть имеется кратная сеть произвольной кратности k. Пусть при удалении всех мультидуг сеть распадается на k + 2 слабо связных компоненты, при этом одна компонента состоит только из вершины z, компонента, содержащая вершину x0, содержит только кратные дуги, а остальные k компонент содержат только обычные дуги. Если при этом каждая мультидуга имеет ровно один конец в каждой из k компонент, содержащих обычные дуги, то такую сеть мы будем называть делимой.

Примером делимой сети может служить кратная сеть целочисленного сбалансирования трехмерной матрицы, подробно рассмотренная в [4]—[6]. Дадим несколько определений, относящихся к делимой сети.

Обозначим через P0 компоненту делимой сети, содержащую кратные дуги, через P1,.,Pk обозначим компоненты, содержащие обычные дуги. Тогда частью О, делимой сети (/ = 1,...,k) назовем объединение соответствующей компоненты P/ с инцидентными ей связанными дугами всех мультидуг, кроме мультидуги с концом в z, а также с /-ой связанной дугой каждой кратной дуги компоненты P0.

Заметим, что возможность выделения частей О/ является особенностью делимых сетей. Так, например, для сети, рассмотренной в разделе 1, выделить части О1 и О2 невозможно.

Обозначим начальные вершины мультидуги с концом в z через zb...,zk. Вершины, являющиеся началом остальных мультидуг будем обозначать через jj.

Объединение мультидуги и™, идущей из вершин zi,...,zk> в z, и k путей ßr; (r = 1,...,k), каждый из которых является ориентированным путем в соответствующей части Ог из вершины x0 в вершину zr, назовем обобщенным путем, если каждый из путей ßr проходит через одну и ту же вершину jj.

Кратный поток назовем полным, если любой обобщенный путь из x0 в z имеет дугу и (обычную, кратную или мультидугу), поток по которой равен ее пропускной способности fu) = c(u).

Проекция Ct (/ = 1,...,k) подграфа C на часть сети О, - это часть подграфа C, образованная его вершинами и дугами, принадлежащими О/.

Так как части G, (i = 1,...,k) сети G представляют собой обычные транспортные сети с источником x0 и стоком zb то будем называть некоторый путь из x0 в z{ путем прорыва в части Gh если f(u) < c(u) на прямых дугах и f(u) > 0 на обратных дугах этого пути.

Пусть в делимой сети определен некоторый поток (величины (z > 0. Кратным циклом в делимой сети G(X,U), где X- множество вершин, U - множество дуг (обычных, кратных или мультидуг), назовем такой подграф C(X,U), X сX, U с U, для которого:

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

1) проекции Cb...,Ck на части Gb...,Gk соответственно есть объединение некоторых циклов, причем дуги, поток по которым ненулевой, могут проходиться в обратном направлении;

2) проекции C1,.,Ck согласованы (одинаковы) на общей части подграфов G1,.,Gk;

3) C1 представим в виде C1 = U{C]}, где Cj - некоторые циклы и C)<£ Cj V j Ф k; при этом для любой дуги u из G1 выполняется неравенство

0 < f(u) + a+(u) - cT(u) < c(u), где a+(u) - это число циклов Cj, в которых дуга u проходится в прямом направлении, а a"(u) - это число циклов Cj1, в которых дуга u проходится в обратном направлении. Такое же условие должно выполняться и для C2,...,Ck.

Обобщенным путем прорыва в делимой сети G(X,U) для некоторого кратного потока ( назовем такой подграф S(X,U), X сX, U с U, для которого:

1) каждая из проекций Sb...,Sk на части Gb...,Gk соответственно есть объединение ровно одного пути прорыва из x0 в z, и некоторых циклов, причем дуги, поток по которым ненулевой, могут проходиться в обратном направлении;

2) проекции S1,.,Sk согласованы (одинаковы) на общей части подграфов G1,.,Gk;

3) S1 представим в виде S1 = ^1U{C;1}, где jU1 - путь прорыва, Cj - некоторые циклы и C)<£ Cj V j Ф k; при этом для любой дуги u из G1 выполняется неравенство

0 < f(u) + a+(u) - a~(u) < c(u), где a (u) - это число элементов множества jU\U{C]j}, в которых дуга u проходится в прямом направлении, а a"(u) - это число элементов множества ^1U{C;1}, в которых дуга u проходится в обратном направлении. Такое же условие должно выполняться и для S2,.,Sk;

4) дуга ({z1,.,zk}, z)е U иf({zl,.,zk}, z) < c({zb..,,Zk}, z);

5) S не содержит кратного цикла.

Обозначим G( = G(X, U(); U( = {u | fu) Ф 0}. Справедливо следующее утверждение.

12 12

Теорема 3. Пусть ( (U), ( (U) - два полных потока в делимой сети G(X,U), причем (z <(..

0 2 1

Пусть ( (U) =( (U) - ( (U). Тогда граф G( = {Si}U{C;}, где {S,} - множество всех обобщенных

1 2

путей прорыва из x0 в z, а {Cj} - множество всех кратных циклов. В случае, когда (z =(z =(z max, {Si} = 0.

Аналог теоремы 3 для кратных сетей целочисленного сбалансирования трехмерной матрицы обосновывается в статье [4]. Доказательство в данном случае сохраняется с точностью до количества частей G

5. Алгоритм нахождения максимального потока в делимой сети

Приведем алгоритм нахождения максимального потока в делимой сети. Данный алгоритм является обобщением алгоритма нахождения максимального кратного потока для решения задачи целочисленного сбалансирования трехмерной матрицы, рассмотренного в работах [4, 8].

Работа алгоритма происходит в два этапа:

1) этап построения полного потока;

2) этап увеличения потока. Если полученный полный поток не является максимальным, то увеличиваем поток при помощи обобщенного алгоритма пометок (см. ниже) до тех пор, пока поток не станет максимальным.

Алгоритм нахождения полного потока прост. На данном этапе увеличения потока можно добиваться, находя все возможные обобщенные пути прорыва из x0 в z через вершины y без обратных дуг и увеличивая поток по ним. В итоге будет получен полный поток.

Рассмотрим обобщенный алгоритм пометок. Идея алгоритма состоит в следующем: в проекциях Gl,...,Gk поочередно строятся пути прорыва ¡и1,.,Цк (возможно, в объединении с некоторыми циклами) до тех пор, пока пути в обеих проекциях не станут согласованными, либо же не останется вариантов для продолжения построения пути. В первом случае объединение Ц\,...,у,к с мультидугой с концом в г даст обобщенный путь прорыва, во втором случае производится откат до «точки ветвления», после чего выполнение алгоритма возобновляется.

Дадим теперь формальное описание обобщенного алгоритма пометок для делимой сети:

1. С помощью алгоритма Форда - Фалкерсона находим путь прорыва ¡Л1 в части G1. Устанавливаем I = 1, г = 2.

2. Части пути ^1, соответствующие кратным дугам, добавляем к пути /иг в части Gг. Все пометки вершин компоненты Р0 в части Gг заменяются соответствующими пометками из части Gl. Добавляем к пути /иг также дуги (у, х*) или (х*, у), являющиеся связанными дугами мультидуг и инцидентные тем уу, которые были добавлены к пути /иг, ставим соответствующие пометки (в случае добавления дуги (у, х ) вершина х получает пометку {+у}, в случае добавления дуги (х , у) вершина у у получает пометку {-х }).

Вершины х*, добавленные на этом шаге к пути /иг, образуют два множества: X={x*|(уj,x*) е /иг } иX ={х*|(х*, у)е /иг }. Каждое вхождение вершины в одно из множеств считаем уникальным. Тогда либо X+| = XI + 1, либо X+l = XI. Если XI = XI + 1, то добавляем в множество X вершину гг.

3. В части Gг будем строить поток из X в X. Для этого мы будем поочередно брать вершины из множества X и строить путь из выбранной вершины до тех пор, пока не будет достигнута какая-либо вершина из множества Xлибо же это не окажется невозможным (в таком случае переходим к шагу 5). После построения очередного пути вершины, являющиеся его началом и концом, удаляются из множеств X и X.

На шаге 3 в путь могут включаться вершины, уже помеченные при построении предыдущих путей, кроме вершин у. Таким образом, вершины могут иметь более одной пометки. При построении очередного пути дуги ранее полученных путей могут проходиться в обратном направлении, соответствующие пометки взаимно уничтожаются. Также при построении очередного пути разрешается проходить дуги в том направлении, в котором они были пройдены в уже построенных путях, если не будет нарушено условие

0 </а,Ь) + а+(а,Ъ) - а~(а,Ь) < с(а,Ь), где (а,Ь) - дуга, а+(а,Ь) - количество пометок {+а} у вершины Ь, а(а,Ь) - количество пометок {-Ь} у вершины а.

После получения какого-либо пути на шагах 1-3 все вершины этого пути, от которых могут быть помечены вершины, не принадлежащие этому пути, помечаются как точки ветвления, а все вершины, которые могут быть помечены от нее, включаются в список вариантов данной вершины. Если вершина, помечаемая как точка ветвления, уже была таковой в одном из ранее построенных путей, то с ней связывается новый список вариантов. Таким образом, с вершиной может быть связано несколько списков вариантов.

4. Если пути прорыва в частях G1,...,Gk согласованы, то переходим к шагу 6.

Иначе полагаем I = I + 1, г = г + 1. Если теперь I > к, то полагаем I = 1. Аналогично, если г > к, то полагаем г = 1. Переходим на шаг 2. Если на шагах 2-3 не удается построить поток в части Gг, то переходим на шаг 5.

5. Выполняем откат до ближайшей точки ветвления. После этого переходим к построению пути на шаге 1 или на шаге 3 в зависимости от ситуации. При этом запрещается добавлять в данный путь дуги, соединяющие точку ветвления с вершинами, не входящими в список вариантов. В случае, если рассматриваемый путь удается построить, из списка вариантов выбранной точки ветвления удаляется вершина, получившая в этом пути пометку от точки ветвления. В противном случае текущий список вариантов данной вершины удаляется и выполняется откат до следующей точки ветвления.

6. Объединение /Л1,...,у,к и мультидуги с концом в г образует обобщенный путь прорыва. Изменяем поток на каждой дуге (а,Ь), входящей в этот обобщенный путь прорыва, на величину а (а,Ь) - а~ (а,Ь), где а (а,Ь) - количество пометок {+а} у вершины Ь, а (а,Ь) - количество пометок {-Ь} у вершины а (с учетом кратности дуги). Поток на мультидуге ({г1,.,гк}, г) увеличиваем на величину к.

66 В.С. Рублев, А.В. Смирнов

6. Обоснование алгоритма

Теорема 4. Максимальный поток в делимой сети может быть найден при помощи указанного в разделе 5 алгоритма.

Доказательство. Отметим, что максимальный поток в делимой сети не может превышать величины с({гь...,гк}, г).

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

На первом этапе алгоритма, очевидно, будет получен полный поток величины кТ. Если кТ < с({г1,.,гк}, z), то нам необходимо выполнить обобщенный алгоритм пометок не более, чем с({г1,.,гк}, г) / к - Т раз. После любого применения обобщенного алгоритма пометок поток может уже не быть полным. Поэтому рассмотрим две ситуации:

1) Обобщенный алгоритм пометок был применен I раз (1 < I < с({^,.. ,,.гк}, г) / к - Т - 1). Поток величины к(Т + I) не является полным.

В этом случае найдется у0: существуют пути прорыва /,...,/ в частях G1,...,Gk, проходящие через у;0, согласованные на общей части (так как все изменения на предыдущих шагах алгоритма производились согласованно в частях G1,...,Gk) и не содержащие обратных дуг.

Объединение /,...,/ и мультидуги с концом в г даст обобщенный путь прорыва, который и будет найден обобщенным алгоритмом пометок (так как он самый короткий из всех возможных).

2) Обобщенный алгоритм пометок был применен I раз (0 < I < с({г1,.,гк}, г) / к - Т - 1). Поток величины к(Т + I) является полным. Рассмотрим случаи:

а) Поток является максимальным. В этом случае алгоритм переберет все варианты и установит, что невозможно построить обобщенный путь прорыва.

б) Поток не является максимальным.

1 2

Обозначим имеющийся поток через (р (V). По теореме 3 существует полный поток (р (V) величины рр = рр + к такой, что Gр0 = {^ЩСу}, где рРЩ) = рР{Ц) - рР{Ц), {£г} - множество всех обобщенных путей прорыва из х0 в г, а {С;} - множество всех кратных циклов, причем |{^г}|=1.

Изменим поток (р таким образом, чтобы {С;} = 0. Это всегда можно сделать, так как изменение потока на кратном цикле не приведет к нарушению условий неразрывности потока в вершине и неотрицательности потока. Однако теперь поток рр может уже не быть полным.

В результате указанных действий G(0 будет состоять из единственного обобщенного пути прорыва 50. Следовательно, для того, чтобы увеличить на к поток рр, достаточно найти какой-либо обобщенный путь прорыва.

Докажем теперь, что обобщенный путь прорыва может быть найден обобщенным алгоритмом пометок.

Заметим, что проекции /,...,/ обобщенного пути прорыва на части G1,...,Gk сети есть объединение одного пути прорыва из х0 в г и некоторых циклов, причем никакие множества циклов {С^} с /Лк (г = 1,.,к) не образуют кратного цикла (иначе ^0=5*0 U С0). Поэтому возможно построить 50, применяя шаги 1-4 обобщенного алгоритма пометок. При выполнении алгоритма может возникнуть ситуация, когда на шагах 1-4 будет построен участок пути, не входящий ни в один из возможных обобщенных путей прорыва. Тогда применяется система откатов шага 5, которая в худшем случае позволит перебрать все возможные варианты. Так как количество этих вариантов конечно и один и тот же вариант не может быть просмотрен дважды (по построению алгоритма), то обобщенный путь прорыва будет найден за конечное число шагов.

Теорема доказана.

Замечание. К задаче нахождения наибольшего потока в делимой сети кратности 2 сводится задача целочисленного сбалансирования трехмерной матрицы (см. [2]-[8]). Однако в алгоритм нахождения максимального кратного потока вводится дополнительный этап коррекции потока, связанный с тем, что решение задачи сбалансирования индуцируется только потоками, удовлетворяющими так называемым условиям разрешимости. Предположительно, задачу целочисленного сбалансирования произвольной кратности к + 1 можно свести к задаче о максимальном потоке в делимой сети кратности к,

также потребовав дополнительно выполнения некоторых условий разрешимости. Приведенный в данной статье алгоритм возможно использовать как базовый алгоритм для решения подобной задачи, введя в него дополнительный этап коррекции потока в соответствии с условиями разрешимости.

Библиографический список

1. Гэри, М., Джонсон, Д. Вычислительные машины и труднорешаемые задачи [Текст] / М. Гэри, Д. Джонсон. - М. : Мир, 1982.

2. Рублев, В.С., Смирнов, А.В. ЫР-полнота задачи целочисленного сбалансирования 3-мерной матрицы [Текст] / В.С. Рублев, А.В. Смирнов // Синтаксис и семантика логических систем : материалы 3-й Российской школы-семинара. - Иркутск : Изд-во ГОУ ВПО «Восточно-Сибирская государственная академия образования», 2010. - С. 85-89.

3. Рублев, В.С., Смирнов, А.В. ЫР-полнота задачи целочисленного сбалансирования трехмерной матрицы [Текст] / В.С. Рублев, А.В. Смирнов // ДАН. - 2010. - Т. 435, № 3. - С. 314-316.

4. Рублев, В.С., Смирнов, А.В. Задача целочисленного сбалансирования трехмерной матрицы и алгоритмы ее решения [Текст] / В.С. Рублев, А.В. Смирнов // Моделирование и анализ информационных систем. - 2010. -Т. 17, № 2. - С. 72-98.

5. Рублев, В.С., Смирнов, А.В. Целочисленное сбалансирование 3-мерной матрицы плана [Текст] / В.С. Рублев, А.В. Смирнов // Труды VII международной конференции «Дискретные модели в теории управляющих систем» (Покровское 4-6 марта 2006 г.). - М. : МГУ, 2006. - С. 302-308.

6. Рублев, В.С., Смирнов, А.В. Целочисленное сбалансирование трехмерной матрицы плана и обобщенная теория потоков [Текст] / В.С. Рублев, А.В. Смирнов // Доклады Одесского семинара по дискретной математике. - Одесса : Астропринт, 2006. - Вып. 3. - С. 38-46.

7. Смирнов, А.В. Задача целочисленного сбалансирования трехмерной матрицы и сетевая модель [Текст] / А.В. Смирнов // Моделирование и анализ информационных систем. - 2009. - Т. 16, № 3. - С. 70-76.

8. Смирнов, А.В. Сравнительный анализ алгоритмов целочисленного сбалансирования матрицы [Текст] / А.В. Смирнов // Материалы X Международного семинара «Дискретная математика и ее приложения» (Москва, МГУ, 1-6 февраля 2010 г.). - М. : МГУ, 2010. - С. 430-432.

9. Форд, Л.Р., Фалкерсон, Д.Р. Потоки в сетях. [Текст] / Л.Р. Форд, Д.Р. Фалкерсон. - М. : Мир, 1966.

i Надоели баннеры? Вы всегда можете отключить рекламу.