Глава 10  | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	Деревья  | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	.  | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	П  | 
	   | 
	10.1 Определение и свойства деревьев  | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	.  | 
	   | 
	.  | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	В  | 
	   | 
	   | 
	Определение 10.1. Дерево - это связный граф без циклов.  | 
	Лес - граф, компонентами которого являются деревья.  | 
	   | 
	Барашев  | 
	   | 
	   | 
	   | 
	   | 
	   | 
	А  | 
	   | 
	   | 
	   | 
	   | 
	   | 
	.  | 
	   | 
	Пример 10.1.  | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	а) Граф G1 - дерево  | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	s  | 
	   | 
	@s  | 
	s  | 
	   | 
	   | 
	HsУнучекs Hs  | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	@s  | 
	   | 
	Z  | 
	   | 
	   | 
	s  | 
	   | 
	   | 
	   | 
	   | 
	   | 
	s  | 
	   | 
	@@s   | 
	   | 
	s  | 
	ZZZ  | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	s  | 
	   | 
	G1  | 
	   | 
	s  | 
	   | 
	   | 
	s  | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	МИРЭА  | 
	   | 
	б) G2 - лес, состоящий из 4 компонентов (деревьев)  | 
	   | 
	   | 
	   | 
	sHHHH  | 
	s  | 
	   | 
	   | 
	sHHHH s  | 
	   | 
	   | 
	@s  | 
	@  | 
	   | 
	Hs  | 
	HH  | 
	   | 
	   | 
	   | 
	Hs HH  | 
	   | 
	   | 
	   | 
	   | 
	@  | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	G2  | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
 
 
в) Граф G3 не является деревом (граф содержит цикл из трех вершин, так называемый "треугольник").
 
 
 
	   | 
	   | 
	   | 
	   | 
	s  | 
	   | 
	   | 
	@s  | 
	Z  | 
	   | 
	   | 
	s  | 
	@@s   | 
	s  | 
	ZZZ  | 
	   | 
	   | 
	   | 
	s  | 
	G3  | 
	   | 
	   | 
	s  | 
Понятие дерева широко используется во многих областях математики и информатики. Например, как инструмент при вычислениях в
Доказательство.
	теории множеств и теории вероятностей , как удобный способ хранения  | 
	данных, способ сортировки или поиска данных.  | 
	.  | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	П  | 
	   | 
	Лес и дерево обладают многими важными свойствами.  | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	.  | 
	   | 
	Определение 10.2. Ребро графа, удаление которого увеличивает ко-  | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	В  | 
	   | 
	   | 
	личество компонент связности графа, называется мостом.  | 
	Пример 10.2.  | 
	   | 
	   | 
	   | 
	   | 
	   | 
	.  | 
	v1  | 
	v5  | 
	С  | 
	   | 
	   | 
	   | 
	sHHH v3  | 
	v4   | 
	   | 
	s  | 
	   | 
	.А  | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	H  | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	s  | 
	sHHHH  | 
	   | 
	   | 
	Ребро {v3, v4} - мост.  | 
	v  | 
	   | 
	s2  | 
	v  | 
	   | 
	s6  | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	чающий в себяУнучекребро ei. Удалив ребро ei, заменим его на после-  | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	МИРЭА  | 
	   | 
Лемма. БарашевРебро в графе является мостом тогда, и только тогда, когда оно не входит ни в один цикл.
Необходимость. Пусть некоторое ребро ei является мостом. Докажем, что не существует цикла, содержащего данное ребро.
Предположим, что это не так, то есть существует цикл, вклю-
довательность ребер, образующих цикл вместе с данным ребром. Любые две вершины, входящие в компоненту связности, которой принадлежит ei, остаются связными, число компонент связности не увеличивается, что противоречит определению моста.
 
 
 
