Главная  Полное построение алгоритма 

[0] [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]

Lex.


АшЬ.

Poa.

Рис. 6.2.3. Дерево кратчайших путей с корнем в LEX.

всех V0.

вершин и в G; set

стояние от LEX до BED, нам пришлось вычислить кратчайшие пути от LEX до всех остальных вершин. Итак, в наихудшем случае задача отыскания кратчайшего расстояния от начальной вершины до конечной имеет ту же сложность, что и задача отыскания кратчайших путей из начальной вершины во все остальные вершины.

Теперь мы готовы к тому, чтобы сформулировать алгоритм Дейкстры для отыскания кратчайшего пути.

Algorithm DIJKSTRA для определения кратчайшего расстояния D1ST(W?) от заданной начальной вершины V0 до конечной вершины W в связной сети G с положительными весами, имеющей М вершин и ребер и представленной матрицей смежности А. Шаг 0. [Помечаем все вершины] Помечаем V0 как «определенная»; and помечаем все остальные вершины как «неопределенная». Шаг 1. [Инициализация переменных] Set D1ST (U) ч- А (V0, V) для DIST (V0) 0; and set NEXT -е Шаг 2. [Цикл] While ШXTфW do through, шаг 4 od; and STOP. Шаг 3. [Обновление кратчайшего расстояния до «неопределенной» вершины] Для каждой «неопределенной» вершины и set DIST (t/) ч-меньшее из Т)Ш {U) и DIST(NEXT)+Л(NEXT, U). Шаг 4. [Выбор кратчайшего расстояния до «неопределенной» вершины] Пусть U - неопределенная вершина, для которой расстояние DIST(t/) - наименьшее среди всех «неопределенных» вершин; помечаем U «определенная»; and set NEXT U.

Доказательство правильности алгоритма DIJKSTRA можно провести по индукции. .

Теорема 6.2.1. Алгоритм DIJKSTRA находит кратчайшее расстояние от V0 до W.

Доказательство. Мы докажем по индукции, что после п повторений шагов 3 и 4 для каждой вершины V, помеченной алгоритмом как «определенная», DIST (У) равно длине кратчайшего пути отУОдоУ. Мы также покажем, что для каждой «неопределенной» вершины U DIST (t/) есть длина кратчайшего пути от V0 до U, в котором все вершины определенные, кроме U.

Для п=0 после выполнения шагов О и 1 существует только одна определенная вершина, т. е. V0, а DISTVO)=0, очевидно, есть длина



кратчайшего пути от V0 до нее же. Кроме того, для любой «неопределенной» вершины и расстояние DIST(t/), очевидно, определяется ребром между V0 и и, т. е. путем с двумя вершинами, только одна из которых и «неопределенная».

Предположим, что теорема верна для п повторений, и предположим, что происходит (п+1)-е выполнение шага 3. Требуется показать, что для всех «неопределенных» вершин U величина DIST{t/) есть длина кратчайшего пути от V0 до U, в котором «определена» каждая вершина, кроме и.

Предположим, что это не так, т. е. что существует «неопределенная» вершина U и путь Р от V0 до U, в котором U - единственная «неопределенная» вершина, а длина Р, скажем т, удовлетворяет неравенству m<DIST(f/). Пусть У - «определенная» вершина в пути Р, соседняя с и. Если УфКЕХТ, то по предположению индукции значение DIST(6) было «определено» после п-го повторения и m=DIST(6). Это противоречит нашему предположению, что т<В15Т(У). С другой

SUBROUTINE DIJKST (A.M.V0,W,FROH,TO,LENGTH,EDGES)

С ЭТА ПОЛПРОГРАМНА ОПРЕДЕЛЯЕТ КРАТЧАЙШЕЕ РАССТОЯНИЕ ОТ

С НАЧАЛЬНОЙ ВЕРШИНЫ \р сО КОНЕЧНОЙ ВЕРШИНЫ W В СВЯЗНОЙ

С- СЕТИ G С НЕОТРИЦАТЕЛЬНЫМИ БЕСАМИ С ПОМОЩЬЮ АЛГОРИТМА,

С ПРИНАДЛЕКАЩЕГО ЛИЙКСТРЕ (NUHERISCHE: KATHEMATIC.V 1.

С 269-271). ДАННАЯ РЕАЛИЗАЦИЯ ЯВЛЯЕТСЯ ВАРИАНТОМ ПРОГ-

