Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лек_ 3_графы_деревья.doc
Скачиваний:
9
Добавлен:
21.11.2019
Размер:
139.78 Кб
Скачать

§ 10. Остов минимального веса

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

Пусть G = (V, E)  граф, w: E R  вещественная функция, ставящая, в соответствие каждому ребру e число w(e)  вес ребра e.

Пара <G, w> называется взвешенным (или нагруженным) графом. Весом любого подграфа взвешенного графа называется сумма весов его ребер.

Рассмотрим следующую задачу: проектируется сеть шоссейных дорог, связывающих 5 населённых пунктов. Известна стоимость строительства любой дороги, соединяющих два пункта. Нужно построить самую дешёвую сеть, по которой можно проехать из любого пункта в любой другой (рис. 9.3).

рис. 10.1

Данный граф является полным графом порядка 5. В этой ситуации заданные пункты можно считать вершинами с весами рёбер, равными стоимости строительства дорог, соединяющих эти пункты (указаны в кружках). Тогда искомая сеть будет остовом минимального веса этого графа. Остов связного графа является деревом. Поскольку полный помеченный граф Кn по теореме Кэли содержит nn2 различных остовных деревьев (для графа на рис. 9.3 число остовов 53 =125), то решение этой задачи полным перебором вариантов потребовало бы чрезвычайно больших вычислений даже при относительно малых n. Однако для её решения имеются эффективные алгоритмы. Рассмотрим два из них  алгоритмы Д. Краскала (1956 г.), и Р. Прима (1957 г.), применимые к произвольному связному графу.

Алгоритм Краскала, решающий эту задачу, заключается в следующем:

1. Строится подграф Т1=Оn + e1, где Оn  пустой остовный подграф в G, e1 – ребро минимального веса.

2. Если построен подграф Тi, содержащий i рёбер, где i<n-1 то строится ациклический подграф Тi+1= Тi + ei+1, где ei+1рёбро графа G, имеющее минимальный вес среди ребер, не входящих в Тi и не образующий циклов с рёбрами из Тi.

Следующая теорема утверждает, что жадный алгоритм Краскала всегда приводит к остову минимального веса.

Теорема 10.1. При i<n1 граф Тi+1 можно построить. Граф Тn1 является остовом минимального веса во взвешенном графе <G,w>.

Подграф Тi имеет ровно i рёбер и n вершин и потому при i < n1 является несвязным. А так как граф G связен, то в нём есть по крайнеё мере одно ребро, не составляющее циклов с рёбрами графа Тi. Итак, нужное ребро ei+1 существует и граф Тi+1 можно построить.

Рассмотрим граф Тn-1. Поскольку Тn1 является (n, n1)графом без циклов, то по теореме 9.1 является деревом. Докажем, что Тn-1  остов минимального веса. Предположим противное. Среди всех остовов графа G минимального веса выберем такой остов Т, который имеет с деревом Тn1 максимальное число общих рёбер. Пусть ei = (а,в) ребро дерева Тn-1, не содержащееся в Т и имеющее минимальный номер среди рёбер дерева Тn-1, не входящих в Т (в процессе построения дерева Тn-1 его рёбра получили номера 1,2,…,n1). В дереве Т есть простая (а,в) цепь. Присоединив к ней ребро еi , получим цикл. В этом цикле есть ребро е, не входящее в дерево Тn-1 (иначе в Тn-1 был бы цикл). Заменив в дереве Т ребро е на еi, получим новый остов Т = Т – е + еi. Но Т  остов минимального веса, следовательно, w(Т) = w(T) + w(ei)  w(e) ≥ w(T), т.е. w(ei)w(e) (1). С другой стороны, присоединяя ребро е к Тi1 (при i=1 полагаем Тi1 = Оn), мы не получим цикла, поскольку рёбра е1,е2,…, еi-1, е входят в дерево Т, и потому, если бы вес w(ei) был больше, чем w(e), мы взяли бы при построении дерева Тi ребро е вместо ei. Из (1) теперь следует, что w(ei)= w(e), w(Т)= w(Т).

Итак, Т' - остов минимального веса. Число рёбер, общих для деревьев Т' и Тn1, больше, чем число рёбер, общих для Т и Тn1, что противоречит выбору дерева Т. Полученное противоречие и доказывает теорему.

Теперь зная алгоритм, решим задачу. На каждом шаге будем строить ациклический подграф с 5 вершинами (n=5), значит будет n1 = 4 шага (рис. 9.3). На первом шаге выбираем e1 = (1,5), на втором  e2 = (2,4), на третьем  e3 = (1,3)

и на четвертом  e4 = (5,4). Рёбра (1,5), (2,4), (1,3), (4,5) составляют остов минимального веса. Вес остова Тn1 равен:

w(Тn-1) = 1+2+3+4 = 10. Таким образом, эта сеть дорог (рис.9.3 (4)) будет самой дешёвой и ее строительство обойдётся в 10 условных единиц.

Алгоритм Прима отличается от алгоритма Краскала только тем, что на каждом шаге строится не просто ациклический подграф, а дерево:

1. Выбираем ребро e1 = (a,b) минимального веса и строим дерево D1 = e1.

2. Если дерево Di, содержащее i ребер порядка i + 1, уже построено , и i < n  1, то среди ребер, соединяющих вершины этого дерева с вершинами графа G, не входящими в Di, выбираем ребро ei+1 минимального веса и строим дерево Di+1 = Di ei+1 (рис.9.4).

Для алгоритма Прима также верна теорема 10.1.

Теорема. Алгоритм Краскала строит минимальный остов (n,m)-графа G за время O(m×n).

Доказательство: в алгоритме Краскала n - 1 шагов; на каждом шаге разыскивается ребро минимального веса из некоторого списка ребер, содержащего не более m ребер, поэтому число операций кратно m×n.