Алгоритм Прима-Краскала
1. Инициализируем граф - вводим матрицу весов графа D[i,j] 2. "Раскрашиваем" вершины графа в разные цвета 3. До тех пор, пока число ребер остова меньше числа вершин графа, выполняем: 1) Находим ребро минимальной длины, не включенное до этого в остов графа и не образующее цикла с остовом 2) Включаем найденное ребро минимальной длины в остов 3) Меняем цвет всех вершин, входящих в остов, на один цвет Докажем, что описанный алгоритм получает в точности минимальное решение. Для доказательства нам понадобится очень простое утверждение: Если к дереву добавить ребро, то в дереве появится цикл, содержащий это ребро. Действительно, пусть добавлено ребро (u, v) – «добавлено» означает, что ребро – новое, что раньше его в дереве не было. Поскольку дерево является связным графом, то существует цепь С(u, ..., v) из нескольких ребер, соединяющая вершины u и v. Добавление ребра (u, v) замыкает цепь, превращая ее в цикл.
Теорема. Алгоритм Прима-Краскала получает минимальное остовное дерево. Доказательство. Результатом работы алгоритма является набор из n-1 ребер. Они не образуют цикла, ибо на каждом из n-1 шагов соединялись вершины разного цвета, т. е. ранее не связанные. Этот граф связный, потому что после проведения 1-го ребра осталось n-1 разных цветов, ..., после проведения (n-1)-го ребра остался один цвет, т. е. одна компонента связности. Итак, полученный набор ребер образует связный граф без циклов, содержащий n-1 ребер, т. е. n вершин. Следовательно, граф есть остовное дерево. Осталось доказать, что оно имеет минимальную длину. Пусть {
Если полученное дерево не минимально, то существует другое дерево, задаваемое набором из n-1 ребер {
Может быть, Если не предполагать, что все ребра разные, то в доказательстве могло бы получиться, что В заключение анализа алгоритма оценим требуемую память и требуемое число операций. В варианте Прима надо хранить 2n координат точек, в варианте Краскала – n2 расстояний; в обоих вариантах удобно хранить 2(n-1) номеров вершин, т е. n-1 ребер ответа. Всего требуется памяти 0(n ), т.е. порядка n2, что, учитывая реальные величины n, необременительно. Для нахождения текущего минимального ребра надо просмотреть 0(n2) чисел и сделать это надо n-1 раз, так что временная сложность алгоритма 0(n3). Это тоже реально. Задача Прима-Краскала относится к просто и точно решаемым.
Популярное: Как выбрать специалиста по управлению гостиницей: Понятно, что управление гостиницей невозможно без специальных знаний. Соответственно, важна квалификация... Почему человек чувствует себя несчастным?: Для начала определим, что такое несчастье. Несчастьем мы будем считать психологическое состояние... Как построить свою речь (словесное оформление):
При подготовке публичного выступления перед оратором возникает вопрос, как лучше словесно оформить свою... Как распознать напряжение: Говоря о мышечном напряжении, мы в первую очередь имеем в виду мускулы, прикрепленные к костям ... ![]() ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (377)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |