Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Баушев, Гадасина - Оптимизационные задачи на се...doc
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
4.39 Mб
Скачать

3.1. Алгоритм Краскала

Алгоритм Краскала для решения задачи построения остова минимального веса для сети включает в себя следующие шаги, из которых шаги являются предварительными, а шаги образуют тело основного цикла:

Сортируем ребра сети по их весам: .

Каждую вершину сети помещаем в отдельную ячейку:

.

Полагаем .

Удаляем первое ребро из имеющейся последовательности ребер: .

Находим ячейки и , содержащие концы ребра . Возможны два случая:

. В этом случае возвращаемся к шагу .

. В этом случае полагаем , объединяем соответствующие ячейки , и переходим к шагу .

Проверка на завершение алгоритма. Если , то возвращаемся к шагу , в противном случае ( ) завершаем алгоритм. Множество является множеством ребер остова минимального веса для сети .

Теорема 4.2. Граф , построенный в результате работы алгоритма Краскала, является остовом минимального веса для сети

Доказательство. Пусть остов минимального веса для сети . По построению, граф не имеет циклов и , следовательно, согласно замечанию 4.4, он является остовом для сети . Поэтому для доказательства требуемого утверждения достаточно доказать равенство

(4.9)

Предположим, что нашлось ребро . Согласно следствию 4.5, в графе имеется ровно один цикл . Обозначим через множество тех ребер цикла, которые принадлежат множеству , но не принадлежат множеству . Это множество непустое, так как в противном случае цикл имелся бы в графе . Если бы нашлось ребро , такое, что , то граф был бы остовом для сети , вес которого меньше, чем , что невозможно по условию. С другой стороны, отсутствие ребра в множестве , согласно алгоритму Краскала, означает, что для любого ребра справедливо неравенство . Следовательно, для любого ребра .

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

Пусть . Тогда, повторив описанную выше процедуру раз, получим граф , совпадающий с . Следовательно, имеет место равенство (4.9). Теорема доказана. ■

Замечание 4.5. В случае, когда в исходной сети имеется несколько ребер одинакового веса, результат работы алгоритма Краскала может быть различным для разных вариантов исходной сортировки последовательности ребер сети, т. е. в этом случае задача (4.3) может иметь несколько решений.

Алгоритм Краскала образно можно представлять как процесс роста деревьев леса («посаженных» в узлах рассматриваемой сети) до момента слияния компонент леса в одно общее дерево.

На рис. 4.5 проиллюстрирован пример работы алгоритма Краскала. В квадратных скобках указан номер итерации, в результате которой к строящемуся остову добавляется соответствующее ребро. Исходная отсортированная последовательность ребер была следующей: , , , , , , , , , , .

Рис. 4.5. Остов минимального веса, построенный с помощью алгоритма Краскала.

Время работы алгоритма Краскала в зависимости от параметров размерности задачи и складывается из двух слагаемых: , где – время, необходимое для предварительной сортировки ребер, – время работы основного цикла. Популярные алгоритмы сортировки [6] допускают оценку: при .

Можно показать, что время работы основного цикла допускает оценку: , где – так называемая функция Аккермана, определяемая рекурсивно для целых неотрицательных чисел и следующим образом:

Функция чрезвычайно быстро растет с ростом , следовательно, обратная к ней функция растет чрезвычайно медленно. В частности, можно показать, что .2) В результате можно написать оценку при , отметив тот факт, что при больших значениях основная часть машинного времени уходит на предварительную сортировку ребер исходного графа.