Коды Прюфера — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(Коды Прюфера.)
(Коды Прюфера.)
Строка 1: Строка 1:
 
== Коды Прюфера. ==
 
== Коды Прюфера. ==
Кодирование Прюфера переводит помеченные деревья порядка <tex>n</tex> в последовательность чисел от <tex>1</tex> до <tex>n</tex> по алгоритму:
+
Кодирование Прюфера переводит [[Количество помеченных деревьев#Помеченное дерево|помеченные деревья порядка <tex>n</tex>]] в последовательность чисел от <tex>1</tex> до <tex>n</tex> по алгоритму:
 
   Пока количество вершин больше одной {
 
   Пока количество вершин больше одной {
 
     1. Выбирается лист <tex>v</tex> с минимальным номером.
 
     1. Выбирается лист <tex>v</tex> с минимальным номером.

Версия 11:23, 11 декабря 2011

Коды Прюфера.

Кодирование Прюфера переводит помеченные деревья порядка [math]n[/math] в последовательность чисел от [math]1[/math] до [math]n[/math] по алгоритму:

 Пока количество вершин больше одной {
   1. Выбирается лист [math]v[/math] с минимальным номером.
   2. В код Прюфера добавляется номер вершины, смежной с [math]v[/math].
   3. Вершина [math]v[/math] и инцидентное ей ребро удаляются из дерева.
 }

Полученная последовательность называется кодом Прюфера для заданного дерева.

Лемма:
Номер вершины [math]v[/math] встречается в коде Прюфера тогда и только тогда, когда [math]v[/math] не является листом или [math]v[/math] имеет номер [math]n[/math].
Доказательство:
[math]\triangleright[/math]
  1. Вершина с номером [math]n[/math] не может быть удалена, следовательно на последнем шаге у неё была смежная вершина, и число [math]n[/math] встретилось в коде.
  2. Если вершина не является листом, то у неё на некотором шаге была смежная вершина [math]-[/math] лист, следовательно номер этой вершины встречается в коде.
  3. Если вершина является листом с номером меньше [math]n[/math], то она была удалена до того, как был удален ее сосед, следовательно ее номер не встречается в коде.
Таким образом, номера всех вершин, не являющихся листьями или имеющих номер [math]n[/math], встречаются в коде Прюфера, а остальные [math]-[/math] нет.
[math]\triangleleft[/math]
Лемма:
По любой последовательности длины [math]n - 2[/math] из чисел от [math]1[/math] до [math]n[/math] можно построить помеченное дерево, для которого эта последовательность является кодом Прюфера.
Доказательство:
[math]\triangleright[/math]

Доказательство проведем по индукции.
База. [math]n = 1[/math] [math]-[/math] верно.
Переход от [math]n[/math] к [math]n + 1[/math].
Пусть у нас есть последовательность: [math]A = [a_1, a_2, ..., a_{n - 2}].[/math]

Выберем минимальное число [math]v[/math] не лежащее в [math]A[/math]. По предыдущей лемме [math]v[/math] [math]-[/math] вершина, которую мы удалили первой. Соединим [math]v[/math] и [math]a_1[/math] ребром. Выкинем из последовательности [math]A[/math] число [math]a_1[/math]. Перенумеруем вершины, для всех [math]a_i \gt v[/math] заменим [math]a_i[/math] на [math]a_i - 1[/math]. А теперь мы можем применить предположение индукции.
[math]\triangleleft[/math]
Теорема:
Кодирование Прюфера задаёт биекцию между множествами помеченных деревьев порядка [math]n[/math] и последовательностями длиной [math]n - 2[/math] из чисел от [math]1[/math] до [math]n[/math]
Доказательство:
[math]\triangleright[/math]
  1. Каждому помеченному дереву приведенный алгоритм сопоставляет последовательность.
  2. Каждой последовательности, как следует из предыдущей леммы, соотвествует помеченное дерево.
[math]\triangleleft[/math]

Следствием из этой теоремы является формула Кэли.

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

Prufer.png

Пример декодирования кода Прюфера

Backprufer.png

Источники

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