Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Задача построения кратчайшего пути из заданной вершины
Пусть – конечный связный орграф. Пусть в графе G каждой дуге (i, j) поставлено в соответствие некоторое неотрицательное число ℓ ij, которое здесь назовем длиной ( весом) дуги. В этом случае орграф называется взвешенным графом или сетью. Постановка задачи. Задана сеть, , в которой выделены две вершины s и t. Найти путь минимальной длины из заданной вершины s в заданную вершину t. Для каждой вершины i Î I определим множество вершин, соседних справа: , т.е. это те вершины, которые достижимы из вершины i посредством одной дуги. Предлагаемый ниже алгоритм основан на упорядочении вершин сети по возрастанию расстояния от вершины s. Через ℓ (s, i) обозначим минимальное расстояние от вершины s до вершины i. Поиск 1-ой ближайшей вершины i1 к вершине s. 1) Определим множество (множество вершин соседних справа для вершины s). 2) Определим вершину i1 из условия: . Другими словами, среди вершин, удовлетворяющих условию 1), найдем самую близкую к вершине s. Таким образом, ℓ (s, i1) =. Поиск 2-ой ближайшей вершины i2 к вершине s (см. рис. 6.1). 1) Среди вершин множества I \{s, i1} определяем вершину, ближайшую к вершине i1. Для этого - определим множество \{s}, - определим вершину, для которой 2) Среди вершин множества \{i1} определяем вершину, ближайшую к вершине s: . 3) Определим вершину i2: если + ³ , то i2 = и; если + < , то i2 = и. Далее находим 3-ю и т.д. ближайшие вершины к вершине s. Пусть определены m-1 ближайших вершин к вершине s: , и для них вычислены минимальные расстояния, . Поиск m-ой ближайшей вершины im к вершине s. 1) Для каждой из вершин ip, , определим множество вершин, соседних справа, и исключим из каждого из них вершины s, i1, i2, i3, …, im-1 (если они попали в них): = \{s, i1, i2, i3, …, im-1}. Затем определим вершины, , для которых (p(, . 2) Среди вершин множества определяем вершину, ближайшую к вершине s: . 3) Среди вершин определим вершину im по правилу: =. Поскольку заданная сеть является конечной, то количество элементов множеств вида и на некотором шаге начнет убывать. Если путь из вершины s в вершину t существует, то через конечное число шагов определим и число. Если же путь из вершины s в вершину t не существует, то на каком-то шаге указанные выше множества станут пустыми (вершины не будут иметь соседних справа среди остальных вершин сети). Изложенная идея упорядочения вершин по их расстоянию от вершины s лежит в основе алгоритма Дейкстры. В ходе его выполнения всем вершинам сети присваиваются метки – временные или постоянные. Временная метка – это число, дающее верхнюю оценку минимального пути из вершины s в рассматриваемую вершину. Постоянная метка – число, равное длине минимального пути.
Алгоритм Дейкстры Шаг 0. Каждой вершине i сети G ставим в соответствие метку:
– постоянная метка, остальные метки временные. Шаг k. Определены вершины с постоянными метками: , и p – последняя вершина, получившая постоянную метку. 1 этап (этап обновления меток). 1) Находим – множество вершин, соседних справа для вершины р. 2) Находим: из множества исключаем вершины, имеющие постоянные метки, т.е. = \. 3) Для каждой вершины i Î пересчитываем метки по правилу: =, где – прежняя временная метка вершины i, – новая временная метка вершины i, – постоянная метка вершины р, – длина дуги. 2 этап (перевод одной из временных меток в постоянную метку). 1) Формируем множество Ik – множество вершин с временными метками. 2) Находим вершину с минимальной временной меткой: =. (6.1) 3) Метка – становится постоянной, вершина. Выход из алгоритма (принцип останова). Если, то – минимальная длина пути из заданной вершины s в заданную вершину t. Если = Æ и вершина t имеет временную метку, равную ¥, то в сети не существует пути из вершины s в вершину t. Замечание 1. Алгоритм может быть модифицирован таким образом, что кроме значения минимального пути будет получен и сам путь, например, в виде последовательности вершин. Для этого метку вершины на шаге обновления меток дополним информацией о вершине, через которую пересчитывается минимум в (6.1), т.е. метка вершины будет состоять из двух частей. Как только вершина t получит постоянную метку, по второй части метки определим предшествующую ей вершину. По второй части метки последней определим ей предшествующую вершину и т.д., пока не доберемся до вершины s. Замечание 2. Алгоритм может быть использован для решения задачи о кратчайшем пути из заданной вершины до любой другой вершины. В этом случае изменяется принцип останова. Если все вершины получили постоянные метки, то любая вершина достижима из вершины s. Значение постоянной метки вершины есть длина минимального пути из заданной вершины s в эту вершину. Если на некотором шаге +(p) = Æ и некоторые вершины имеют временную метку, равную ¥, то в сети не существует пути из вершины s до этих вершин.
Итерация 0. ℓ (s) = 0, ℓ (i) = ¥, iÎ {1, 2, 3, 4, 5, t}, p = s. Дальнейшие вычисления на каждой итерации оформим в виде таблиц.
Замечание. Выбор вершины р неоднозначен, можно выбрать либо вершину 4, либо вершину 3. Полагаем р = 3.
Так как вершина t получила постоянную метку, то решение закончено. Длина кратчайшего пути из заданной вершины s в вершину t равна 6. По второй части метки вершин восстанавливаем этот путь: t 4 2 s. Замечание 3. Алгоритм неприменим к сетям, где есть отрицательные веса дуг. На рис. 6.2 представлена сеть, где ℓ 1t = –2. Согласно алгоритму Дейкстры минимальный путь из вершины s в вершину t равен 3 (вершина t является 1-ой ближайшей). На самом деле минимальный путь проходит через вершину 1, его длина равна 2.
|
Последнее изменение этой страницы: 2017-03-15; Просмотров: 794; Нарушение авторского права страницы