§ 15. Остов минимального веса
Рассмотрим следующую задачу: во взвешенном связном графе требуется найти остов минимального веса. Эта задача возникает при проектировании линий электропередачи, трубопроводов, дорог и т. п., когда требуется заданные центры соединить некоторой системой каналов связи так, чтобы любые два центра были связаны либо непосредственно соединяющим их каналом, либо через другие центры и каналы, и чтобы общая длина (или, например, стоимость) каналов связи была минимальной. В этой ситуации заданные центры можно считать вершинами полного графа с весами ребер, равными длинам (стоимости) соединяющих эти центры каналов. Тогда искомая сеть будет кратчайшим остовным подграфом полного графа. Очевидно, что этот кратчайший остовный подграф должен быть деревом. Поскольку полный граф Кn содержит nn-2 различных остовных деревьев, то решение этой задачи «слепым» перебором вариантов потребовало бы чрезвычайно больших вычислений даже при относительно малых п. Однако для ее решения имеются эффективные алгоритмы. Опишем два из них — алгоритмы Дж. Краскала (1956 г.) и Р. Прима (1957 г.), применимые к произвольному связному графу.
Задача об остове минимального веса(о кратчайшем остове): связном взвешенном графе (G, w) порядка n найти остов минимального веса.
Алгоритм Краскала, решающий эту задачу, заключается в следующем.
Строим граф t1 = Оn + е1, присоединяя к пустому графу на множестве вершин VG ребро е1 принадлежит EG минимального веса.
Если граф Ti уже построен и i<n— 1, то строим граф Ti+1 — Ti + ei+1 , где ei+`1 — ребро графа G, имеющее минимальный вес среди ребер, не входящих в Ti и не составляющих циклов с ребрами из Тi.
Следующая теорема утверждает, что алгоритм Краскала всегда приводит к остову минимального веса.
Теорема 15.1. При i<n—l граф Ti+1 можно построить. Граф Tn-1 является остовом минимального веса в графе (G, w). .
Граф Ti имеет ровно i ребер и потому при i < n — 1 является несвязным. А так как граф G связен, то в нем есть по меньшей мере одно ребро, не составляющее циклов с ребрами графа Тi. Итак, нужное ребро ei+1 существует и граф Ti+1 можно построить.
Рассмотрим граф Тn-1. Поскольку Тn-1 является (n, n— 1)-графом без циклов, то согласно теореме 13.1 дерево. Остается доказать, что вес дерева Тn-1 минимален. Предположим, что это не так, и среди всех остовов графа G минимального веса выберем такой остов Т, который имеет с деревом Тn-1 максимальное число общих ребер. Пусть ei = ab — ребро дерева Тn-1 , не содержащееся в Т и имеющее минимальный номер среди ребер дерева Тn-1 , не входящих в Т (напомним, что в процессе построения дерева Тn-1 его ребра получили номера 1, 2 ,.. ..., n— 1). В дереве Т есть простая (а, b)-цепь. Присоединив к ней ребро ei, получим цикл. В этом цикле есть ребро е, не входящее в дерево Тn-1 . Заменив в дереве Т ребро е на ei, получим новый остов Т' = Т — е + ei. Но Т — остов минимального веса, следовательно, w(T'} = = w(T) + w(ei)- w(e)>=w(T), т. е.
w(et)>=w(e). (1)
С другой стороны, присоединяя ребро е к Тi-1 (при i =1 полагаем Ti-1 = 0n), мы не получим цикла, поскольку ребра е1, e2, ..., ei-1, е входят в дерево T, и потому, если бы вес w(ei) был больше, чем w(e), мы взяли бы при построении дерева Ti ребро е вместо еi. Из (1) теперь следует, что w(ei) = w(e), w(T')—w(T).
Итак, Т' — остов минимального веса. Число ребер, общих для деревьев Т' и Тn-1, больше, чем число ребер, общих для Т и Тn-1, что противоречит выбору дерева Т. Полученное противоречие и доказывает теорему.
В качестве иллюстрации рассмотрим взвешенный граф, изображенный на рис. 15.1,
{1, 4}, {4, 5}, {2, 3}, {2, 5} составляют остов минимального веса (рис. 15.1,).
Алгоритм Прима отличается от алгоритма Краскала только тем, что на каждом этапе строится не просто ациклический граф, но дерево. Именно:
Выбираем ребро е1 = аb минимального веса и строим дерево T1 полагая VT1 =
= {а, 6}, ЕТ1 = {е1}.
2. Если дерево Ti порядка i +1 уже построено и i<n— 1, то среди ребер, соединяющих вершины этого дерева с вершинами графа G, не входящими в Ti, выбираем ребро ei+1 минимального веса. Строим дерево Ti+1, присоединяя к Ti ребро ei+1 вместе с его не входящим в Тi концом.
Для этого алгоритма также верна теорема 15.1, доказательство которой аналогично приведенному выше.
В некоторых ситуациях требуется построить остов не минимального, а максимального веса. К этой задаче также применимы и алгоритм Краскала, и алгоритм Прима. Следует только всюду минимальный вес заменить максимальным.
С задачей об остове минимального веса тесно связана задача Штейнера. Первоначально она формулировалась сак следующая
Евклидова задача Штейнера: произвольное множество U точек евклидовой плоскости требуется соединить непрерывными линиями так, чтобы любые две точки были связаны либо непосредственно соединяющей их линией, либо через другие точки и соединяющие их линии, и чтобы сумма длин линий была минимальной.
Множеству точек U можно поставить в соответствие полный граф K(U), вершинами которого будут элементы U, а вес каждого ребра будет равен расстоянию между соответствующими точками.
Евклидова задача Штейнера отличается от задачи построения остова минимального веса в графе K(U) тем, что в этот граф разрешается вносить новые вершины — точки Штейнера. Их можно добавлять столько, сколько потребуется, чтобы дерево, их соединяющее, имело минимальный вес.
Если в предыдущей задаче в качестве расстояния между точками (x1, у1) и (x2, y2) взять величину \Х1— Х2\ +\Y1 — Y2\, то получится прямоугольная задача Штейнера. Эта задача сводится к следующей широко известной задаче.
Задача Штейнера на графах, В связном завершенном графе G с выделенным подмножеством вер шин U e VG требуется найти связный подграф Т, удовлетворяющий следующим двум условиям:
множество VT содержит заданное подмножество U;
граф Т имеет минимальный вес среди всех подграфов, удовлетворяющих условию
Очевидно, что искомый подграф является деревом. Он называется деревом Штейнера.
Очевидно также, что задача построения дерева Штейнера эквивалентна задаче нахождения остова минимального веса в порожденных подграфах графа G, множества вершин которых содержат U.
Какие-либо эффективные алгоритмы, решающие задачу Штейнера, неизвестны.