Короткі теоретичні відомості

Теорія графів.

Лабораторна робота №5.

Тема. Представлення дерев.

Мета. Використовуючи довільну мову програмування, побудувати модель бінарного дерева через список суміжностей і символ дерева (код Прюфера).

Короткі теоретичні відомості.

Дерева у прикладній теорії графів відіграють важливу роль у програмуванні, теорії інформаційних систем, електротехніці, хімії і т.п. Клас алгоритмів на деревах становить одних з найважливіших і найвикористовуваніших у програмуванні класів алгоритмів теорії графів.

 
 

Деревом називається зв’язний граф без циклів. Дерево називається кореневим, якщо у ньому виділена вершина, що називається коренем. Орієнтованим деревом з коренем r називається кореневе дерево, у котрому кожне ребро замінене дугою таким чином, що або з кожної вершини можна потрапити у корінь, рухаючись уздовж орієнтації дуг (вхідне дерево), або в кожну вершину можна потрапити з кореня, рухаючись вздовж орієнтації дуг (вихідне дерево). У вхідном орієнтованому дереві корінь досяжний з кожної вершини, у вихідному – кожна вершина досяжна з кореня. Приклад вихідного дерева, а також деякі основні поняття, що стосуються дерев, зображено на мал.1.

З усіх дерев виділяють бінарні дерева. Дерево називають бінарним, якщо воно визначається наступним рекурсивним шляхом:

· одновершинне дерево є бінарним деревом;

· трійка є бінарним деревом з коренем r, лівим піддеревом Tl і правим піддеревом Tr, причому як Tl, так і Tr теж бінарні дерева, можливо порожні.

Дерева представляються різним чином, але найпоширеніші способи – це список суміжності та символ дерева (код Прюфера).

Список суміжностей.

При представленні дерева списком суміжності кожній вершині дерева співставляється список суміжних вершин виду:

Тобто, кожен вузол такого списку відповідає за одну вершину дерева і містить в свою чергу ще один лінійний список, у вузлах котрого розміщені всі суміжні вершини до даної.

Код Прюфера (символ дерева)

Для представлення дерева Т кодом Прюфера використовують наступний алгоритм:

функ КОД_ПРЮФЕРА(Т: дерево)=

1. Нехай n – число вершин в графі Т, а

А – цілочисельний вектор довжиною п -2;

2. В == [1: n ];

3. для і від 1 до п -1 цикл

4. b = min { k Î B; k – номер висячої вершини}

5. A [ i ] = номер вершини, суміжної з вершиною з номером b;

6. B = B – { b }

7. Витерти з Т вершину з номером A [ i ]

Все

8. повернути А

Все

Для дерева, зображеного на мал. 2 код Прюфера має вигляд:

.

Розпаковка коду Прюфера здійснюється за алгоритмом:

функ РОЗПАКОВКА (А: код) =

1. Нехай Т складається з вершин { v1,v2,…,vn } таких, що номер

вершини vі рівний і, де п – довжина коду А плюс 2;

2. В == [1: n ];

3. для і від 1 до п -1 цикл

4. b = min { k Î B; k ¹ A [ j ] для будь-якого j ³ i };

5. В Т добавити ребро, що з’єднує вершини з номерами b та A [ j ];

6. B = B – { b }

Все

7. повернути Т

Все

 
 

У випадку кореневого дерева процедури побудови коду Прюфера та його розпаковки аналогічні. Необхідно тільки на останньому місці в А вказувати кореневу вершину і при розпаковці коду А виключати номер цієї вершини з множини В.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: