Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КАЛИЖАНОВА_ПОЛН.ВЕРСИЯ_ПОСОБИЯ..docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.06 Mб
Скачать

2.3. Примеры и упражнения

Пример 2.1. Построить МОД в графе, изображенном на рис. 2.1a (рядом с ребрами указаны их веса), с помощью алгоритма Прима.

Решение. Положим Тогда метки вершин , , остальные . Вершины 2 и 3, ближайшие к T, добавим, например, вершину 2, получив , и пересчитаем метки для вершин 3, …, 7. Получим , , , Теперь ближайшая к T вершина 4, добавим ее: . Продолжая процесс, добавим последовательно вершины 5, 3, 7 и 6 вместе с ребрами (4 ,5), (1, 3), (5, 7) и (3, 6). МОД изображено на рис. 1.1b, и его вес равен 14.

Рисунок-2.1.a) граф; b) МОД

Пример 2.2. Найти количество остовных деревьев графа, изображенного на рис. 2.1a, степени которых не превосходят 2.

Решение. Перенумеруем ребра. Очевидно, ребро 1 = (5, 7) войдет во все остовные деревья. Можно построить двоичное дерево решений, начиная с ребра 1, включая (если это не приводит к циклу или превышению допустимой степени вершин) или не включая очередное ребро. В результате получим три гамильтоновых пути. Один из них изображен на рис. 2.1b, два других – на рис. 2.2.

Рисунок-2.2. Два остовных дерева степени 2

Упражнение 2.1. Доказать, что алгоритмы Прима, Краскала и Борувки строят МОД.

Упражнение 2.2. Показать, что в дереве, имеющем две и более вершины, существует как минимум две вершины степени 1.

Упражнение 2.3. Найти такое остовное дерево графа, показанного на рис. 2.1a, в котором максимальный вес ребра минимален.

Упражнение 2.4. Найти МОД графа, показанного на рис. 2.1a, используя алгоритмы Краскала и Борувки.

Упражнение 2.5. Найти все МОД графа, показанного на рис. 2.3.

Рисунок-2.3. Взвешенный граф (рядом с каждым ребром указан его вес)

3. Задачи построения кратчайших путей

Пусть задан ориентированный (или неориентированный) граф в котором – множество вершин, а – множество дуг. Припишем каждой дуге «длину» .

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

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

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

3.1. Алгоритм Дейкстры

Алгоритм изобретен нидерландским ученым Э. Дейкстрой в 1959 г. [4] и строит ДКП из начальной вершины (корня) графа во все остальные вершины при неотрицательных длинах дуг (ребер).

Пусть – начальная вершина (источник). Алгоритм на каждом шаге добавляет к частично построенному дереву с корнем в одну ближайшую к вершину, не принадлежащую . Если требуется найти кратчайший путь до некоторой вершины , то алгоритм останавливается после добавления этой вершины. Иначе, строится остовное дерево, связывающее все вершины графа кратчайшими путями с , т. е. ДКП.

Обозначим через – множество вершин, из которых есть дуги в вершину в графе . Положим начальное строящееся дерево . Припишем каждой вершине метку , соответствующую (текущей) минимальной длине пути из в . Метка источника не меняется в процессе работы алгоритма. Сначала для всех . На каждом шаге алгоритма ищется дуга которая добавляется в , и обновляется метка j-ой вершины . После этого (с константной трудоемкостью) обновляется метка каждой не включенной в вершины

Алгоритм останавливается, когда все вершины графа включены в дерево (после выполнения шагов). Трудоемкость одного шага (выбор вершины для включения в ) равна . Следовательно, общая трудоемкость алгоритма Дейкстры – .

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]