Задача о кратчайшем пути.




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

       
 
 
 
 
   

 


Рис. 24. Пример дорожного графа.

 

Обозначим l - расстояние от i– той до смежной с ней j – той вершины. Задача о нахождении кратчайшего расстояния может быть решена прямым перебором всевозможных расстояний. Кроме кратчайшего расстояния нам необходимо еще и знание промежуточных вершин, через которые пролегает маршрут. Если n – велико, то эта задача становится трудно разрешимой. Возникает необходимость в разработке более компактного алгоритма.

Алгоритм Форда.

 

Сущность этого алгоритма заключается в том, что каждой i – той вершине ставится в соответствие некоторое число , значение которого зависит от значения предыдущей вершины и расстояния между ними. Сначала объявляется - 0, а все остальные = ∞:

 

 

Обозначим через l расстояние между i – той и j – той вершинами.

Пусть назначена i – той вершине (i=0,1,…, n). Рассмотрим все j – ые вершины, смежные с i – той. Если - > l (1),

то полагаем = + l (2)

И так до тех пор, пока не дойдем до . Значение и будет значением кратчайшего пути.

 

Обратный ход:

Мы получили = +l (1*)

Среди расстояний, соединяющих х со смежными вершинами, ищем l = - .

Затем ищем вершину х , у которой = +l . Затем переходим в х и так далее пока не доберемся до х .

Замечание 1:

При каждом поиске предыдущей вершины обратного хода необходимо проверять все смежные вершины, так как предыдущая вершина может быть не единственной.

Замечание 2:

Изменение значения происходит только тогда, когда выполняется неравенство (1), то есть > +l . Заменяя значение по формуле (2), мы тем самым уменьшаем его. Так как граф связный, то висячих вершин нет, и, следовательно, каждая вершина получит значение .

Обоснование алгоритма:

Так как значение при каждом шаге может только уменьшаться, то последовательность значений для каждой вершины в конечном итоге принимает минимальное значение. В конечном итоге каждая - это кратчайшее расстояние данной вершины от х .

 

Пример:

 

 

Рис. 25. Пример взвешенного графа.

 

1) i=0, j=1,2,3;

j=1: - =∞-0, ∞>l ; = +l =5; заносим в таблицу.

j=2: - =∞-0, ∞>l ; = +l =6; заносим в таблицу.

j=3: - =∞-0, ∞>l ; = +l =4; заносим в таблицу.

2) i=1, j=0,2,4 (0 –уже не рассматриваем)

j=2: - =1 , < +l ; значит не меняем

j=4: > +l , = 5+8 = 13; заносим в таблицу.

3) i=2, j=0, 1, 3, 4.

j=0; не рассматриваем

j=1: < +l ; значит не меняем

j=3: < +l ; значит не меняем

j=4: > +l , =6+2=8; заносим в таблицу.

4) i=3, j=0,2,5,6;

j=0; не рассматриваем

j=2: < +l ; значит не меняем

j=5: =4+6=10; заносим в таблицу.

j=6: = +l , =4+110=14; заносим в таблицу.

5) i=4, j=1,2,5,7;

j=1: < +l ; значит не меняем

j=2: < +l ; значит не меняем

j=5: < +l ; значит не меняем

j=7: = +l , =10; заносим в таблицу.

6) i=5, j=3,4,6,7;

j=3: < +l ; значит не меняем

j=4: < +l ; значит не меняем

j=6: = +l , =14; заносим в таблицу.

j=7: < +l ; значит не меняем

7) i=6, j=3,5,7;

j=3: < +l ; значит не меняем

j=5: < +l ; значит не меняем

j=7: < +l ; значит не меняем

8) i=7, j=4,5,6;

j=4; не рассматриваем

j=5; не рассматриваем

j=6: < +l ; значит не меняем

 

Получили схему:

 

 
               
               
Итого              

 

Обратный ход:

Начиная с последней вершины, проверяем все ей смежные на выполнение условия: l = - .

Получим кратчайший путь хПоучаем: х х х х .



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2022-09-06 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: