Скажите, пожалуйста, можно ли еще получить документ о прохождении курса ("Графы и алгоритмы", декабрь 2020) после предоставления всех дополнительных необходимых документов? |
Оптимальные каркасы
Задача об оптимальном каркасе
Задача об оптимальном каркасе (стягивающем дереве) состоит в следующем. Дан обыкновенный граф и весовая функция на множестве ребер . Вес множества определяется как сумма весов составляющих его ребер. Требуется в графе найти каркас минимального веса. В этом разделе будем предполагать, что граф связен, так что решением задачи всегда будет дерево. Для решения задачи об оптимальном каркасе известно несколько алгоритмов. Рассмотрим два из них.
Алгоритм Прима
В алгоритме Прима на каждом шаге рассматривается частичное решение задачи, представляющее собой дерево. Вначале это дерево состоит из единственной вершины, в качестве которой может быть выбрана любая вершина графа. Затем к дереву последовательно добавляются ребра и вершины, пока не получится остовное дерево, т.е. каркас. Для того чтобы из текущего дерева при добавлении нового ребра опять получилось дерево, это новое ребро должно соединять вершину дерева с вершиной, еще не принадлежащей дереву. Такие ребра будем называть подходящими относительно рассматриваемого дерева. В алгоритме Прима применяется следующее правило выбора: на каждом шаге из всех подходящих ребер выбирается ребро наименьшего веса. Это ребро вместе с одной новой вершиной добавляется к дереву. Если обозначить через и множества вершин и ребер строящегося дерева, то алгоритм Прима можно представить следующим образом.
Алгоритм 1. Построение оптимального каркаса методом Прима
- , где - произвольная вершина графа
- while do
- найти ребро наименьшего веса среди всех подходящих ребер
Докажем, что алгоритм Прима действительно находит оптимальный каркас. Дерево назовем фрагментом, если существует такой оптимальный каркас графа , что является подграфом дерева . Иначе говоря, фрагмент - это дерево, которое можно достроить до оптимального каркаса.
Теорема 1. Если - фрагмент, - подходящее ребро наименьшего веса относительно , то - фрагмент.
Доказательство. Пусть - оптимальный каркас, содержащий в качестве подграфа. Если ребро принадлежит , то - подграф и, следовательно, фрагмент. Допустим, не принадлежит . Если добавить ребро к дереву , то образуется цикл. В этом цикле есть еще хотя бы одно подходящее ребро относительно (никакой цикл, очевидно, не может содержать единственное подходящее ребро). Пусть - такое ребро. Тогда подграф , получающийся из удалением ребра и добавлением ребра , тоже будет деревом. Так как , то . Но - оптимальный каркас, следовательно, и - тоже оптимальный каркас. Но является подграфом графа и, следовательно, фрагментом.
Дерево, состоящее из единственной вершины, очевидно, является фрагментом. Из теоремы 1 следует, что если после некоторого количества шагов алгоритма Прима дерево является фрагментом, то оно будет фрагментом и после следующего шага. Следовательно, и окончательное решение, полученное алгоритмом, будет фрагментом, т.е. оптимальным каркасом.