- •Глава 4. Деревья
- •§ 1. Определение дерева
- •§ 2. Задача полного перебора всех деревьев данного порядка. Код Прюфера. Теорема Кэли.
- •§ 3. Задача о построении остова минимального веса
- •3.1. Алгоритм Краскала
- •3.2. Алгоритм Прима.
- •§ 4. Метрические характеристики дерева.
- •§ 5. Задача о построении остова наименьшего диаметра.
- •Глава 5. Потоки в сетях
- •§ 1. Потоки и разрезы
- •§ 2. Задача о максимальном потоке
- •§ 3. Поток минимальной стоимости.
- •Глава 6. Применение сетевых методов к решению задач линейного программирования транспортного типа
- •§ 1. Эквивалентность экстремальных задач
- •§ 2. Классическая транспортная задача
- •§ 3. Операции над т-сетями
- •§ 4. Оптимальное планирование вагонопотоков с учетом возврата порожних вагонов
- •Литература
- •Оглавление
3.1. Алгоритм Краскала
Алгоритм Краскала
для решения задачи построения остова
минимального веса для сети
включает в себя следующие шаги, из
которых шаги
являются предварительными, а шаги
образуют тело основного цикла:
Сортируем ребра
сети по их весам:
.
Каждую вершину
сети помещаем в отдельную ячейку:
.
Полагаем
.
Удаляем первое
ребро из имеющейся последовательности
ребер:
.
Находим ячейки
и
,
содержащие концы ребра
.
Возможны два случая:
.
В этом случае возвращаемся к шагу
.
.
В этом случае полагаем
,
объединяем соответствующие ячейки
,
и переходим к шагу
.
Проверка на
завершение алгоритма. Если
,
то возвращаемся к шагу
,
в противном случае (
)
завершаем алгоритм. Множество
является множеством ребер остова
минимального веса для сети
.
Теорема 4.2. Граф
,
построенный в результате работы алгоритма
Краскала, является остовом минимального
веса для сети
Доказательство. Пусть – остов минимального веса для сети . По построению, граф не имеет циклов и , следовательно, согласно замечанию 4.4, он является остовом для сети . Поэтому для доказательства требуемого утверждения достаточно доказать равенство
(4.9)
Предположим, что
нашлось ребро
.
Согласно следствию 4.5, в графе
имеется ровно один цикл
.
Обозначим через
множество тех ребер цикла, которые
принадлежат множеству
,
но не принадлежат множеству
.
Это множество непустое, так как в
противном случае цикл имелся бы в графе
.
Если бы нашлось ребро
,
такое, что
,
то граф
был бы остовом для сети
,
вес которого меньше, чем
,
что невозможно по условию. С другой
стороны, отсутствие ребра
в множестве
,
согласно алгоритму Краскала, означает,
что для любого ребра
справедливо неравенство
.
Следовательно,
для любого ребра
.
Зафиксируем
произвольное ребро
и рассмотрим граф
.
Граф
так же, как и граф
,
является остовом для сети
,
причем
.
В то же время графы
и
имеют на одно общее ребро больше, чем
графы
и
.
Пусть
.
Тогда, повторив описанную выше процедуру
раз, получим граф
,
совпадающий с
.
Следовательно, имеет место равенство
(4.9). Теорема доказана. ■
Замечание 4.5. В случае, когда в исходной сети имеется несколько ребер одинакового веса, результат работы алгоритма Краскала может быть различным для разных вариантов исходной сортировки последовательности ребер сети, т. е. в этом случае задача (4.3) может иметь несколько решений.
Алгоритм Краскала образно можно представлять как процесс роста деревьев леса («посаженных» в узлах рассматриваемой сети) до момента слияния компонент леса в одно общее дерево.
На рис. 4.5
проиллюстрирован пример работы алгоритма
Краскала. В квадратных скобках указан
номер итерации, в результате которой к
строящемуся остову добавляется
соответствующее ребро. Исходная
отсортированная последовательность
ребер была следующей:
,
,
,
,
,
,
,
,
,
,
.
Рис. 4.5. Остов минимального веса, построенный с помощью алгоритма Краскала.
Время
работы алгоритма Краскала в зависимости
от параметров размерности задачи
и
складывается из двух слагаемых:
,
где
– время, необходимое
для предварительной сортировки ребер,
– время работы
основного цикла. Популярные алгоритмы
сортировки [6] допускают оценку:
при
.
Можно показать,
что время работы основного цикла
допускает оценку:
,
где
– так называемая функция
Аккермана,
определяемая
рекурсивно для целых неотрицательных
чисел
и
следующим образом:
Функция
чрезвычайно быстро растет с ростом
,
следовательно, обратная к ней функция
растет чрезвычайно медленно. В частности,
можно показать, что
.2)
В результате можно написать оценку
при
,
отметив тот факт, что при больших
значениях
основная часть машинного времени уходит
на предварительную сортировку ребер
исходного графа.
