Опубликован: 25.07.2006 | Уровень: для всех | Доступ: свободно | ВУЗ: Новосибирский Государственный Университет
Лекция 11:

О деревьях

< Лекция 10 || Лекция 11: 1234 || Лекция 12 >

Представление с помощью списка ребер и кода Прюфера

Дерево при этом способе задается перечислением пар (v_{i},v_{j}) или троек (v_{i},v_{j},u_{k}), если дополнительно нужна нумерация ребер. Характер связей в списке определяется исходя из условий задачи.

Для дерева, изображенного на (рис.11.1), имеем:

(v_{1},v_{4}),(v_{2},v_{4}),(v_{3},v_{4}),(v_{4},v_{5}),
(v_{5},v_{6}),(v_{5},v_{7}),(v_{7},v_{8}),(v_{7},v_{9}).

Алгоритм построения кода Прюфера

Пусть Tдерево с множеством вершин \{v_{1},v_{2} \dts v_{n}\}. Будем считать, что номер вершины v_{i} равен i. Сопоставим дереву T последовательность \{a_{1},a_{2} \dts a_{n-2}\} по следующему правилу, представленному в виде функции: Функция кода Прюфера ( T: дерево) =

  1. Пусть n обозначает число вершин в T, а A — целочисленный вектор длины n-2 ;
  2. B=[1:n] ;
  3. Для i от 1 до n-1 цикл
  4. b=\min \{ k\in B: k \text{ --- номер висячей вершины}\} ;
  5. a[i] — номер вершины, с которой смежна вершина с номером b ;
  6. B=B-\{b\} ;
  7. удалить из T вершины с номером b ;
  8. возврат A.

Пример. Для дерева T. код Прюфера имеет вид P_{2}
(T)=  [2,5,5,5,6,6,10,9,10,11,13,15,15,10,13,13,13].

В случае корневого ордерева процедура получения кода Прюфера аналогична. Необходимо только на последнем месте указывать корневую вершину и при распаковке кода исключать номер этой вершины из множества B.

Алгоритм раскодирования

Распаковка кода Прюфера осуществляется следующей функцией:

Функция распаковки ( A: код) =

  1. Пусть T состоит из вершин \{v_{1},v_{2} \dts
v_{n}\}, таких, что номер вершины v_{i} равен i, где n — длина кода A плюс 2;
  2. B=[1: n] ;
  3. Для i от 1 до n+1 цикл;
  4. b=\min \{ k\in B.k\ne A[j] для любого j\ge
i\} ;
  5. В T добавить ребро, соединяющее вершины с номерами b и A[i] ;
  6. B=B-\{b\} ;
  7. возврат T.

Уровневые коды корневых деревьев

Пусть (T,z) обозначает корневое дерево с лежащим в его основе свободным деревом T и корнем z. Уровень вершины v в (T,z) — это расстояние от z до v плюс единица. Уровневый код (обозначение L(T,z)=[l_{1},l_{2} \dts l_{n}] ) — это последовательность целых чисел, полученная выписыванием уровней вершин дерева (T,z) в постфиксном порядке.

Уровневый код называется каноническим (обозначается L^{*}(T,z) ), если он является наибольшим в лексикографическом упорядочении среди всех уровневых кодов, описывающих дерево.

Пример. Для дерева T, изображенного на (рис.11. 1), имеем L(T,z)=[3,3,2,4,4,3,2,2,1] — обычный уровневый код, а канонический уровневый код L^{*}(T,z)) =[4,4,3,3,2,3,3,2,2,1].


Рис. 11.3.
< Лекция 10 || Лекция 11: 1234 || Лекция 12 >
Никита Толышев
Никита Толышев
Владислав Нагорный
Владислав Нагорный

Подскажите, пожалуйста, планируете ли вы возобновление программ высшего образования? Если да, есть ли какие-то примерные сроки?

Спасибо!