Достаточность. Пусть некоторое ребро ei не входит ни в один цикл. Допустим, что при удалении данного ребра его концы остаются связными. Это говорит о том, что существует маршрут, соединяющий оба конца. Объединим этот маршрут и ребро ei. Получили цикл, что противоречит условию леммы.
Теорема 10.1. Граф является лесом тогда, и только тогда, когда
	каждое ребро графа - мост.  | 
	П  | 
	   | 
	   | 
	   | 
	Доказательство. По определению, лес - граф без циклов.. Значит, ни  | 
	.  | 
	   | 
	одно ребро не входит ни в какой цикл, то есть все ребра - мосты.  | 
	В  | 
	   | 
	.  | 
	Теорема 10.2. Граф G является деревом тогда и только тогда, ко-  | 
	гда любые две его вершины соединены ровно одной простой цепью.  | 
	Барашев  | 
	   | 
	Доказательство.  | 
	   | 
	С  | 
	Необходимость. Пусть G - дерево. Докажем, что.любыеАего две вер-  | 
	шины vi и vj соединены ровно одной простой цепью.  | 
	В силу связности дерева существует хотя бы один маршрут из vi  | 
	   | 
	Унучек  | 
	   | 
	в vj. Предположим, что таких путей по меньшей мере два. Объ-  | 
	единив маршруты, получаем цикл - противоречие с определением  | 
	дерева.  | 
	МИРЭА  | 
Достаточность. Докажем, что, если в графе G любые две вершины vi и vj соединены ровно одной простой цепью, то G - дерево.
Так как любые две вершины графа соединены цепью, то, в силу теоремы 9.4, граф связен.
Если бы в графе был цикл, то любые две вершины этого цикла соединялись по крайней мере двумя простыми цепями. Значит, G не содержит циклов и связен. По определению G - дерево.
Теорема 10.3. В каждом дереве число вершин на единицу больше числа ребер.
 
 
 
Доказательство. Пусть G - дерево с n вершинами.
Согласно теореме 10.1 каждое ребро дерева является мостом. Удаление каждого моста, согласно определению 10.2, увеличивает количество компонент связности на 1.
Так как дерево - связный граф, то исходный граф G имеет одну компоненту связности. Удалив любое ребро, получаем 2 компоненты связности. Удалив 2 моста, имеем 3 компоненты связности. В общем случае, удалив i ребер, получаем i + 1 компоненту связности.
И так далее, удалив все мосты, получаем n компонент связности - изолированных вершин. Значит, процедуру удаления применяли к
	n −1 мосту. Таким образом, в исходном графе  | 
	П  | 
	   | 
	G было.n −1  | 
	ребро.  | 
	   | 
	.  | 
	   | 
	Остальные свойства деревьев сформулируем в следующей теоре-  | 
	ме, которая дается без доказательства.  | 
	В  | 
	А  | 
	   | 
	   | 
	   | 
	   | 
	Теорема 10.4. Для графа G с n вершинами следующие утверждения  | 
	эквивалентны:  | 
	.  | 
1.G - дерево;
2.G не содержит циклов и имеет n − 1 ребро;
3.G связен и имеет n − 1 ребро;
4.G связен и каждое его ребро является мостом;
5.G не содержит циклов, но добавление любого ребра приводит к образованию ровно одного цикла.Барашев .
Следствие 10.4.1.УнучекВ дереве,МИРЭАсодержащем не менее двух вершин, по крайней мере две вершины являются висячими.
10.2 Остовные деревья
Определение 10.3. Остовом (остовным деревом) графа G называется подграф T , являющийся деревом и содержащий все вершины графа G.
 
 
 