С РАНМЫ,ПРИНАДЛЕЖАЩИМ КИВИНУ И УИТНИ (СОНМ.АСМ (АПРЕЛЬ

С 1972).АЛГОРИТМ 422}, РЕЗУЛЬТАТОМ РАБОТЫ ЭТОЙ ПОДПРОГ-

С рАММЫ ЯВЛЯЕТСЯ ДЕРЕВО КРАТЧАЙШИХ ПУТЕЙ С КОРНЕМ V0. С

с ==я ФОРМАЛЬНЫЕ ПАРАМЕТРЫ С

с A(J,JJ ДЛИНА РЕБРА , СОЕДИНЯЮЩЕГО ВЕРШИНЫ J И J ,

С ЕСЛИ РЕБРО ОТСУТСТВУЕТ , ТО.

С Я(1 ,J) = .1 ООО ООО ,

С ПРОИЗВОЛЬНОМУ БОЛЬШОМУ ЧИСЛУ.

с VC НАЧАЛЬНАЯ ВЕРШИНА

С W КОНЕЧНАЯ ВЕРШИНА

с и ВЕРШИНЫ В G рРОНУНЕРОВАНЫ 1......Н,

С ГДЕ- 2.UE.H.UE.100

с FnOM(l) СОЛЕРШТ 1-Е РЕБРО В ДЕРЕВЕ КРАТЧАЙШИХ

С Т0(1 ГУТЕ0 от ВЕРШИНЫ =FROM( 11= К ВЕРШИНЕ

С LENGTHdl =то( 1)= ДЛИНЫ e.LENGTH{l)=.

с EDGES число РЕБЕР В ДЕРЕВЕ КРАТЧАЙШИХ ПУТЕЙ.

С НА ДАННЫЙ МОМЕНТ

Рис. 6.2.4. Реализация алгоритма DIJKSTRA.



i ВНУТРЕННИЕ ПЕРЕМЕННЫЕ

CIST(I)

NEXT

КРАТЧАЙШЕЕ РАССТОЯНИЕ ОТ UNDETIDB ЧАСТИЧНОГО ДЕРЕВА КРАТЧАЙШИХ ПУТЕЙ

ОЧЕРЕДНАЯ ВЕРШИНА КРАТЧАЙШИХ ПУТЕЙ

ДОБАВ;!ЯЕНАЯ К ДЕРЕВУ

ЧИСЛО НЕОПРЕДЕЛЕННЙХ ВЕРШИН

UNDETtI) СПИСОК НЕОПРЕДЕЛЕННЫХ ВЕРШИН

VERTEXtl) ВЕРШИНЫ ЧАСТИЧНОГО ДЕРЕВА КРАТЧАЙШИХ - ПУТЕЙ, ЛЕИАШИЕ НА КРАТЧАЙШЕМ ПУТ11 ОТ UNDETtI) ДО V0.

INTEGER AdOO.lOO),H,W,W,FnOH{100j,TO{100),LENGTH(10D) INTEGER EDGES,DIST(1tlO),NEXT,NUHUN,U№ET{100J JNTECER VERTEXllOO)

ИНИЦИАЛИЗАЦИЯ ПЕРЕМЕННЫХ

EDGES e 0

NEXT e W>

NUMUN " H-1

£0 1D0 1 a 1,H

UNDETd) в 1

BlST(l) «A(VO,l)

VERTEX(l) в VO

•JOD CONTINUE

; UNDET(№) e H

IllST(VO) =I)IST(H)

CO TO 350

СЕНОВЯЕНИЕ КРАТЧАМЕГО РАССТОЯНИЯ ДО ВСЕХ НЕОПРЕДЕ-ДЕННЬ1Х ВЕРШИН

гсоБО зос I -i.NUHUH 1 м-г

J»UNDET(I) N (М-2){М-1)/2

JK в L + A(NEXT,J) N {H-2)(H-11/2

«F(DIST{I) .LE. JK) GO TO 300 N.A (H-2)(H-11/2.E

VERTEX(l) « NEXT Б F

EIST(I) » OK В F

ЗЙЙCONTINUE ,,, V , (к-глм-и/з

Рис. 6.2.4. Продолжение



[0] [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]

0.0014