Курсовая работа: Алгоритм Дейкстры

Если все вершины отмечены как постоянные, то эти пометки дают длины кратчайших путей. Останов.

Если некоторые пометки являются временными, перейти к шагу 2.

Доказательство того, что вышеприведенный алгоритм действительно дает кратчайшие пути, чрезвычайно простое, дадим набросок этого доказательства.

Допустим, что на некотором этапе постоянные пометки дают длины кратчайших путей. Пусть S1 – множество вершин с этими пометками, а S2 – множество вершин с временными пометками. В конце шага 2 каждой итерации временная пометка l(xi ) дает кратчайший путь от sк xi , проходящий полностью по вершинам множества S1 . (Так как при каждой итерации во множество S1 включается только одна вершина, то обновление пометки l(xi ) требует только одного сравнения на шаге 2.)

Пусть кратчайший путь от s к xi * не проходит целиком по S1 и содержит по крайней мере одну вершину из S2 , и пусть xj S2 – первая такая вершина в этом пути. Так как по предположению cij неотрицательны, то часть пути от xj к xi * должна иметь неотрицательный вес и. Это, однако, противоречит утверждению, что l(xi *) – наименьшая временная пометка, и, следовательно, кратчайший путь к xi * проходит полностью по вершинам множества S1 , и поэтому l(xi *) является его длиной.

Так как вначале множество S1 равно (s) при каждой итерации к S1 добавляется xi *, то предположение, что l(xi *) равно длине кратчайшего путиxi S1 , выполняется при каждой итерации. Отсюда по индукции следует, что алгоритм дает оптимальный ответ.

Если требуется найти кратчайшие пути между s и всеми другими вершинами полного связного графа с n вершинами, то в процессе работы алгоритма выполняются операций сложения и сравнения на шаге 2 и еще операций сравнения на шаге 3. Кроме того, при осуществлении шагов 2 и 3 необходимо определить, какие вершины временные, а для этого нужно еще операций сравнения. Эти величины являются верхними границами для числа операций, необходимых при отыскании кратчайшего пути между заданными вершинами s и t. Они действительно достигаются, если окажется, что вершина t будет последней вершиной, получившей постоянную пометку.

Как только длины кратчайших путей от s будут найдены (они будут заключительными значениями пометок вершин), сами пути можно получить при помощи рекурсивной процедуры с использованием соотношения (*). Так как вершина xi ' непосредственно предшествует вершине xi в кратчайшем пути от s к xi , то для любой вершины xi соответствующую вершину xi ' можно найти как одну из оставшихся вершин, для которой

''. (*)

Если кратчайший путь от s до любой вершины xi является единственным, то дуги (xi ', xi ) этого кратчайшего пути образуют ориентированное дерево с корнем s. Если существует несколько «кратчайших» путей от s к какой-либо другой вершине, то при некоторой фиксированной вершине xi ' соотношение (*) будет выполняться для более чем одной вершины xi . В этом случае выбор может быть либо произвольным (если нужен какой-то один кратчайший путь между s и xi ), либо таким, что рассматриваются все дуги (xi ', xi ), входящие в какой-либо из кратчайших путей и при этом совокупность всех таких дуг образует не ориентированное дерево, а общий граф, называемый базой относительно s или кратко – s-базой .


2.2 Задачи с методическим описанием

Найти кратчайшие пути от вершины 1 ко всем другим вершинам графа

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

x1 x2 x3 x4 x5 x6 x7 x8 x9
x1 10 3 6 12
x2 10 18 2 13
x3 18 25 20 7
x4 25 5 16 4
x5 5 10
x6 20 10 14 15 9
x7 2 4 14 24
x8 6 23 15 5
x9 12 13 9 24 5

Алгоритм работает так:

Шаг 1 . .

Первая итерация

Шаг 2 . - все пометки временные.

; ; ;

Шаг 3 . соответствует x7 .

Шаг 4 . x7 получает постоянную пометку l(x7 )=3+ , p=x7 .

Шаг 5 . Не все вершины имеют постоянные пометки, поэтому переходим к шагу 2.

Вторая итерация

Шаг 2 . - все пометки временные.

; ; ;

Шаг 3 . соответствует x2 .

Шаг 4 . x2 получает постоянную пометку l(x2 )=5+ , p=x2 .

Шаг 5 . Не все вершины имеют постоянные пометки, поэтому переходим к шагу 2.

Третья итерация

Шаг 2 . - только вершины x3 и x9 имеют временные пометки.

;

К-во Просмотров: 751
Бесплатно скачать Курсовая работа: Алгоритм Дейкстры