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


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




[163]

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

Наиболее быстрым из известных в настоящий момент алгоритмов поиска минимального остова (для случая \Е\ = Q(VlgV)) является алгоритм Прима, реализованный с помощью фибоначчиевой кучи. Для более разреженных графов Фредман и Тарьян [75] приводят алгоритм, время работы которого составляет 0(Е(3(\Е\, \V\)), где (3(\E\,\V\) = mm{i : lgW\V\ \E\/\V\}. Поскольку \E\ \V\, время работы этого алгоритма есть 0(E\g* V).


Кратчайшие пути из одной вершины

Перед нами - карта автомобильных дорог США с обозначенными расстояниями; как выбрать кратчайший маршрут от Чикаго до Бостона?

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

В этой и следующей главах мы рассказываем о том, как можно эффективно решать такие задачи. В задаче о кратчайшем пути (shortest-paths problem) нам дан ориентированный взвешенный граф G = (V, Е) с вещественной весовой функцией w: Е -> Ж. Весом (weight) пути р = (г>о, v\,..., vk) называется сумма весов рёбер, входящих в этот путь:

Вес кратчайшего пути (shortest-path weight) из и в v равен, по определению,

Кратчайший путь (shortest path) из и в v - это любой путь р из и в v, для которого w(p) = 5(и, v).

В нашем примере с Чикаго и Бостоном можно рассматривать карту дорог как граф, вершинами которого являются перекрёстки, а рёбрами - участки дорог между ними. Вес ребра - это длина участка дороги, и наша задача может состоять в отыскании кратчайшего пути между данным перекрёстком в Чикаго и данным перекрёстком в Бостоне.

Веса не обязаны быть расстояниями: весами могут быть времена, стоимости, штрафы, убытки, ... - короче говоря, любая

к

г=1

min{w(p) : и и}, если существует путь из и в и;

иначе.


величина, которую мы хотим минимизировать и которая обладает свойством аддитивности.

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

Варианты задачи о кратчайшем пути

В этой главе мы рассматриваем только задачу о кратчайших путях из одной вершины (single-source shortest-path problem): дан взвешенный граф G = (V, Е) и начальная вершина v (source vertex); требуется найти кратчайшие пути из s во все вершины v £ V. Алгоритм, решающий эту задачу, пригоден и для многих других задач, например:

Кратчайшие пути в одну вершину: дана конечная вершина t (destination vertex), требуется найти кратчайшие пути в t из всех вершин v £ V. (В самом деле, если обратить все стрелки на рёбрах, эта задача сведется к задаче о кратчайших путях из одной вершины.)

Кратчайший путь между данной парой вершин: даны вершины и и v, найти кратчайший путь из и в v. Разумеется, если мы найдем все кратчайшие пути из и, то тем самым решим и эту задачу; как ни странно, более быстрого способа (который бы использовал тот факт, что нас интересует путь лишь в одну вершину) не найдено.

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

Рёбра отрицательного веса

В некоторых приложениях веса рёбер могут быть отрицательными. При этом важно, есть ли циклы отрицательного веса. Если из вершины из s можно добраться до цикла отрицательного веса, то потом можно обходить этот цикл сколь угодно долго, и вес будет всё уменьшаться, так что для вершин этого цикла кратчайших путей не существует (рис. 25.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]