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


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




[175]

Рис. 26.2 26.2 Взвешенный ориентированный граф, используемый в упр. 26.11, 26.2-1 и 26.3-1.

\verb1 $п \leftarrow rows[W]$\\ \verb2 $D~{(1)} \leftarrow W$\\ \verb3 $m \leftarrow 1$\\ \verb4 I while $n-l > m$\\

\verb5I do $D~{(2m)> \leftarrow \mbox{\sc Extend-Shortest-Paths}(D~{

D4(m)})$\\

\verb6$m \leftarrow 2m$\\

\verb7 I return $D~{(m)}$

На каждом шаге цикла while в строках 4-6 вычисляется JJ)(2m) = и значение т удваивается, пока т не станет большим или равным п - 1.

Время работы такой процедуры составляет 0(ra3lgra), т.к. всего выполняется [lg(ra - 1)] «умножений» матриц, каждое из которых требует 0(га3) действий. Алгоритм довольно прост, и можно надеяться, что константа, скрытая в О-обозначени, будет небольшой.

[Заметим, что мы неявно использовали ассоциативность нашего «умножения» матриц, переходя к другому способу вычисления степеней. Её можно проверить по аналогии с доказательством ассоциативности для обычного умножения - либо заменить ссылку на ассоциативность прямым доказательством того, что JJ)(2m) есть произведение Jj(m) на Dm\ которое легко провести, рассматривая две половины пути длины 2т.]

Упражнения

26.1-1 Проследите за исполнением алгоритмов Slow-All-Pairs-Shortest-Paths и Faster-All-Pairs-Shortest-Paths на графе рис. 26.2. Вычислите все возникающие при этом матрицы.

26.1-2 Где используется, что шц = 0 при всех г?

26.1-3 Что соответствует матрице

/ о

оо

оо .

. оо

оо

0

оо .

. оо

оо

оо

0 .

. оо

\ оо

оо

оо .

. 0

если продолжить аналогию с обычным умножением матриц?

26.1-4 Представьте задачу поиска кратчайших путей из одной вершины как задачу отыскания произведений и вектора. Как в этих терминах выглядит алгоритм Беллмана-Форда (см. раздел 25.3)?

26.1-5 Придумайте алгоритм вычисления матрицы предшествования П по уже имеющейся матрице D весов кратчайших путей за


время О (га3).

26.1-6 С другой стороны, матрицы предшествования могут вычисляться параллельно с вычислением весов. Будем брать в качествепредшествующую j вершину на каком-нибудь кратчайшем пути из i в j, состоящем не более чем из то ребер. Измените процедуры Extend-Shortest-Paths и Slow-All-Pairs-Shortest-Paths так, чтобы они в дополнение к

вычисляли ещё и матрицы П1), П2), ... , П-1).

26.1-7 Процедура Faster-All-Pairs-Shortest-Paths (в её нынешнем виде) использует [~lg(ra - 1)] матриц (массивов) размером га X га. Общий объем памяти, таким образом, составляет ©(га2 lgra). Измените её так, чтобы использовать всего два массива размером га X га (тем самым уменьшив объём памяти до ©(га2)).

26.7-8 Измените алгоритм Faster-All-Pairs-Shortest-Paths так, чтобы он обнаруживал наличие в графе цикла с отрицательным весом.

26.1-9 Придумайте эффективный алгоритм определения минимального числа рёбер в цикле отрицательного веса (для данного графа; предполагается, что такой цикл существует).

26.1. Алгоритм Флойда-Уоршолла

В этом разделе мы рассмотрим другой способ решения задачи о кратчайших путях для всех пар вершин ориентированного взвешенного графа, также основанный на технике динамического программирования. Этот способ (алгоритм Флойда-Уоршолла) работает за время О (С3). Мы по-прежнему допускаем рёбра с отрицательным весом, но запрещаем циклы отрицательного веса.

Кроме того, мы рассмотрим алгоритм нахождения транзитивного замыкания графа, основанный на той же идее.

Строение кратчайшего пути

Алгоритмы предыдущего раздела выделяли последнее ребро пути. Алгоритм Флойда-Уоршалла действует иначе: для него важно, какие вершины используются в качестве промежуточных, и особую роль играют промежуточные вершины с максимальным номером (в некоторой нумерации вершин). Промежуточной (intermediate) вершиной простого пути р = (v\, v2, vi) будем называть любую ИЗ ВерШИН v2,v3, ... , v{-\.

Будем считать, что вершинами графа G являются числа 1,2,...,п. Рассмотрим произвольное к га. Для данной пары вершин i,j G V рассмотрим все пути из г в j, у которых все промежуточные вершины принадлежат множеству {1,2,...,к}. Пусть р - путь минимального веса среди всех таких путей. Он будет простым, так как в графе нет циклов с отрицательным


весом. Как найти вес этого пути, зная веса всех таких путей (для всех пар вершин) для меньших к? Для пути р есть две возможности.

Если к не входит в р, все промежуточные вершины пути р содержатся в множестве {1, 2,... , к - 1}. Тогда путь р является кратчайшим путём из i в j, промежуточные вершины которого принадлежат множеству {1, 2,... , к - 1}.

Если к является промежуточной вершиной пути р, она разбивает его на два участка р\ и р2 (вершина к встречается лишь однажды, так как р - простой путь), см. рис. 26.3. По лемме 25.1 путь р\ будет кратчайшим путём из г в к с промежуточными вершинами из множества {1,2,... , к - 1}. Путь р2 является кратчайшим путём из к в j с промежуточными вершинами из множества {1, 2,... , к - 1}.

Рекурентная формула для длин кратчайших путей

Эти рассуждения позволяют написать другую (по сравнению с приведённой в разделе 26.1) рекурентную формулу для длин крат-

(к)

чайших путей. Обозначим через cQ- вес кратчайшего пути из вершины г в вершину j с промежуточными вершинами из множества {1, 2,... , к}. При к = 0 промежуточных вершин нет вовсе, поэтому

df = Wij. В общем случае

Ак) \ ™чесли к = О,

d- = { min(4-1), dtl) + dg 1)) -ли * £ 1.

Матрица = (cQ™ ) содержит искомое решение. Другими словами, dff = 5(i,j) для всех i,j £ V, поскольку разрешены любые промежуточные вершины.

Вычисление кратчайших путей снизу вверх

Напишем процедуру, которая вычисляет веса кратчайших путей, последовательно находя значения d для к = 1, 2,... , п. Её входм является матрица W размером га X га (веса рёбер графа), результатом является матрица весов кратчайших путей.

{\sc Floyd-Warshall>$(W)$\\

\verb11 I$n \leftarrow rows[W]$\\

\verb2 $D~{(0)> \leftarrow W$\\

\verb3 I for $k \leftarrow 1$ to $n$\\

\verb4I do for $i \leftarrow 1$ to $n$\\

\verb5I do for $j \leftarrow 1$ to $n$\\

\verb6l$d~{(k)} {ij> \leftarrow \min(d~{(k-l)} {ij},

d-{(k-l)} {ik}+d-{(k-l)} {kj})$\\

\verb7 I return $D~{(n)}$

На рисунке 26.4 показан ориентированный раф и матрицы Dk\ вычисляемые этим алгоритмом.



[стр.Начало] [стр.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]