Пример 10.3.
	s  | 
	s  | 
	s  | 
	s  | 
	s  | 
	s  | 
	s  | 
	s  | 
	s  | 
	s  | 
	s  | 
	s  | 
	s  | 
	s  | 
	s  | 
	s  | 
	s  | 
	s  | 
	s  | 
	s  | 
	s  | 
	s  | 
	s  | 
	s  | 
	s  | 
	s  | 
	s  | 
	s  | 
	s  | 
	s  | 
	s  | 
	s  | 
	s  | 
	s  | 
	s  | 
	s  | 
	G  | 
	T1  | 
	T2  | 
	T3  | 
	Деревья T1, T2 и T3 - остовы графа G.  | 
	   | 
	.  | 
	Теорема 10.5. У каждого связного графа G существует подграф T ,  | 
	   | 
	   | 
	   | 
	П  | 
	который является остовным деревом.  | 
	.  | 
	Доказательство. Пусть граф G содержитВцикл. Если ребро.{vi, vj}  | 
	входит в цикл, то существует по крайней мере два маршрута из vi в  | 
	vj. Удалим ребро {vi, vj}, маршрут из vi в vj  | 
	все равно существует.  | 
	   | 
	   | 
	   | 
	А  | 
	Если, после удаления ребра, граф еще содержит.цикл, удалим ребро  | 
	{vk, vs}, входящее в цикл. Будем удалять ребра, пока все циклы не  | 
	   | 
	С  | 
	Весом графаБарашевG =< V, E > называют сумму весов всех его ребер:  | 
	будут удалены. Поскольку количество ребер в графе конечно, процесс  | 
	Унучек∑  | 
	удаления также конечен.  | 
	   | 
	В итоге получим связный граф без циклов, то есть дерево.  | 
	   | 
	МИРЭА  | 
Определение 10.4. Граф называется взвешенным, если каждому его ребру e поставлено в соответствие неотрицательное число λ(e) -
вес ребра.
λ(G) = λ(e)
e E
Если бы вершины графа обозначали города, то вес ребра мог бы означать расстояние между городами, стоимость проезда и т.п. .
Определение 10.5. Минимальным остовом графа G называется остов, вес которого меньше или равен весу любого другого остовного дерева графа G.
 
 
Рассмотрим задачу.
Имеется n пунктов, которые объединяют в единую телефонную сеть. Для любых двух пунктов vi и vj известна стоимость прокладки кабеля lij. Требуется проложить кабель таким образом, чтобы любые два пункта имели телефонную связь, и при этом суммарная стоимость прокладки кабеля была бы минимальной.
Эту задачу удобно решать с помощью графов. Очевидно, что искомая схема будет соответствовать минимальному остову в полном гра-
	фе с n вершинами. На языке графов задачу можно сформулировать  | 
	   | 
	   | 
	   | 
	.  | 
	следующим образом: в данном полном графе найти остов, имеющий  | 
	наименьший вес.  | 
	   | 
	П  | 
	   | 
	   | 
	.  | 
	   | 
	   | 
	Существует несколько методов построения минимального остова  | 
	   | 
	В  | 
	   | 
	   | 
	.  | 
	простого связного взвешенного (не обязательно полного) графа G. Мы  | 
	рассмотрим два из них - алгоритмы Краскала и Прима.  | 
	   | 
	   | 
	   | 
	   | 
	А  | 
	10.2.1 Алгоритм Краскала построения минимального остова  | 
	в графе  | 
	   | 
	.  | 
	   | 
	С  | 
	   | 
	   | 
	   | 
	   | 
	   | 
