- •Глава 4. Деревья
- •§ 1. Определение дерева
- •§ 2. Задача полного перебора всех деревьев данного порядка. Код Прюфера. Теорема Кэли.
- •§ 3. Задача о построении остова минимального веса
- •3.1. Алгоритм Краскала
- •3.2. Алгоритм Прима.
- •§ 4. Метрические характеристики дерева.
- •§ 5. Задача о построении остова наименьшего диаметра.
- •Глава 5. Потоки в сетях
- •§ 1. Потоки и разрезы
- •§ 2. Задача о максимальном потоке
- •§ 3. Поток минимальной стоимости.
- •Глава 6. Применение сетевых методов к решению задач линейного программирования транспортного типа
- •§ 1. Эквивалентность экстремальных задач
- •§ 2. Классическая транспортная задача
- •§ 3. Операции над т-сетями
- •§ 4. Оптимальное планирование вагонопотоков с учетом возврата порожних вагонов
- •Литература
- •Оглавление
3.2. Алгоритм Прима.
В противоположность
алгоритму Краскала алгоритм Прима
образно можно представить как рост
дерева, первоначально посаженного в
произвольную вершину графа, до момента
полного охвата всех вершин графа. Процесс
роста фактически представляет собой
модификацию процедуры (4.1), в которой
каждый раз из имеющегося разреза
выбирается ребро наименьшего веса,
которое затем помещается в множество
.
Алгоритм включает в себя предварительный
шаг
и шаги
,
образующие тело основного цикла,
выполняемого
раз:
Выбираем произвольную
вершину
,
полагаем
.
В качестве
берем пустое множество.
Находим
–
ребро минимального веса, входящее в
разрез
сети
.
(Если имеется несколько ребер минимального
веса, то выбираем любое из них.) Пусть
,
где
.
Полагаем
.
После каждой
итерации
граф
является связным графом без циклов, т.
е. деревом. Поэтому после повторения
итерации
раз
будет представлять собой остов для
исходной сети
.
Доказательство того, что при этом
будет остовом наименьшего веса для сети
,
предоставляется читателю.
На рис. 4.6
проиллюстрирована работа алгоритма
Прима для той же сети, что и на рис. 4.5. В
квадратных скобках указан номер итерации,
в результате которой к строящемуся
остову добавляется соответствующее
ребро. На предварительном шаге был
выбран разрез, в котором
.
Рис. 4.6. Остов минимального веса, построенный при помощи алгоритма Прима.
Основную часть
машинного времени
работы алгоритма Прима занимает время
,
затрачиваемое на выполнение шага
.
Поскольку для поиска минимального
элемента из множества вещественных
чисел, содержащего
элементов в общем случае необходима
операция сравнения, то нетрудно видеть,
что имеет место оценка
,
.
Оптимизация шага
,
в которой отсутствуют повторные
сравнения, позволяет улучшить эту
оценку. Можно показать, что имеет место
оценка
,
,
причем последняя оценка также допускает
улучшение [22].
§ 4. Метрические характеристики дерева.
В этом параграфе
означает неориентированную сеть с
положительными весами,
– число вершин,
– число ребер в графе
.
Так как
– связный граф, то для любых двух вершин
найдётся путь в графе
с концами в этих вершинах. Обозначим
и
соответственно длину и вес кратчайших
путей по числу ребер и весу между
вершинами
и
.
Будем считать, что
и
для любой вершины
.
Поскольку по предположению
для любого
,
функции
и
(частный случай
)
являются метриками
на множестве вершин
,
т. е. удовлетворяют следующим трем
аксиомам:
для любых
,
причем
тогда и только тогда, когда
;
для любых
;
для любых
.
Величина
называется расстоянием
по графу
между
вершинами
и
,
а величина
– расстоянием
по сети
между узлами
и
.
Величины
и
называются соответственно эксцентриситетом
вершины
в графе
и эксцентриситетом
узла
в
сети
.
Будем обозначать
множество узлов сети
,
расстояние от которых до узла
равно эксцентриситету узла
:
.
Величина
называется диаметром
графа
,
а величина
– диаметром
сети
.
Другими словами, диаметр – это величина
максимального из кратчайших путей между
всеми парами вершин (или узлов) графа
(или сети). Эти экстремальные пути
(которых может быть несколько) называются
также
диаметрами,
т. е. слово «диаметр» в теории графов
так же, как и в геометрии, несет двойную
нагрузку. В дальнейшем будем использовать
обозначение
для множества этих путей (от англ. path
– путь).
Величина
называется радиусом
графа
,
а величина
и
– радиусам
сети
.
Узел
,
для которого
,
называется центральным
в сети
.
Аналогично
определяются центральные
вершины в графе
.
Сеть может иметь несколько различных
центральных узлов. Множество всех
центральных узлов называется центром
сети. Будем
обозначать это множество
.
Заметим, что
центральные вершины и узлы не обязательно
лежат на диаметрах. Пусть узлы
являются концами некоторого диаметра,
.
Из неравенства треугольника
имеем оценку
.
Таким образом, для произвольной сети выполняются неравенства
.
(4.10)
Простые примеры
показывают, что как левое, так и правое
равенство в неравенствах (4.10) могут
достигаться в общем случае. Однако если
рассматриваемые граф и сеть являются
деревьями, то левое из этих неравенств
можно усилить, поскольку в этом случае
между любыми двумя узлами существует
единственный путь. Заметим также, что
в случае, когда сеть является деревом
с положительными весами, то для любого
узла
множество
состоит из висячих вершин.
Предложение 4.7.
Пусть
– дерево,
– сеть
с положительными весами,
.
Имеют место неравенства
;
.
Доказательство.
Поскольку
является частным случаем
,
в котором
,
достаточно показать, что имеет место
левое неравенство из неравенств
.
Пусть
,
– путь из
в
по сети
.
Возможны два случая:
1)
,
т. е. путь
содержит более одного ребра. По определению
радиуса сети
.
Пусть
,
–
путь из узла
в узел
по сети
.
Поскольку для любого узла
,
то
.
Если бы ребро
не входило в путь
,
то было бы справедливо неравенство
,
которое на самом
деле не может иметь места, поскольку
.
Таким образом,
.
Следовательно, путь
от узла
до узла
имеет вид
.
Для веса пути имеем оценку
,
Поэтому
,
откуда вытекает .
2)
.
В этом случае имеем оценку
.
Поскольку для любой сети имеет место
неравенство
,
то также выполняются неравенства
.
■
Предложение 4.8.
Пусть
– дерево,
– сеть
с положительными весами. Тогда множество
состоит либо из одного, либо из двух
смежных узлов.
Доказательство.
Покажем, что два любых различных
центральных узла являются смежными.
Пусть
,
– простая цепь с концами в этих узлах.
Доказательство
проведем от противного. Предположим,
что
содержит более одного ребра. Пусть
.
Поскольку любые два узла могут быть
соединены единственной простой цепью,
а веса ребер строго положительны, то
нетрудно видеть, что для любого узла
выполняется, по крайней мере, одно из
неравенств
или
.
Отсюда вытекает неравенство
,
противоречащее определению радиуса.
Итак, два любых различных центральных узла являются смежными. Но тогда их не может быть два, поскольку в графе отсутствуют циклы. ■
На рис. 4.7 и 4.8 приведены примеры деревьев с одним и двумя центральными вершинами.
Рис. 4.7. Дерево с одной централной Рис. 4.8. Дерево с двумя центральными
вершиной. вершинами.
Предложение 4.9. Пусть – дерево, – сеть с положительными весами. Тогда множество содержится в множестве узлов любого из диаметров сети , т. е.
.
(4.11)
Доказательство
проведем от противного. Пусть узлы
являются концами некоторого диаметра
,
но при этом
.
Рассмотрим простые цепи
и
,
соединяющие узел
с узлами
и
соответственно. Поскольку узлы
и
являются висячими, то, начиная с некоторого
узла
,
путь
проходит по диаметру
.
То же самое касается и пути
,
причем первый узел этого пути, лежащий
на диаметре
– это тот же узел
,
поскольку граф
не содержит циклов. Следовательно, пути
и
имеют общую часть
,
а пути
и
разбивают диаметр
на части, имеющие единственный общий
узел
(рис. 4.9). Обозначим
,
,
.
Пусть для определенности
.
Так как
,
,
имеем
.
Таким образом, по предположению
.
Рис 4.9. Иллюстрация к доказательству предложения 4.9.
Оценим расстояния
от узла
до остальных узлов сети, предварительно
заметив, что
.
Если узел
таков, что
,
то
,
поскольку в противном случае мы получили
бы неравенство
,
которое невозможно. Следовательно,
Если узел
таков, что цепь
имеет несколько общих ребер с цепью
,
то
,
так как в противном случае мы имели бы
,
что невозможно.
Наконец, если узел
таков, что цепь
включает в себя цепь
,
то
.
Таким образом
,
что невозможно. Полученное противоречие
доказывает, что на самом деле
,
что и требовалось доказать. ■
Лемма 4.1. Пусть
– дерево,
– простые цепи с концами в вершинах
соответственно.
Тогда найдется
вершина, общая для этих цепей.
Доказательство.
В случае совпадения двух или всех трех
рассматриваемых вершин утверждение
леммы очевидно. Пусть
– попарно различные вершины. Если
выполняется хотя бы одно из включений
то утверждение леммы выполнено.
Пусть
.
Если бы выполнялись соотношения
и
,
то конкатенация
цепей
образовывала бы цикл, что невозможно.
Пусть нарушается
первое из этих соотношений. Это означает,
что для некоторой вершины
цепь
имеет вид
,
причем, не нарушая
общности, можно считать, что
– первая из вершин множества
на этом пути. Но тогда цепь
имеет вид
,
т. е.
,
что и требовалось доказать. ■
Предложение
4.10. Пусть
– дерево,
– сеть
с положительными весами,
– простая цепь с концами
и
.
Тогда
– диаметр сети
.
Доказательство.
Согласно лемме 4.1, цепи
и
имеют общую часть. Пусть
– последний
из их общих узлов при обходах
и
,
Пусть
– два различных узла сети
.
Обозначим через
– последний из общих узлов цепей
и
при их обходах
и
.
Введем так же следующие обозначения:
(рис. 4.10).
Рис. 4.10. Иллюстрация к доказательству предложения 4.10.
Обход цепи имеет один из двух видов:
или
.
1. Пусть
.
(см. рис. 4.10). Так как по условию
,
имеем
,
а поскольку
,
то
.
Сложив эти неравенства, получим
,
т. е.
.
2. Пусть
.
Действуя аналогично, получим неравенства
и
,
после сложения которых получим
,
т. е.
.
Случай, когда один
или несколько узлов множества
совпадают, сводится к одному из этих
двух случаев при дополнительном условии
равенства нулю соответствующих
расстояний. Таким образом, для любых
узлов
,
т. е.
,
что и требовалось доказать. ■
В заключение
параграфа рассмотрим некоторые алгоритмы
вычисления метрических характеристик
дерева. Для определенности будем считать,
что узлы дерева занумерованы числами
,
а соответствующая сеть задана матрицей
весов
3).
Поскольку по матрице весов легко найти
матрицу смежности, то для простоты будем
считать, что на вход каждого алгоритма
подается также и матрица смежности
.
При вычислении
эксцентриситета некоторой вершины
удобно предварительно построить корневое
дерево, в котором вершина
является корнем, а затем использовать
рекурсивную процедуру нахождения
эксцентриситета корня в корневом дереве,
описываемую далее.
Ориентация дерева
может быть осуществлена с помощью
следующего простого алгоритма. На вход
алгоритма подаются матрица
и число
,
на выходе алгоритма получаем матрицу
смежности
корневого дерева. Одномерный массив
(очередь) содержит номера вершин, к
которым необходимо применить шаги
основного цикла (WHILE
– цикла), будем обозначать через
текущую вершину. Приводим реализацию
этого алгоритма в виде функции системы
MATLAB:
function Tr=rooting(T,r);
%T - матрица смежности неориентированного дерева, r - корень,Tr - матрица %смежности ордеерева, для которого r – корень.
Tr=T;Q=[r];
while ~isempty(Q)
q=Q(1);Q=Q(2:end);
J=find(Tr(q,:));
if ~isempty(J)
Tr(J,q)=0;
Q=[Q J];
end
end
Очевидно, что в процессе выполнения этого алгоритма каждая вершина дерева посещает очередь только один раз, следовательно, время работы указанного алгоритма линейно растет с ростом .
Пусть
обозначает взвешенное корневое дерево.
Рекурсивная процедура вычисления эксцентриситета корня в корневом дереве основана на очевидном соотношении
.
(4.12)
Она может быть реализована в виде следующей функции системы MATLAB
function eps= ecc_net(W,r);
ch=find(T(r,:)<inf);
if isempty(ch)
eps=0;
else
for i=1:length(ch)
ee(i)=ecc_net(W,ch(i))+W(r,ch(i));
end
eps=max(ee);
end
В процессе выполнения этого алгоритма каждая вершина обрабатывается только один раз, так что время его работы линейно растет с ростом порядка дерева. Несложная модификация этой функции позволяет кроме получения численного значения эксцентриситета построить также путь к вершине, наиболее удаленной от вершины .
Предложение 4.10 позволяет с помощью функции построения эксцентриситета находить и диаметр сети, а, опираясь на предложение 4.9, можно построить простую процедуру просмотра диаметра, которая позволяет находить центры дерева.
Резюмируя сказанное,
можно сделать вывод, что метрические
характеристики дерева могут быть
вычислены при помощи алгоритмов, время
работы которых имеет порядок
при
.
В заключение параграфа заметим, что, используя алгоритмы нахождения кратчайших путей, рассмотренные в главе 2, можно вычислять и метрические характеристики произвольной сети. Однако в общем случае время работы соответствующих алгоритмов нелинейно растет с ростом порядка сети.
