Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Метод Дейкстры





 

Метод применяется для поиска кратчайшего пути m[ s, t ] из источника s в сток t на графе G = (X, U) в том случае, когда длина любой дуги неотрицательна, т. е. l (xi, xj) > 0 для всех (xi, xj) Î U. Алгоритм Дейкстры легко модифицируется для решения задачи поиска всех кратчайших путей m[ s, xi ], xi Î X \ s.

Этот метод основан на приписывании вершинам графа временных пометок l(xi), xi Î X. Величина каждой временной пометки l(xi) опреде­ляет верхнюю границу длины пути m[ s, xi ]. С помощью итерацион­ной процедуры значения l(xi) постепенно уменьшаются, причем на каждой итерации одна из вершин графа получает постоянную пометку l*(xi). Постоянная пометка, в отличие от временной, дает не оценку, а истинное значение длины кратчайшего пути m[ s, xi ].

Формальная схема алгоритма Дейкстры может быть представлена в следующем виде.

Алгоритм 1.2 (метод Дейкстры)

Данные: орграф G = (X, U), имеющий n вершин, с выделенным источником s и стоком t (s, t Î X); веса дуг l (xi, xj) ³ 0 для всех (xi, xj) Î U.

Результаты: длина l*(t) кратчайшего пути m[ s, t ].

Шаг 1 (присвоение начальных значений)

Определить постоянную пометку l*(s) = 0 и временные пометки
l(xi) = ¥ для всех xi Î X \ s. Зафиксировать вершину p = s, получившую постоянную пометку.

Шаг 2 (изменение пометок вершин)

Для всех xi Î Г(p), имеющих временные пометки, вычислить новые значения l(xi) по формуле:

l(xi) = min [l(xi), l(p) + l (p, xi)].

Шаг 3 (определение постоянной пометки)

Среди всех вершин xi Î X, имеющих временные пометки, найти xk, для которой значение l(xk) минимально, т. е.

,

где T Ì X - подмножество вершин с временными пометками. Пометку вершины xk считать постоянной l*(xk) = l(xk) и присвоить p = xk.

Шаг 4 (проверка условия окончания)

Если p = t, то l*(p) есть длина кратчайшего пути m[ s, t ]. Конец алгоритма. Если p ¹ t, то переход к шагу 2.

 

Чтобы использовать метод Дейкстры для поиска всех кратчайших путей m[ s, xi ], xi Î X \ s, достаточно изменить условие окончания итерационного процесса. В этом случае последний шаг алгоритма формулируется следующим образом.

Шаг 4¢ (условие окончания алгоритма 1.2

для поиска путей m[ s, xi ], xi Î X \ s)

Если все вершины , получили постоянные пометки l*(xi), то конец алгоритма. Иначе выполнить переход к шагу 2.

 

Алгоритм Дейкстры гарантирует получение оптимального результата. Доказательство этого факта приводится в работах [5, 6].

Если производится поиск всех путей m[ s, xi ], xi Î X \ s, для полного связного орграфа с n вершинами, то при работе алгоритма на шаге 2 выполняются n (n - 1)/2 операций сложения и сравнения, на шаге 3 - еще
n (n - 1)/2 операций сравнения. Кроме того, для определения подмноже­ства вершин с временными пометками (шаги 2, 3) требуется также n (n - 1)/2 операций сравнения. Таким образом, в целом выполняется 3/2 n (n - 1) операций, что соответствует оценке трудоемкости O (n 2).

Для алгоритма поиска кратчайшего пути m[ s, t ] число операций 3/2 n (n - 1) является предельным и достигается только в случае, когда сток t получает постоянную пометку последним из всех вершин.

Пример 1.2. Работа алгоритма Дейкстры для поиска кратчайшего пути m[ x 1, x 5] в графе G = (X, U), приведенном на рис. 1.5, показана в табл. 1.3, где значения постоянных пометок и соответствующие вершины выделены символом "*".

 

Рис. 1.5. Представление графа для примера 1.2

 

Таблица 1.3

Результаты работы алгоритма Дейкстры (пример 1.2)

 

Итерация P Г(P) l(x 1) l(x 2) l(x 3) l(x 4) l(x 5) l(x 6)
      0* ¥ ¥ ¥ ¥ ¥
  x 1 { x 2} 0* 1 ¥ ¥ ¥ ¥
  x 2 { x 3, x 4, x 6} 0* 1*     ¥  
  x 3 { x 1, x 3, x 5} 0* 1*   3*    
  x 4 { x 4, x 6} 0* 1* 4* 3*    
  x 5 { x 5} 0* 1* 4* 3*   5*
  x 6 { x 4} 0* 1* 4* 3* 6* 5*

 

Для построения пути кратчайшей длины из x 1 в x 5 используется условие (1.2). Предпоследняя вершина x (k) этого пути входит в подмножество Г-1(x 5) = { x 4, x 6} и удовлетворяет соотношению

l*(x (k)) + l (x (k), x 5) = l*(x 5),

которое выполняется для x (k) = x 6. Далее определяется следующая вершина x (k -1) Î Г-1(x 6) и т.д. Окончательно кратчайший путь имеет вид:

m(x 1, x 5) = (x 1, x 2, x 4, x 3, x 6, x 5).

 

У П Р А Ж Н Е Н И Я

 

1.24. Сколько итераций требуется для определения всех постоянных пометок вершин в алгоритме Дейкстры?

1.25. Почему метод Дейкстры поиска кратчайшего пути на графе не допускает отрицательных значений весов дуг?

1.26. Модифицировать алгоритм 1.2 таким образом, чтобы поиск кратчайшего пути производился с использованием пометок вида [l(xi), mi ], которые описаны в разделе 1.2.

1.27. Разработать программу поиска кратчайшего пути на графе по алгоритму 1.2.

1.28. Разработать программу поиска кратчайшего пути на графе по алгоритму, полученному при выполнении упражнения 1.26.

1.29. Получить (машинное) решение для задачи поиска всех кратчайших путей m[ x 1, xj ], , от вершины x 1 ко всем остальным вершинам графа, показанного на рис. 1.6.

Замечание: значения постоянных пометок указаны около соответствующих вершин графа.

 

Рис. 1.6. Представление графа для упражнения 1.29

 

Date: 2015-10-21; view: 979; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.006 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию