Добавил:
владимир Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
дискра / к_экзамену / 2_Temy_8-12.docx
Скачиваний:
0
Добавлен:
17.08.2025
Размер:
4.84 Mб
Скачать

Тема 10. Деревья.

Дерево, лес, их характеристические свойства.

Опр. Граф называется деревом, если он связный и в нем нет циклов.

Одноэлементный граф, т.е. граф, имеющий одну вершину и не имеющий ребер, также считается деревом.

Граф называется лесом (или ациклическим графом), если в нем нет циклов. Очевидно, что каждая компонента связности леса - дерево.

Деревья обладают рядом характеристических свойств, по наличию или отсутствию каждого их которых в рассматриваемом графе 𝐺 = (𝑉, 𝐸) можно определить, является граф деревом или нет. Перечислим эти свойства:

1) граф 𝐺 - дерево в том и только в том случае, когда в нем нет циклов и |𝐸| = |𝑉| − 1;

2) граф 𝐺 - дерево в том и только в том случае, когда он связный и |𝐸| = |𝑉| − 1;

3) граф 𝐺 - дерево в том и только в том случае, когда он связный, и каждое его ребро является мостом;

4) граф 𝐺 - дерево в том и только в том случае, когда любые две вершины графа 𝐺 можно соединить простой цепью, притом единственной;

5) граф 𝐺 - дерево в том и только в том случае, когда в нем нет циклов и добавление к нему нового ребра приводит к образованию единственного простого цикла.

Одно из характеристических свойств леса: граф 𝐺 = (𝑉, 𝐸), имеющий 𝑘 компонент связности, является лесом в том и только в том случае, когда |𝐸| = |𝑉| − 𝑘.

Остовы графа.

Подграф , графа 𝐺 называется остовным подграфом, если множество его вершин совпадает с множеством вершин графа 𝐺.

Остовом обыкновенного графа называется его остовный подграф, являющийся деревом.

Число остовов в графе с занумерованными вершинами.

Пусть 𝐺 = (𝑉, 𝐸) - связный граф. Если 𝐺 содержит хотя бы один цикл, то удалив из графа 𝐺 некоторое ребро этого цикла, мы уменьшим число циклов графа по крайней мере на единицу, сохранив при этом его связность. Ясно, что, последовательно разрушая циклы данного графа, можно прийти к остову графа. Поскольку дерево с |𝑉| вершинами имеет ровно |𝑉| − 1 ребро, то для получения остова нужно удалить из графа |𝐸| − (|𝑉| − 1) ребро, т.е. число ребер, равное цикломатическому числу 𝜈(𝐺) связного графа 𝐺.

Пусть теперь 𝐺 = (𝑉, 𝐸) - произвольный граф с 𝑘 компонентами связности. Из каждой компоненты связности 𝐺i = (𝑉i , 𝐸i) этого графа удалим |𝐸i| − |𝑉i| + 1 ребро так, чтобы получился остов этой компоненты. В результате получим некоторый остовный лес графа 𝐺. Подсчитаем общее число ребер, которое нам пришлось для этого удалить. Сложив равенства |𝐸i| − |𝑉i| + 1, 1 ≤ 𝑖 ≤ 𝑘, получим:

ki=1(|𝐸i| − |𝑉i| + 1) = ∑ki=1 |𝐸i| − ∑ki=1 |𝑉i| + 𝑘 = |𝐸| − |𝑉| + 𝑘 = 𝜈(𝐺).

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

Пусть 𝐺 - обыкновенный связный граф. Упорядочим множество его вершин 𝑉 = {𝑣1, 𝑣2,..., 𝑣n}. Определим матрицу Кирхгофа 𝐾(𝐺) графа 𝐺, положив:

где 𝐴(𝐺) - матрица смежности графа, соответствующая данному упорядочению вершин.

Справедливы следующие утверждения:

1) алгебраические дополнения всех элементов матрицы Кирхгофа графа равны между собой;

2) число остовов в связном неодноэлементном обыкновенном графе равно алгебраическому дополнению любого элемента его матрицы Кирхгофа.

Алгоритм Краскала отыскания минимального остова.

Взвешенным графом называется граф, на множестве ребер которого задано отображение 𝜌: 𝐸 → [0; +∞), приписывающее каждому ребру 𝑒 неотрицательное число 𝜌(𝑒).

Число 𝜌(𝑒) называется весом ребра 𝑒, число 𝜌(𝐺) = ∑eE𝜌(𝑒) - весом графа 𝐺.

Остов 𝑇 связного взвешенного графа 𝑮 называют минимальным остовом, если для любого остова выполнено неравенство 𝜌(𝑇) ≤ 𝜌( )

Алгоритм: Пусть 𝐺 - связный взвешенный граф.

0-й шаг. Строим остовный подграф 𝑇0 графа 𝐺, множество 𝐸0 ребер которого пусто.

𝑘 -й шаг. Пусть 𝑇k-1 - остовный подграф с множеством ребер 𝐸k-1 = {𝑒1, 𝑒2, . . , 𝑒k-1}, построенный к началу этого шага. Из множества ребер 𝐸\𝐸k-1 выбираем ребро 𝑒k так, чтобы выполнялись два условия:

а) добавление ребра 𝑒k не приводит к образованию циклов;

б) из ребер, удовлетворяющих условию а), ребро 𝑒k обладает наименьшим весом.

После чего повторяем 𝑘 -й шаг.

Кодирование деревьев.

Выделим в дереве какую-нибудь одну вершину, которую назовем корнем. Полученное дерево с выделенной вершиной называется корневым.

Опр. Бинарным кодом корневого дерева с одним ребром является последовательность (01). Пусть деревья 𝑇1 и 𝑇2 с корнями a и b соответственно (рис. 3.40) имеют коды и . Тогда кодом дерева 𝑇3 с корнем с является код (0 1), а кодом дерева 𝑇4 с корнем 𝑐 = 𝑎 = 𝑏 - код ( ).

Чтобы построить корневое дерево по коду из нулей и единиц, нужно разбить последовательность на пары 0 и 1, следуя правилу: первая попавшаяся в коде единица образует пару с предшествующим нулем; каждая следующая единица образует пару с ближайшим слева неиспользованным нулем. Если образованные таким образом пары пометить снизу кода фигурными скобками, то каждая такая скобка будет соответствовать ребру графа.

Для задания деревьев c занумерованными вершинами используют код из натуральных чисел (код Прюфера).

Код Прюфера для дерева с занумерованными вершинами строят следующим образом. Находят висячую вершину с наименьшим номером. Записывают номер смежной с ней вершины (это начало кода), после чего удаляют эту висячую вершину вместе с инцидентным ей ребром. Для полученного в результате данной операции дерева находят висячую вершину с наименьшим номером, записывают номер смежной с ней вершины (это продолжение кода), после чего удаляют эту висячую вершину вместе с инцидентным ей ребром. Так поступают до тех пор, пока не останется последнее ребро (его вершины в код не включают). Полученная в результате описанных действий последовательность и есть код Прюфера. Заметим, что длина этого кода на единицу меньше числа ребер и на две единицы меньше числа вершин дерева.

Построение дерева по коду из натуральных чисел рассмотрим на примере кода [2 2 4 4 6 6]. Прежде всего заметим, что дерево, которое нам предстоит построить, имеет 8 вершин. Будем преобразовывать последовательность 224466, действуя по следующей схеме. Вместо первого числа запишем наименьшее натуральное число, которое в этой последовательности не встречается, т.е. 1; получим последовательность 124466. Вместо второго числа в новой последовательности запишем наименьшее, не встречающееся в ней, т.е. 3; получим последовательность 134466, и т.д. Действуем так до тех пор, пока все числа в исходной последовательности не будут заменены. Расположим все последовательности друг под другом; под последней из них запишем код дерева (см. рис. 3.47). Выпишем пары вершин, записанные друг под другом в последних двух строчках: (12), (32), (24), (54), (46), (76). Каждая такая пара - это пара концов одного из ребер дерева. Этот список дополним парой вершин, отсутствующих в предпоследней строчке, т.е. парой (6,8). Теперь построим дерево: отметим на плоскости точки - вершины дерева и соединим их ребрами согласно списку.

Соседние файлы в папке к_экзамену