Идея метода состоит в том, чтобы создавать дерево T , выбирая ребра
снаименьшим весом так, чтобы не возникал цикл.
1.Упорядочим ребра в порядке возрастания их весов.
2.Включаем в остов все вершины исходного графа.
3.Включаем в остов T первое ребро из списка.
4.Включаем в T следующие в списке ребра заданного графа, не образующие циклов с уже включенными в остов ребрами.
Алгоритм заканчивается, когда в остов включено n − 1 ребро (n - количество вершин в исходном графе).БарашевМИРЭАУнучек
10.2.2Алгоритм Прима построения минимального остова в графе
Алгоритм похож на предыдущий; различие состоит в том, что строим последовательность деревьев, увеличивая на каждом шаге количество вершин в дереве.
 
 
1. Возьмем произвольную вершину v1 из множества вершин графа V . Из всех ребер, смежных с v1, возьмем ребро с наименьшим весом. Сформируем дерево T1.
2. Пусть дерево Tk уже сформировано. Если имеется вершина, не принадлежащая Tk, выбираем ребро с наименьшим весом, смежное с ребром дерева Tk. Получили дерево Tk+1.
	3. Предыдущий шаг продолжаем, пока есть вершины графа, не при-  | 
	надлежащие остову (то есть до тех пор, пока граф не станет связ-  | 
	ным).  | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	.  | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	П  | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	.  | 
	   | 
	Пример 10.4. Построить минимальный остов графа, изображенного  | 
	на рисунке, используя:  | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	В  | 
	   | 
	.  | 
	а) алгоритм Краскала;  | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	А  | 
	Барашев  | 
	   | 
	б) алгоритм Прима.  | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	.  | 
	   | 
	   | 
	2 @s  | 
	   | 
	5  | 
	   | 
	5 @s  | 
	   | 
	   | 
	   | 
	@4  | 
	@s  | 
	   | 
	@2  | 
	   | 
	   | 
	   | 
	s@ 2  | 
	s  | 
	@  | 
	   | 
	4  | 
	Сs  | 
	   | 
	   | 
	   | 
	   | 
	3  | 
	   | 
	   | 
	   | 
	@  | 
	   | 
	   | 
	Унучек  | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	@  | 
	   | 
	   | 
	   | 
	   | 
	   | 
	@  | 
	   | 
	@  | 
	   | 
	   | 
	   | 
	4  | 
	   | 
	@  | 
	3  | 
	   | 
	4  | 
	   | 
	   | 
	3  | 
	@  | 
	3  | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	@  | 
	   | 
	   | 
	   | 
	   | 
	@МИРЭА4 @ 4  | 
	   | 
	   | 
	   | 
	   | 
	@s  | 
	   | 
	5  | 
	   | 
	   | 
	@s  | 
	   | 
	   | 
	   | 
G
Решение.
Сначала для удобства обозначим вершины графа. Порядок нумера-
	ции вершин не важен.  | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	v1  | 
	   | 
	5  | 
	   | 
	v5  | 
	   | 
	   | 
	   | 
	   | 
	2 @s  | 
	   | 
	5 @s  | 
	   | 
	   | 
	   | 
	   | 
	@4  | 
	   | 
	@2  | 
	   | 
	   | 
	   | 
	   | 
	3  | 
	@@   | 
	   | 
	   | 
	@@  | 
	   | 
	   | 
	v0 s@  | 
	2  | 
	   | 
	sv2  | 
	v  | 
	4  | 
	   | 
	v  | 
	   | 
	   | 
	   | 
	@s  | 
	4  | 
	s  | 
	7  | 
	   | 
	3  | 
	@  | 
	3  | 
	   | 
	   | 
	   | 
	3  | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	@  | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	@  | 
	   | 
	   | 
	   | 
	@  | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	v  | 
	s3  | 
	   | 
	5  | 
	   | 
	v  | 
	s6  | 
	   | 
	   | 
	   | 
G
 
 
а) Алгоритм Краскала.
1.Выписываем ребра в порядке возрастания их длин: Ребра длины 2: {v0, v1}, {v0, v2}, {v5, v7};
Ребра длины 3: {v0, v3}, {v1, v2}, {v2, v3}, {v4, v6}; Ребра длины 4: {v1, v4}, {v3, v4}, {v5, v6}, {v6, v7};
Ребра длины 5: {v1, v5}, {v3, v6}, {v4, v5}.
2.Включаем в остов все восемь вершин графа.
	   | 
	vs1  | 
	   | 
	vs5 .  | 
	v0 s  | 
	sv2  | 
	sv4  | 
	.Пsv7  | 
	   | 
	   | 
	В  | 
	   | 
	   | 
	vs3  | 
	   | 
	vs6 .  | 
	   | 
	   | 
	   | 
	   | 
	А  | 
	4. ВключаемБарашевв T ребра {v0, v2} и {v5, v7}, так как они не образу-  | 
	3. Включаем в остов ребро {v0, v1  | 
	   | 
	.  | 
	} - первое ребро из списка.  | 
	2  | 
	s  | 
	   | 
	С  | 
	   | 
	   | 
	   | 
	s  | 
	   | 
	   | 
	v1  | 
	   | 
	v5  | 
	   | 
	Унучек  | 
	   | 
	sv7  | 
	v0 s   | 
	sv2  | 
	sv4  | 
	   | 
	v0МИРЭАs 2 sv2 sv4 @sv7  | 
	   | 
	vs3  | 
	   | 
	vs6  | 
	   | 
