Ремонт принтеров, сканнеров, факсов и остальной офисной техники


назад Оглавление вперед




[185]

Рис. 27.6 27.6 Работа процедуры FoRD-FuLKERSON. (a)-(d) Шаги выполнения цикла. Слева изображена остаточная сеть Gf (дополняющий путь р выделен серым), справа показан увеличенный поток. Вначале (а) роль остаточной сети играет исходная сеть G. (е) Остаточная сеть более не содержит дополняющего пути; поток максимален.

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

Время работы процедуры Ford-Fulkerson зависит от того, как ищется путь р (строка 4). В принципе алгоритм может вообще не остановиться, если значение потока будет расти всё более мелкими шагами, так и не достигнув максимума. Однако если выбирать дополняющий путь при помощи поиска в ширину (раздел 23.2), то алгоритм работает полиномиальное время. Прежде чем доказать это, мы установим простую верхнюю оценку для случая целых пропускных способностей. (Этот случай часто встречается на практике. Случай рациональных пропускных способностей сводится к нему умножением на число.)

Для указанного случая (пропускные способности - целые числа), процедура Ford-Fulkerson выполняется за время 0(E\f*\), где /* - максимальный поток. В самом деле, выполнение строк 1-3 требует времени @(Е). Цикл в строках 4-8 выполняется не более /* раз, так как после каждого выполнения величина потока увеличивается по крайней мере на единицу. Осталось оценить время одного шага, которое зависит от того, как мы храним данные о потоке. Рассмотрим ориентированный граф G = (V,E), в котором

Е = {(и, v)\(u, v) £ Е или (v, и) £ Е},

и будем хранить потоки и пропускные способности рядом с соответствующими рёбрами (рёбра сети G входят и в граф G, так что пропускные способности есть где хранить). Остаточная сеть (для текущего потока) состоит из тех рёбер (и, v) графа G, для которых с(и, v) - f[u, v] ф 0. Поиск дополняющего пути в остаточной сети (в глубину или в ширину - пока это всё равно) займет время О(Е) = О(Е). Поэтому время работы процедуры будет 0(E\f*\).

Из доказанной оценки следует, что при небольшом значении /* и целых пропускных способностях время работы процедуры Ford-Fulkerson невелико. Но при большом /* время работы алгоритма может быть велико даже для простой сети, как показывает пример рис. 27.7. Значение максимального потока в этой сети равно 2,000,000 (если использовать рёбра, идущие слева направо). Если, как показано на рис. 27.7 (а) и 27.7 (Ь), на чётных шагах будет выбираться дополняющий путь s -> v -> и -> t, а на нечетных - s -у и -у v -у t, то потребуется 2, 000, 000 шагов, чтобы найти максимальный поток.

Можно получить лучшую оценку времени работы процедуры


Рис. 27.7 27.7 (а) Сеть, для которой процедура FORD-FULKERSON требует времени 0( Б/*), где /* - максимальный поток величины /* = 2000 000. Выделен дополняющий путь с пропускной способностью 1. (Ь) Полученная остаточная сеть. Выделен дополняющий путь с той же пропускной способностью, (с) Полученная остаточная сеть.

Ford-Fulkerson, если предположить, что в строке 4 используется поиск в ширину. В этом случае путь р будет кратчайшим из дополняющих путей (длину каждого ребра считаем равной единице). Эта реализация метода Форда-Фалкерсона называется алгоритмом Эдмондса-Карпа. Докажем, что время работы алгоритма Эдмондса-Карпа равно 0(VE2).

Обозначим длину кратчайшего пути в Gf между вершинами и и v через Sf (и, v)).

Лемма 27.8

Рассмотрим работу алгоритма Эдмондса-Карпа на сети G = (V, Е) с истоком s и стоком t. Для любой вершины v из V \ {s, t] расстояние Sf(s,v) в остаточной сети между истоком и вершиной v G V \ {s, t} монотонно неубывает на каждом шаге цикла.

Доказательство

Предположим противное: пусть после увеличения потока / (вдоль дополняющего пути) расстояние Sf(s,v) от истока s до некоторой вершины v из V \ {s, t} уменьшилось. Обозначив увеличенный поток через /, получаем, что

Sf(s,v) < Sf(s,v).

Среди вершин v с таким свойством выберем ближайшую (в смысле сети Gj) к истоку. В этом случае

из Sf(s,u) < Sf(s,v) следует Sf(s,u) Sf(s,u)(27.7)

для всех и G V \ {s, t}.

Возьмем кратчайший путь р из s в v в сети Gj и рассмотрим вершину и, непосредственно предшествующую вершине v в этом пути (s и -> v).

Согласно следствию 25.2, Sj(s,u) = Sj(s,v) - 1. Следовательно, по предположению (27.7)

Sf(s,u) Sf(s,u).

Может ли ребро (и, v) входить в Ef (это значит, что f[u, v] < с(и, v)). Тогда по лемме 25.3 должно быть

Sf(s,v) Sf(s,u) + 1 Sf(s,u) + 1 = = Sf(s,v),


что противоречит начальному предположению.

Следовательно, (и, v) Ef. Но ребро (и, v) принадлежит Ej, поэтому дополняющий путь р, превративший сеть Gf в сеть Gj, содержал ребро (v, и). Так как путь р был кратчайшим путём из s в t в сети Gf, то любой его подпуть также был кратчайшим (лемма 25.1), поэтому Sf(s, и) = 5f(s,v) + 1. Отсюда следует, что

8f(s,v) = Sf(s,u) - 1 <:5f(s,u)-l = = 5f(s,v) - 2 < < f(s,v),

что противоречит начальному предположению. Теорема 27.9

Алгоритм Эдмондса-Карпа на сети G = (V, Е) выполняется за 0(VE) шагов. Доказательство

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

Покажем, что для одно и то же ребро может быть критическим не более 0(V) раз. Поскольку все рёбра всех остаточных сетей соответствуют рёбрам графа (возможно, в обратном направлении), их число не превосходит 2Е, так что общее число шагов действительно есть O(EV).

Итак, посмотрим, сколько раз за время работы алгоритма Эдмондса-Карпа ребро (и, v) может быть критическим. Если ребро было критическим, оно исчезает, и может появиться вновь лишь после того, как поток из и в v уменьшится. Это может произойти только если ребро (v, и) войдёт в дополняющий путь. Таким образом, возникает последовательность ситуаций:

(и, v) входит в дополняющий путь (и критическое в нём);

(v, и) входит в дополняющий путь (не обязательно критическое);

(и, v) входит в дополняющий путь (и критическое в нём);

(v, и) входит в дополняющий путь (не обязательно критическое);

и так далее. Покажем, что число таких ситуаций есть 0(V). Для этого проследим, как меняются расстояния от истока до вершин и и v в остаточных сетях. Как мы знаем (лемма 27.8), эти две величины могут только возрастать. При этом то одна, то другая вырывается вперёд на 1 (поскольку они соседствуют в кратчайшем пути, лемма 25.1). Заметим, что при переходе от первой ситуации ко второй расстояние от истока до и увеличится по крайней мере на 2 (оно было меньше расстояния до v, а стало больше). При переходе от второй строки к третьей расстояние от истока до v увеличится по крайней мере на 2 и так далее.



[стр.Начало] [стр.1] [стр.2] [стр.3] [стр.4] [стр.5] [стр.6] [стр.7] [стр.8] [стр.9] [стр.10] [стр.11] [стр.12] [стр.13] [стр.14] [стр.15] [стр.16] [стр.17] [стр.18] [стр.19] [стр.20] [стр.21] [стр.22] [стр.23] [стр.24] [стр.25] [стр.26] [стр.27] [стр.28] [стр.29] [стр.30] [стр.31] [стр.32] [стр.33] [стр.34] [стр.35] [стр.36] [стр.37] [стр.38] [стр.39] [стр.40] [стр.41] [стр.42] [стр.43] [стр.44] [стр.45] [стр.46] [стр.47] [стр.48] [стр.49] [стр.50] [стр.51] [стр.52] [стр.53] [стр.54] [стр.55] [стр.56] [стр.57] [стр.58] [стр.59] [стр.60] [стр.61] [стр.62] [стр.63] [стр.64] [стр.65] [стр.66] [стр.67] [стр.68] [стр.69] [стр.70] [стр.71] [стр.72] [стр.73] [стр.74] [стр.75] [стр.76] [стр.77] [стр.78] [стр.79] [стр.80] [стр.81] [стр.82] [стр.83] [стр.84] [стр.85] [стр.86] [стр.87] [стр.88] [стр.89] [стр.90] [стр.91] [стр.92] [стр.93] [стр.94] [стр.95] [стр.96] [стр.97] [стр.98] [стр.99] [стр.100] [стр.101] [стр.102] [стр.103] [стр.104] [стр.105] [стр.106] [стр.107] [стр.108] [стр.109] [стр.110] [стр.111] [стр.112] [стр.113] [стр.114] [стр.115] [стр.116] [стр.117] [стр.118] [стр.119] [стр.120] [стр.121] [стр.122] [стр.123] [стр.124] [стр.125] [стр.126] [стр.127] [стр.128] [стр.129] [стр.130] [стр.131] [стр.132] [стр.133] [стр.134] [стр.135] [стр.136] [стр.137] [стр.138] [стр.139] [стр.140] [стр.141] [стр.142] [стр.143] [стр.144] [стр.145] [стр.146] [стр.147] [стр.148] [стр.149] [стр.150] [стр.151] [стр.152] [стр.153] [стр.154] [стр.155] [стр.156] [стр.157] [стр.158] [стр.159] [стр.160] [стр.161] [стр.162] [стр.163] [стр.164] [стр.165] [стр.166] [стр.167] [стр.168] [стр.169] [стр.170] [стр.171] [стр.172] [стр.173] [стр.174] [стр.175] [стр.176] [стр.177] [стр.178] [стр.179] [стр.180] [стр.181] [стр.182] [стр.183] [стр.184] [стр.185] [стр.186] [стр.187] [стр.188] [стр.189] [стр.190] [стр.191] [стр.192] [стр.193] [стр.194] [стр.195] [стр.196] [стр.197] [стр.198] [стр.199] [стр.200] [стр.201] [стр.202] [стр.203] [стр.204] [стр.205] [стр.206] [стр.207] [стр.208] [стр.209] [стр.210] [стр.211] [стр.212] [стр.213] [стр.214] [стр.215] [стр.216] [стр.217] [стр.218] [стр.219] [стр.220] [стр.221] [стр.222] [стр.223] [стр.224] [стр.225] [стр.226] [стр.227] [стр.228] [стр.229] [стр.230] [стр.231] [стр.232] [стр.233] [стр.234] [стр.235] [стр.236] [стр.237] [стр.238] [стр.239] [стр.240] [стр.241] [стр.242] [стр.243] [стр.244] [стр.245] [стр.246] [стр.247] [стр.248] [стр.249] [стр.250] [стр.251] [стр.252] [стр.253] [стр.254] [стр.255] [стр.256] [стр.257] [стр.258] [стр.259] [стр.260] [стр.261] [стр.262] [стр.263] [стр.264] [стр.265] [стр.266] [стр.267] [стр.268] [стр.269] [стр.270] [стр.271] [стр.272] [стр.273] [стр.274] [стр.275] [стр.276] [стр.277] [стр.278] [стр.279] [стр.280] [стр.281] [стр.282] [стр.283] [стр.284] [стр.285] [стр.286] [стр.287] [стр.288] [стр.289] [стр.290] [стр.291] [стр.292] [стр.293] [стр.294]