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


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




[173]

Кратчайшие пути для всех пар вершин

В этой главе мы займёмся задачей о нахождении кратчайших путей для всех пар вершин графа. Таблица расстояний между всевозможными парами городов в атласе дорог получается в результате решения именно такой задачи. Как и в главе 25, будем рассматривать ориентированный взвешенный граф G = (V, Е) с вещественной весовой функцией w: Е -> KL Для каждой пары вершин и, v G V мы должны найти кратчайший путь и в v, точнее, путь наименьшей длины (длина пути определяется как сумма весов всех его рёбер). Таким образом, ответом в задаче о кратчайших путях можно считать таблицу, в которой на пересечении строки и и столбца v которой находится вес кратчайшего пути из и в v (дополненную некоторой информацией о самих этих путях, см. ниже).

Разумеется, можно решить эту задачу, если \V\ раз применить алгоритм для поиска кратчайших путей из одной вершины (ко всем вершинам графа по очереди). Если все ребра графа имеют неотрицательные веса, то разумно использовать алгоритм Дейкстры; при простой реализации очереди с приоритетами с помощью массива общее время работы алгоритма составит 0(V3 + VE) = 0(V3).

Если очередь реализовать с помощью двоичной кучи, то общая стоимость составит 0(VElgV), что даёт выигрыш для разреженных графов. Обе эти оценки можно улучшить, использовав фибоначчиевы кучи, для которых общее время работы алгоритма есть алгоритма будет О (V2 lg V + VE).

Если в графе есть рёбра с отрицательными весами, то алгоритм Дейкстры применить нельзя. Если вместо него использовать более медленный алгоритм Беллмана-Форда, выполняя его для каждой вершины графа, общее время работы составит 0(V2E) - для плотных графах это будет 0(V4). Алгоритмы, описанные ниже, работают быстрее. Кроме того, в этой главе мы установим связь между задачей о нахождении кратчайших путей для всех пар вершин графа и умножением матриц, а также исследуем ее алгебраическую структуру.

В большинстве алгоритмов этой главы графы представляются матрицами смежности. Исключением является алгоритм Джонсо-


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

Таким образом, при обработке взвешенного ориентированного графа G = (V, Е) алгоритму даётся матрица W = (?%•), где

{Оесли г = j,

вес (ориентированного) ребраесли гф j и£ Е,

ооесли гф j и$ Е.

(26.1)

Ребра могут иметь отрицательный вес. Мы будем, однако, предполагать, что циклов отрицательного веса в графе нет.

Представленные в данной главе алгоритмы нахождения кратчайших путей для всех пар вершин будут вычислять матрицу D = (dij) размером га X га, элемент dij которой содержит вес кратчайшего пути из вершины г в вершину j, то есть равен S(i,j) в обозначениях предыдущей главы.

Решение задачи о кратчайших путях для всех пар вершин должно включать в себя не только веса кратчайших путей, но и матрицу предшествования (predecessor matrix) П = (7r8j), в которой 7r8j является вершиной, предшествующей j на одном из кратчайших путей из г в j. (мы полагаем 7r8j = nil, если г = j или путей из г в j не существует). Для каждой вершины г £ V можно определить подграф предшествования (predecessor subgraph) GVti = (VVti, EVti), где

K,i = {j eV : mj ф nil} U {г},

и

En,i = j £ K,i и 7Tij ф nil}.

Мы будем требовать, чтобы для каждого г подграф предшествования GVti был деревом кратчайших путей из вершины г (в смысле главы 25). В этом случае следующая процедура печатает кратчайший путь из вершины г в вершину j.

{\sc Print-All-Pairs-Shortest-Path>$(\Pi,i,j)$\\

1if $i=j$

2then print $i$

3else if $\pi {ij}=\mbox{\sc nil}$

4then print "Пути из" $i$ "в" $j$ нет

5else {\sc Print-All-Pairs-Shortest-Path>$(\Pi,i,\pi {ij»$

6print $j$

Мы не будем подробно говорить о построении матрицы предшествования (её свойствам посвящено несколько упражнений). План главы


В разделе 26.1 рассматривается алгоритм решения задачи о кратчайших расстояниях для всех пар вершин, в основе которого лежит умножение матриц. Время работы этого алгоритма - 0(V3lgV); он вычисляет степень матрицы, многократно возводя её в квадрат.

Более быстрый (0(V3)) алгоритм Флойда-Уоршолла, также использующий технику динамического программирования, излагается в разделе 26.2. В этом же разделе рассматривается задача о транзитивном замыкании ориентированного графа, которая оказывается тесно связанной с задачей нахождения кратчайших путей для всех пар вершин.

В разделе 26.3 излагается алгоритм Джонсона. В отличие от других алгоритмов этой главы, он использует в своей работе списки смежных вершин, а не матрицу смежности. Время работы этого алгоритма есть 0(V2lgV + VE); таким образом, он эффективен для разреженных графов.

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

Всюду в этой главе мы рассматриваем граф G = (V, Е) с га , вершинами, так что \V\ = га. Мы будем обозначать матрицы большими буквами (например, W или D) а отдельные элементы матриц соответствующими маленькими буквами (wij,dij). Кроме того, мы будем использовать верхний индекс в скобках (напродобие jj(m) (d)), роль которого будет аналогична степени матрицы (см. ниже). Наконец, размер га квадратной га X га-матрицы А мы будем иногда записывать как rou?s[A] (rows - строки).

26.1 Кратчайшие пути и умножение матриц

В этом разделе мы рассмотрим алгоритм динамического программирования решения задачи нахождения кратчайших путей для всех пар вершин ориентированного графа G = (V,E). На каждом шаге он будет почти что умножать матрицы - только не вполне обычным образом. Сначала мы построим алгоритм со сложностью (временем работы) 0(С4), а затем улучшим его, получив оценку в (С3 lg V). Наше изложение будет следовать схеме алгоритма динамического программирования (глава 16)

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

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

Рекурсивная формула для длины кратчайшего пути

Пусть d обозначает минимальный вес пути из вершины i в



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