Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Нахождение кратчайшего пути в графе. Алгоритм Дейкстры



Граф – это множество точек или вершин и множество линий или ребер, соединяющих между собой все или часть этих точек.

Пусть дан граф, каждой дуге которого приписан вес. Задача о нахождении кратчайшего пути состоит в нахождении кратчайшего пути от заданной начальной вершины до заданной конечной вершины, при условии, что такой путь существует.

Алгоритм Дейкстрыалгоритм поиска кратчайшего пути во взвешенном графе между двумя заданными вершинами s и t при неотрицательных весах всех дуг.

Пусть s - начальная вершина пути, t - конечная.

На каждой итерации алгоритма каждая вершина xi графа имеет метку l (xi), которая может быть постоянной или временной. В первом случае l (xi) является длиной кратчайшего (s, xi)-пути; во втором случае l (xi) - длина кратчайшего (s, xi)-пути, проходящего через вершину xi и вершины с постоянными метками. Таким образом временная метка l (xi), является оценкой сверху для длины кратчайшего (s, xi)-пути, и, став на некоторой итерации постоянной, она остается такой до конца работы алгоритма.

Кроме l (xi), с вершинами графа связывается еще одна метка Q(xi).На каждой итерации Q(xi) является номером вершины, предшествующей хi в кратчайшем (s, xi)-пути.

После того, как последняя вершина t получила постоянную метку, с помощью меток Q(x) легко указать последовательность вершин, составляющих кратчайший (S,t)-путь:

(s..., Qn(t)..., Q(Q(t)), Q(t),t),

Qn(t)= Q(Q(...Q(t)) (n раз).

Перед началом работы алгоритма начальная вершина s имеет постоянную метку l (s)=0, а метки всех остальных вершин равны бесконечности (∞) и являются временными. Обозначим через p последнюю из вершин, получивших постоянную метку.

Алгоритм Дейкстры включает следующие шаги:

1. Положить l (s)=0 и считать эту метку постоянной. Положить l (xi)= ∞ для всех xi ¹ s, и считать эти метки временными. p = s.

2. Обновление пометок. Для всех вершин xi Î Г(p), пометки которых временные, изменить пометки в соответствии с правилом:

l (xi)=min { l (xi), l (p) +w(p, xi) }.

Если l (xi)> l (p) +w(p, xi), то Q(xi) = p.

3. Если l (xi)= ∞ для всех вершин xi, пометки которых временные, то в исходном графе отсутствуют пути из вершины s в вершины с временными метками. Останов алгоритма. В противном случае переход к шагу 4.

4. Превращение пометок в постоянные. Среди всех вершин с временными метками найти такую вершину xi*, для которой l (xi*) = min l (xi) (метка минимальная) и считать эту пометку постоянной. Положить p=xi*. Пометку Q(xi*) также считать постоянной.

5. Если p ¹ t, перейти к шагу 2, а если p = t, то l (p) - длина кратчайшего пути из s в t.

После определения длины кратчайшего пути сам кратчайший путь восстанавливается по постоянным меткам Q(xi).





Дата публикования: 2015-01-24; Прочитано: 751 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.008 с)...