ют цикла с ребром {v0, v1}. Количество ребер в дереве равно 3.
 
 
5.Ребро {v0, v3} длины 3 также включаем в остов. Количество ребер 4.
	   | 
	   | 
	v1  | 
	   | 
	v5  | 
	   | 
	   | 
	   | 
	   | 
	2 s  | 
	   | 
	s@@2  | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	@@  | 
	   | 
	v0  | 
	s@@2  | 
	   | 
	sv2  | 
	sv4  | 
	   | 
	sv7  | 
	   | 
	   | 
	   | 
	   | 
	3@  | 
	vs3  | 
	   | 
	vs6  | 
	   | 
	   | 
	   | 
	   | 
	   | 
	@  | 
	   | 
	   | 
	   | 
	   | 
	.  | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
6. Ребра {v1, v2} и {v2, v3} в остов не включаем, так как они
образуют циклы с уже включенными в дерево ребрами. Ребро
	   | 
	   | 
	   | 
	В .  | 
	{v4, v6} не образует цикла с ребрами.изПT , включаем его в  | 
	остов. Количество ребер в T равно пяти.  | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	@ А  | 
	Барашев  | 
	   | 
	   | 
	v5  | 
	   | 
	   | 
	   | 
	v1  | 
	   | 
	   | 
	.  | 
	2 s  | 
	   | 
	   | 
	   | 
	s@@2  | 
	   | 
	2  | 
	sv2  | 
	v  | 
	   | 
	С  | 
	@ v  | 
	v0 s@@  | 
	   | 
	s@@4  | 
	3  | 
	   | 
	   | 
	   | 
	s 7  | 
	3  | 
	vs3  | 
	   | 
	vs6  | 
	   | 
	   | 
	   | 
	@  | 
	   | 
	   | 
	@  | 
	   | 
	   | 
	   | 
	   | 
	@  | 
	   | 
	   | 
	   | 
	@  | 
	   | 
	   | 
	   | 
7.Ребро {v1, v4} длины 3 включаем в остов, а ребро {v3, v4} - нет (образуется цикл). Ребро {v5, v6} включаем в остов.
	Унучек  | 
	   | 
	   | 
	   | 
	МИРЭА  | 
	   | 
	   | 
	   | 
	v1  | 
	   | 
	   | 
	v5  | 
	   | 
	   | 
	   | 
	2 s@@4  | 
	   | 
	   | 
	s@@2  | 
	   | 
	   | 
	   | 
	   | 
	   | 
	sv2  | 
	@  | 
	@ v  | 
	@  | 
	@ v  | 
	   | 
	2  | 
	   | 
	   | 
	   | 
	v0 s@@  | 
	   | 
	   | 
	s@@4  | 
	4  | 
	s 7  | 
	   | 
	   | 
	3  | 
	vs3  | 
	   | 
	   | 
	3  | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	   | 
	vs6  | 
	   | 
	   | 
	   | 
	   | 
	@@  | 
	   | 
	   | 
	   | 
	@@  | 
	   | 
	   | 
T
Количество ребер на данном этапе работы алгоритма равно 7, что ровно на единицу меньше, чем количество вершин. Ал-