Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекции по МОТС / ДИСКРЕТНАЯ МАТЕМАТИКА Графы.doc
Скачиваний:
377
Добавлен:
15.02.2014
Размер:
3.38 Mб
Скачать

9.5. Кратчайший остов

Задача отыскания кратчайшего остова графа является классической задачей тео­рии графов. Методы решения этой задачи послужили основой для многих других важных результатов. В частности, исследования алгоритма Краскала, описанно­го в подразделе 9.5.3, привели в конечном счете к теории жадных алгоритмов, изложенной в разделе 2.7.5.

9.5.1. Определения

Пусть G(V, Е) — граф. Остовной подграф графа G(V, Е) — это подграф, содержа­щий все вершины. Остовный подграф, являющийся деревом, называется осто­вом.

ЗАМЕЧАНИЕ

Остов определяется множеством ребер, поскольку вершины остова суть вершины графа.

Несвязный граф не имеет остова. Связный граф может иметь много остовов.

ОТСТУПЛЕНИЕ

Если задать длины ребер, то можно поставить задачу нахождения кратчайшего остова. Эта задача имеет множество практических интерпретаций. Например, пусть задано множество аэродромов и нужно определить минимальный (по сумме расстояний) набор авиарейсов, который позволил бы перелететь с любого аэродрома на любой другой. Решением этой задачи будет кратчайший остов полного графа расстояний между аэродромами.

ЗАМЕЧАНИЕ

Существует множество различных способов найти какой-то остов графа. Например, алго­ритм поиска в глубину строит остов (по ребрам возврата). Множество кратчайших путей из заданной вершины ко всем остальным также образует остов. Однако этот остов может не быть кратчайшим.

Пример

На рис. 9.14 показаны диаграммы (слева направо) графа, дерева кратчайших путей из вершины 1 с суммарным весом 5 и два кратчайших остова этого графа.

Рис. 9.14. Граф, дерево кратчайших путей и два кратчайших остова

9.5.2. Схема алгоритма построения кратчайшего остова

Рассмотрим следующую схему алгоритма построения кратчайшего остова. Пусть Т — множество непересекающихся деревьев, являющихся подграфами графа G. Вначале Т состоит из отдельных вершин графа G, в конце Т содержит един­ственный элемент — кратчайший остов графа G.

Алгоритм 9.6. Построение кратчайшего остова

Вход: граф G(V, E), заданный матрицей длин ребер С.

Выход: кратчайший остов Т.

T: = V

while в Т больше одного элемента do

взять любое поддерево из Т

найти к нему ближайшее

соединить эти деревья в Т

end while

ТЕОРЕМА Алгоритм 9.6 строит кратчайший остов.

доказательство

Пусть Ti и Tj — два произвольных поддерева G, Тi  Tj  0. Положим

i,j:= .

Так как с самого начала все вершины G покрыты деревьями из Т, то i,j всегда реализуется на некотором ребре с длиной ci,j. Далее индукцией по шагам алго­ритма 9.6 покажем, что все ребра, включенные в Т, принадлежат кратчайшему остову — SST. Вначале выбранных ребер нет, поэтому их множество включа­ется в кратчайший остов. Пусть теперь все ребра, добавленные в Т, принадлежат SST. Рассмотрим очередной шаг алгоритма. Пусть на этом шаге добавлено ребро (i, j), соединяющее поддерево Тi с поддеревом Tj. Если (i, j)  SST, то, посколь­ку SST является деревом и, стало быть, связен, (i*, j*)  SST, соединяющее Ti с остальной частью SST. Тогда удалим из SST ребро (i*, j*) и добавим ребро (i, j): SST’ : = SST- (i*, j*) + (i, j). Полученный подграф SST’ является остовом, причем более коротким, чем SST, что противоречит выбору SST. 

ЗАМЕЧАНИЕ

Различные способы выбора поддерева для наращивания на первом шаге тела цикла дают различные конкретные варианты алгоритма построения SST.