Три алгоритма на графах
[14/100%]Построить минимальное остовное дерево для неориентированного графа с множествами вершин и рёбер . Третий параметр в скобках — вес ребра.
Пусть — ребро максимального веса в некотором простом цикле графа . Доказать, что
существует минимальное остовное дерево графа , которое является и минимальным остовным деревом графа ;
если в нет других рёбер такого же веса, то никакое минимальное остовное дерево не содержит .
Пусть — минимальное остовное дерево для нагруженного неориентированного графа с вершинами, — разметка рёбер. Пусть — это последовательность рёбер из , упорядоченных по возрастанию . Пусть — произвольное остовное дерево для с рёбрами , упорядоченными по возрастанию . Показать, что для всех . Указание. Рассмотреть лес деревьев из рёбер , и рёбра .
Недостатком алгоритма Крускала является необходимость проверки на каждом шаге наличия циклов, что само по себе является достаточно сложной задачей. Следующий алгоритм независимо предложен В. Ярником, Р. Примом и Э. Дейкстрой.
-
Выбрать произвольным образом вершину , она сама по себе является деревом (без рёбер).
-
На каждом шаге добавлять к имеющемуся дереву ребро наименьшего веса, одна из вершин которого принадлежит дереву, а вторая — нет. Доказать корректность этого алгоритма для связных графов по аналогии с теоремой 80 (Корректность алгоритма Крускала): результатом работы алгоритма МинОД является минимальное остовное дерево входного графа с функцией разметки .
Пусть — это глубинное остовное дерево, построенное алгоритмом обхода в глубину для графа . Доказать, что для каждого обратного ребра или является предком в , или является предком в .
Модифицировать алгоритм поиска в глубину так, чтобы он вычислял и распечатывал список всех мостов графа.
Начиная с вершины , обойти (занумеровать) вершины заданного неориентированного графа с помощью алгоритма обхода «в глубину» и построить дерево этого обхода. . Какое обратное ребро и цикл в обнаружились в этом обходе первыми? Вычислить для каждой вершины значение и определить все мосты графа . Считать, что все списки смежности упорядочены по возрастанию номера вершины, а выбирается вершина с наименьшим номером.
Изменить алгоритм обхода в глубину так, чтобы он позволил перечислить все связные компоненты неориентированного графа.
Если в ориентированном графе существует вершина , из которой достижимы все остальные, то для него тоже можно определить понятие остовного (теперь ориентированного) дерева: дерево с корнем . Определить, какие из алгоритмов построения остовного дерева можно приспособить для построения остовного дерева в ориентированном графе: алгоритм Крускала, алгоритм Ярника-Прима-Дейкстры, алгоритм поиска в глубину.
Определить для следующего нагруженного графа и вершины длины кратчайших путей из в остальные вершины и построить дерево этих путей. Здесь .
Где в доказательстве правильности алгоритма Дейкстры используется неотрицательность весов рёбер? Привести пример графа (с отрицательными весами), для которого алгоритм Дейкстры даёт неверный ответ.
Теорема 83 (Корректность алгоритма Дейкстры): алгоритм Дейкстры строит дерево кратчайших путей из вершины во все достижимые из неё вершины и для каждой такой вершины определяет длину кратчайшего пути в неё из . В доказательстве, индукцией по : обозначим с помощью , , значение и содержимое массивов , после шагов выполнения цикла, а — вершину, выбранную на -м шаге.
Показать, что в доказательстве индукционного шага теоремы 83 на стр. 248 вершина может быть только предпоследней в кратчайшем пути из в .
Сколько раз может меняться для одной вершины значение в ходе работы алгоритма Дейкстры для графа с шестью вершинами? Привести пример на каждый возможный случай.
Пусть в графе выбрана вершина и для каждой вершины , достижимой из , существует единственный кратчайший путь из в . Доказать, что рёбра всех этих путей образуют ориентированное дерево с корнем .