Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Задания / 2 семестр / Дискретная математика / Учебное пособие по дискретной математике.doc
Скачиваний:
317
Добавлен:
20.04.2015
Размер:
19.51 Mб
Скачать

2.4. Кратчайший путь между двумя вершинами.

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

Алгоритм Дейкстры для нахождения кратчайшего пути (Dijkstra, 1959).

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

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

На втором шаге алгоритма для каждой вершины , которая имеет временную метку и для которой существует дуга, вычисляется суммаи, если эта сумма меньше, чем, то вершинаполучает новую временную метку

(помечается из вершины ).

Затем среди всех вершин, имеющих временные метки, находится вершина , для которойимеет минимальное значение, и её временная метка делается её постоянной меткой.

Пусть - вершина, получившая на () – ом шаге постоянную метку. Тогда на– ом шаге алгоритма для каждой вершиныс временной меткой, для которой существует дуга, вычисляется суммаи, если эта сумма меньше чем, то вершинаv получает новую временную метку

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

Алгоритм заканчивает работу, когда вершина получает постоянную метку. Эта метка равна кратчайшему пути изв. Чтобы восстановить этот путь, нужно найти вершину, из которой была помечена вершина, затем вершину, из которой была помечена та вершина, и т.д., пока не дойдем до вершины. Тогда последовательность этих же вершин в обратном порядке и определит искомый кратчайший путь. Докажем это индукцией по числу шагов.

Для вершины постоянная меткаесть, очевидно, длина кратчайшего пути изx в . Пусть после () – го шага множество вершин, имеющих постоянные метки, естьи длины кратчайших путей отx до этих вершин совпадают с их постоянными метками ,,,…,. Пусть наk- том шаге вершина , имевшая к этому моменту временную метку, полученную из некоторой вершины, получает постоянную метку. Покажем, чтоесть длина кратчайшего пути из х в. Допустим противное, что длина кратчайшего из х вменьше, чем. Тогда кратчайший путь не может проходить только через вершины множества, т.к. в этом случае вершинаимела бы передk – ым шагом метку, полученную не из вершины , а из другой вершины, а именно, из вершины, предшествующейна кратчайшем пути. С другой стороны, этот путь не может проходить и через вершины, не принадлежащие, т.к. первая такая вершина на кратчайшем пути должна была бы получить постоянную метку раньше вершины. Поэтому длина кратчайшего пути изx в обязана быть равной.

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

Рассмотрим работу алгоритма на примере представленного на рисунке графа.

Работу алгоритма представим в виде таблицы, элемент на пересечении i – ой строки и j – го столбца которой есть метка j – ой вершины после i – го шага. В скобках около метки каждой вершины указано, из какой вершины она была помечена.

Вершины

Шаги

алгоритма

X

y

0

0*

1

0*

2

0*

3

0*

4

0*

5

0*

6

0*

Длина кратчайшего пути из x в y равна 12. выписывая вершины, из которых была помечена вершина , получаем. Инвертируя данную последовательность, получаем кратчайший путь.

Тест.

  1. Если минимальное значение достигается на нескольких вершинах, то постоянную меткуполучает а) вершина наибольшей степени; б) вершина наименьшей степени; в) любая вершина из минимального множества.

  2. Трудоемкость алгоритма Дейкстры равна а) ; б); в).

  3. Вершины получают постоянные метки в порядке а) неубывания от x; б) невозрастания расстояния от х; в) порядок не является монотонным относительно расстояния.