Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Граф – это множество точек или вершин и множество линий или ребер, соединяющих между собой все или часть этих точек.
Пусть дан граф, каждой дуге которого приписан вес. Задача о нахождении кратчайшего пути состоит в нахождении кратчайшего пути от заданной начальной вершины до заданной конечной вершины, при условии, что такой путь существует.
Алгоритм Дейкстры — алгоритм поиска кратчайшего пути во взвешенном графе между двумя заданными вершинами 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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!