Хелпикс

Главная

Контакты

Случайная статья





Первый этап.. Второй этап.. Первый этап.



Первый этап.

 

 0-шаг (задание начального приближения)

 W0(s):=0.

 Для всех i Î E\{s} W0(i):=M  (где M - достаточно большое число, например, большее, чем длина самого длинного пути).

 j-ый шаг. ( j=1, 2, 3, ...)

W j(s)=:0                                                                                              (7.6)

W j(i) := min { c(v) + W j-1(h2(v)) | v Î V -(i) } iÎE\{s} .

Если после двух следующих друг за другом итерациях j и (j+1)

W j(i)=W j+1(i) для всех i Î E ,

то полагаем

 W(i)=W j+1(i) для всех iÎE.

Если W(t) ³ M, то задача не имеет решения (нет путей между вершинами t и s), в противном случае переходим к выполнению второго этапа.

 

 

Второй этап.

 0-шаг i:=t.

 j-ый шаг (j=1, 2, 3, ...),

 v (j):=arg min { c(v) + W(h2(v)) | vÎV -( i (j-1) ) }                            (7.7)

 i(j):=h2( v(j) )

Если i(j)=s, то алгоритм заканчивает работу, в противном случае переходим к (j+1) шагу.

 

Этот алгоритм можно модифицировать следующим образом. На первом этапе на каждом j-м шаге при вычислении W(i j) по соотношению (7.6) полагаем

v(i)=arg min { c(v) + W(h2(v)) | vÎV -(i) },

тогда на втором этапе соотношение (7.7) можно заменить следующим соотношением

 v(j):=v(i(j-1).

 

7.4. Алгоритм Флойда для отыскания кратчайших расстояний на графе

 

Пусть W(i) – верхние оценки кратчайших расстояний от вершины i до вершины s. Если для любой дуги vÎV выполняется

W(h1(v))£ c(v) + W(h2(v)),

то оценки W(i) дают кратчайшие расстояния от вершины i до вершины s. Заметим, что если некоторая дуга vÎV содержится в кратчайшем пути из некоторой вершины i (например из вершины h1(v) ) в вершину s, то для нее

W(h1(v)) = c(v) + W(h2(v)).

Если существует дуга vÎV, для которой

W(h1(v)) > c(v) + W(h2(v)),

то оценки W(i) не дают кратчайшие расстояния от вершин i до вершины s, так как оценку W(h1(v)) можно улучшить, положив

 W(h1(v)) = c(v) + W(h2(v)).

На этом свойстве основан алгоритм Флойда.

 

 

Первый этап.

 0-шаг (задание начального приближения).

 W(s):=0;

 Для всех iÎE\{s} W(i):=M;

 j-й шаг. ( j=1, 2, 3, ...)

 

Среди всех дуг vÎV ищем дугу, для которой

W(h2(v))<M, W(h1(v)) > c(v) + W(h2(v)).

Если такой дуги не существует, то переходим к выполнению второго этапа, в противном случае

W(h1(v)):= c(v)+W(h2(v))

и переходим к выполнению следующего шага.

 

 



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.