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


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




[177]

Г(0)

Г(з)

/1

0

0

о \

/1

0

0

о \

0

1

1

1

TW =

0

1

1

1

0

1

1

0

0

1

1

0

V1

0

1

1)

V1

0

1

1)

/1

0

0

о \

/1

0

0

о \

0

1

1

1

Г(4) =

1

1

1

1

0

1

1

1

1

1

1

1

\1

1

1

ч

\1

1

1

ч

Г(2)

/1

0

0

0

1

1

0

1

1

\1

0

1

Рис. 26.4 26.5 Ориентированный граф и матрицы , вычисленные алгоритмом построения транзитивного замыкания.

арифметические операции с целыми числами, поэтому процедура Transitive-Clusure эффективнее алгоритма Флойда-Уоршолла. Кроме того, использование булевских переменных вместо целых сокращает объём используемой памяти.

В разделе 26.4 мы увидим, что аналогия между алгоритмами Флойда-Уоршолла и построением транзитивного замыкания не случайна: оба алгоритма основаны на алгебраической структуре, называемой «замкнутое полукольцо».

Упражнения

26.2-1 Исполните алгоритм Флойда-Уоршолла для взвешенного ориентированного графа рис. 26.2, найдя все матрицы DkK

26.2-2 В приведённом нами виде алгоритм Флойда-Уоршолла требует в (га3) памяти для хранения матриц L>(fc) = (d\f). Конечно, можно сэкономить место, если хранить только две соседние матрицы. Оказывается, можно пойти ещё дальше: доказите, что если в процедуре Floyd-Warshall убрать верхние индексы, то она по-прежнему будет вычислять веса кратчайших путей.

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

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

\verb2 $D \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 {ij} \leftarrow \min(d {ij},

d {ik>+d {kj»$\\

\verb7 I return $D$

Тем самым мы сократили объём требуемой памяти до ©(га2).

26.2-3 Добавьте в процедуру Floyd-Warshall вычисление матриц предшествования по формулам (26.6) и (26.7). Докажите, что для любой вершины г £ V подграф предшествования GVti является деревом кратчайших путей из вершины г.

26.2-4 Будет ли правильно вычислена матрица предшествования


П, если изменить формулу (26.7) так:

kj

если

если

26.2-5 Как можно использовать результат работы алгоритм Флойда-Уоршолла, чтобы узнать, есть ли в графе цикл отрицательного веса?

26.2-6 Еще один способ построения кратчайших путей в алгоритме Флойда-Уоршолла таков. Пусть ipf (г, j, /г = 1,2,... , га) есть промежуточная вершина с максимальным номером на кратчайшем пути из г в j с промежуточными вершинами из множества {1, 2,... , к}. Напишите рекурентное соотношение для ipf и допо-

(к)

ните процедуру Floyd-Warshall вычислением значении tp-.

Наконец, измените функцию Print-All-Pairs-ShortestPaths так, чтобы входом для неё служила матрица Ф = (<р). Объясните аналогию между матрицей Ф и таблицей s в задачи об оптимальной расстановке скобок в произведении матриц (раздел 16.1).

26.2-7 Придумайте алгоритм вычисления транзитивного замыкания ориентированного графа G = (V, Е) с временем работы

26.2-8 Предположим, что транзитивное замыкание ориентированного ациклического графа может быть построено за время f(V,E), где f(V,E) = Q(V + Е) и / - монотонно возрастающая функция. Покажите, что тогда транзитивное замыкание произвольного ориентированного графа может быть построено за время

Алгоритм Джонсона для разреженных графов

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

Алгоритм Джонсона либо возвращает матрицу весов кратчайших путей, либо сообщает, что в графе имеется цикл отрицательного веса. Этот алгоритм содержит вызовы описанных в главе 25 алгоритмов Дейкстры и Беллмана-Форда.

Алгоритм Джонсона основан на идее изменения весов (reweight-ing). Если веса всех рёбер графа неотрицательны, то можно найти кратчайшие пути между всеми парами вершин, применив алгоритм Дейкстры к каждой вершине. Используя фибоначчиевы кучи, мы можем сделать это за время 0(V2 lg V-\-VE). Если же в графе имеются ребра с отрицательным весом, то можно попытаться свести задачу к случаю неотрицательных весов, изменив весовую функцию. При этом должны выполняться такие свойства:

1. Кратчайшие пути не изменились: для любой пары вершин и, v £

0(VE).

0(f(V,E)).


V, кратчайший путь из и в v с точки зрения весовой функцией w является также кратчайшим путём с точки зрения w и наоборот.

2. Все новые веса w(u,v) неотрицательны.

Как мы увидим, новая весовая функция w с такими свойствами может быть построена за время 0(VE). Кратчайшие пути сохраняются

Следующая лемма указывает простой общий способ изменить весовую функцию, не меняя кратчайших путей. В её формулировке длины кратчайших путей с весовыми функциями w и w обозначаются через 8 и 8 соответственно.

Лемма 26.1 (Изменение весов не меняет кратчайших путей) Пусть G = (V, Е) - взвешенный ориентированный граф с весовой функцией w : Е -> Ж. Пусть h : V -> М. - произвольная функция с вещественными значениями, определённая на вершинах графа. Рассмотрим новую весовую функцию

Тогда (а) произвольный путь р = (vo,vi,... ,vk) является кратчайшим относительно w тогда и только тогда, когда он будетт кратчайшим относительно w; (Ь) граф G содержит цикл с отрицательным w-весом тогда и только тогда, когда он содержит цикл с отрицательным w-весом.

Доказательство. Оба утверждения леммы следуют из равенства

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

Равенство (26.10) проверить легко. Для каждого ребра пути имеем

Если мы теперь сложим эти равенства для всех рёбер, то промежуточные члены сократятся, и получится равенство (26.10). Как получить неотрицательные веса?

Теперь надо подобрать функцию h так, что бы изменённые веса w(u, v) были неотрицательны. Это можно сделать следующим образом. По данному ориентированному взвешенному графу G = (V, Е) с весовой функцией w построим новый граф G = (V, Е) с одной дополнительной вершиной s (другими словами, V = V U {s}), из которой идут рёбра нулевого веса во все вершины графа V

(26.9)

(26.10)

w(vi, vl+1) = w(vi, vl+1) + h(vi) - h(vi+1).



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