Задание № 2
Найдите кратчайшие пути в ориентированном графе от первой вершины до всех остальных, используя Dijkstra’s algorithm. Постройте соответствующее дерево.
РЕШЕНИЕ. Найдем кратчайший путь от вершины x1 до всех прочих. Используем предложенный алгоритм. Подход заключается в том, что вершинам графа присваиваются временные метки, которые впоследствии по определенным правилам заменяются на постоянные маркеры. Будем использовать обозначения:
- L x* (i) – постоянная метка xi;
- L xH (i) – новая временная метка xi;
- L xC (i) – старая временная метка xi;
- Rij – вес ребра, соединяющего xi и xj.
Новая временная метка вычисляется по формуле:
L xH (xj) = min {L x R L xc (i), ij + * (i)}/
Из всех временных меток выбираем наименьшую; она становится постоянной. Действия подобного плана продолжаем, пока не будут найдены все соответствующие метки для каждой из вершин графа. Результаты на всех этапах будем заносить в таблицу.
В предпоследний столбец включаем вершину, получившую постоянную метку, в последний – ее величину, характерную для данного шага.
Шаг 1. Начальная вершина x1 имеет постоянную метку L x* (1) = 0, остальные – временную ∞.
Шаг 2. Определяем множество последователей вершины Г (x1) = {x, x, x, x, 3, 4, 5, 2}. Пересчитываем их временные метки по основной формуле. L xH (3) = 85, L xH (4) = 75, L xH (5) = 57, L xH (2) = 32. Берем вершину x2 с минимальной величиной 32. После этого присваиваем ей постоянную метку L x*(2) = 32.
Шаг 3. Определяем множество последователей вершины Г (x2) = {x, x, x, 3, 5, 8}. Пересчитываем временные метки по основной формуле. L xH (3) = min {85, 32 + 70} = 85, L xH (5) = min {57, 32 + 23} = 55 и т. д. Берем вершину x5 с минимальной величиной 55, присваиваем ей соответствующую постоянную метку (L x* (5) = 55).
Шаг 4. Определяем множество последователей вершины Г (x5) = {x, x, x, 4, 6, 7}. Действуем аналогичным образом, получаем следующее: L xH (4) = min {75, 55 + 10} = 65 и т. д. Берем вершину x4 с минимальной временной меткой 65, присваиваем ей постоянный маркер. Речь об L x* (4) = 65.
Шаг 5. Определяем множество последователей вершины Г (x4) = {x3}. Действуем аналогично, в результате берем вершину x6 с минимальной временной меткой 66, присваиваем ей постоянную в соответствующем виде (L x* (6) = 66).
Шаг 6. Определяем множество последователей вершины Г (x6) = {x, x, 4, 7}. Действуем аналогично. Получаем L xH (7) = min {75, 66 + = 7} = 73. Берем вершину x7 с минимальной временной меткой 73, присваиваем ей постоянную (L x* (7) = 73).
Шаг 7. Определяем множество последователей вершины Г (x7) = {x8}. Получаем L xH (8) = min {96, 73 + 12} = 85 и т. д. Берем x3 с минимальной временной меткой 83. Получаем L x* (3) = 83.
Шаг 8. Проделываем ту же работу в отношении Г (x3) = {x6}. Но эта вершина уже имеет постоянную метку. Поэтому берем x8, присваиваем ей L x* (8) = 85.
Кратчайшие пути найдены, их длина приведена в последних двух столбцах расчетной таблицы. Построим дерево кратчайших путей (ребра дерева обведены жирным).
(1, 2), (2, 5), (5, 4), (4, 3), (5, 6), (6, 7), (7, 8).