- •Лекция 8 Определение оптимального местоположения опорного узла в кабельной сети абонентского доступа
- •Определение оптимального места расположения базовой станции в сети стационарного радио доступа
- •Алгоритм нахождения центра графа (вершины s) следует из самого определения:
- •Определение цикла наименьшей длины при организации транспортного кольца
- •Нахождение кратчайшего пути в связывающей сети
- •Определение множества путей заданной транзитности
- •Вопросы для самоконтроля
Нахождение кратчайшего пути в связывающей сети
Задача о нахождении кратчайшего по длине пути в связывающей сети относится к фундаментальным задачам комбинаторной оптимизации. К ней можно свести широкий круг практических задач, возникающих в различных областях народного хозяйства, и в первую очередь в связи.
О п р е д е л е н и
е. Путем называется
последовательность вершин
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
через вершины, указанные в пометках:
t
3
s.
