Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 8.doc
Скачиваний:
15
Добавлен:
10.02.2016
Размер:
169.98 Кб
Скачать

Нахождение кратчайшего пути в связывающей сети

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

О п р е д е л е н и е. Путем называется последовательность вершин ir = (i, j, …, r) или последовательность дуг (ребер) ir = {(i, j ), …, (к, r)}, соединяющих пару вершин i и r графа G.

Сумма приписанных дугам (ребрам) весов в пути ir определяетдлину пути.

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

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

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

Пусть дана связывающая сеть G, в которой каждой дуге (ребру) приписан положительный вес, пропорциональный ее (его) длине. Требуется найти путь stмежду заданными вершинамиsи t, имеющий минимально возможную длину, т. е.

L =lij® min (на М),

где М – множество всех возможных путей из sвt.

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

Особенностью этого алгоритма является тот факт, что в процессе его выполнения одновременно строятся кратчайшие пути из заданной вершины s во все остальные вершины сети. Это объясняется тем, что любая вершинаi Î Nможет оказаться промежуточной в кратчайшем пути изs вt. По окончании работы алгоритма вершинаsоказывается связанной со всеми остальными вершинами связывающей сетиG, в том числе и с вершинойt, кратчайшими путями, а дуги (ребра), вошедшие в них, образуют некоторую подсеть без циклов, т. е. дерево с корнем в вершинеs.

Работа алгоритма реализуется с помощью расстановки у вершин пометок вида (Lsj, i), гдеLsj – длина кратчайшего пути из исходной вершиныsв некоторую вершинуj, аiпредшествующаяjвершина в этом пути.

Пометки делятся на временныеипостоянные. Временные пометки могут изменяться в результате работы алгоритма, а постоянные – не изменяются.

Ниже приводится алгоритм Дейкстры в пошаговой форме.

Шаг0. Для вершиныsполагаетсяLss= 0, а для остальных вершинLsj = ¥ . Все вершины имеют временные пометки вида (Lsj, s).

Шаг1. Среди вершин с временными пометками выбираем вершинуr, для которойLsr= min(Lsj ). Пометка вершиныrстановитсяпостоянной.

Шаг2. Если все вершины сети получилипостоянныепометки – конец работы алгоритма. В противном случае переход к шагу 3.

Шаг3. Пересчитываемвременныепометки для вершин, смежных вершинеr, получившей постоянную пометку на шаге 1, в соответствии с выражениемLsj = min(Lsj,Lsr + Lrj ).

Переход к шагу 1.

Трассировка пути stсоставляется в обратном направлении, следуя из вершиныtвs, руководствуясь вершинамиiвпостоянныхпометках.

Найдем кратчайший путь из вершины sв вершинуtв сети, изображенной на рис. 5.10. Веса, проставленные возле ребер, определяют их длины.

Рисунок 1. Иллюстрация работы алгоритма Дейкстры

Шаг0. ПометкаPдля вершиныsимеет вид:Рs = (0,0). Для остальных вершинРi = (¥,s). Все пометкивременные.

Шаг1. Средивременныхпометок наименьший параметр длины имеет вершинаs, так какLss= 0. Ее пометка становитсяпостоянной(отметим ее двойными скобками)

Шаг 2. Пересчитываемвременныепометки для вершин, смежных вершинеs. Для вершины 1 параметр длины

Ls1 = Lss + ls1 = 0 + 15 = 15

Полученное значение меньше имеющегося (Lsi = ¥),и поэтому новое значениевременнойпометки будетP1 = (15,s).

Для вершины 2 новая пометка имеет значение P2=(17,s). Для вершины 3 –P3 = (10,s).

Перейдя к шагу 1, выбираем вершину 3, так как она имеет наименьший параметр длины Ls3 = 10, среди всех вершин свременнымипометками. Ее пометка становитсяпостоянной. Поскольку еще не все вершины получилипостоянныепометки, переходим к шагу 2 и осуществляем пересчет пометок для вершин, смежных вершине 3:

P2 = (17,s) можно оставить без изменения, так как новый параметр длины равен прежнему значению.

P5 = (22, 3).

Pt = (30, 3).

Вершина 1 на шаге 1 получает постояннуюпометку, так как ее параметр длины минимален.

Новое значение пометки на шаге 2 получает вершина 4, а именно P4 = (24, 1).

Возвращаясь к шагу 1, устанавливаем постояннуюпометку для вершины 5. Изменить значение пометок на шаге 3 не удается. Фиксируем следующую вершину спостояннойпометкой – это вершина 4.

Изменить временнуюпометку для вершиныtне удается - и она автоматически становитсяпостоянной.

На этом работа алгоритма заканчивается.

Трассировку пути stопределяем, двигаясь в обратном направлении отtкsчерез вершины, указанные в пометках:t3s.