Код Прюфера однозначно сопоставляет произвольному конечному дереву последовательность; дереву с nn вершинами сопоставляется последовательность из n−2n−2 чисел от 11 до nn с возможными повторениями. Код может быть получен применением простого итерационного алгоритма; также есть алгоритм, восстанавливающий дерево по его коду Прюфера. Код Прюфера был использован Хайнцем Прюфером при доказательстве формулы Кэли в 1918 году.
Дерево – частный случай графа. Деревья широко применяются в программировании. Дерево – это связный граф без циклов. Дерево называется помеченным, если каждой вершине соответствует уникальная метка. Обычно это число.
Код Прюфера – это способ взаимно однозначного кодирования помеченных деревьев с n вершинами с помощью последовательности n-2 целых чисел в отрезке [1,n]. То есть, можно сказать, что код Прюфера – это биекция между всеми остовными деревьями полного графа и числовыми последовательностями.
Определение. Кодом Прюфера длины n – 2 называется последовательность из чисел от 1 до n с повторениями.
Лемма. Количество кодов Прюфера длины n – 2 равно nn-2.
Теорема. Существует взаимно однозначное соответствие между остовными деревьями для графа из n вершин и кодами Прюфера длины n – 2. По каждому дереву с n вершинами можно построить код Прюфера длины n – 2 и наоборот.
Следствие. Количество пронумерованых деревьев из n вершин равно nn-2.
Алгоритм построения кода Прюфера по дереву
Вход: дерево с n вершинами.
Выход: код Прюфера длины n – 2.
Повторить n – 2 раза
Выбрать вершину v – лист дерева с наименьшим номером;
Добавить номер единственного соседа v в последовательность кода Прюфера;
Удалить вершину v из дерева;
Алгоритм построения кодов Прюфера:
Кодирование Прюфера переводит помеченные деревья порядка nn в последовательность чисел от 11 до nn по алгоритму:
Пока количество вершин больше двух:
- Выбирается лист vv с минимальным номером.
- В код Прюфера добавляется номер вершины, смежной с vv.
- Вершина vv и инцидентное ей ребро удаляются из дерева.
Полученная последовательность называется кодом Прюфера (англ. Codes Priifer) для заданного дерева.
Лемма: |
По любой последовательности длины n−2n−2 из чисел от 11 до nn можно построить помеченное дерево, для которого эта последовательность является кодом Прюфера. |
Доказательство: |
|
Доказательство проведем по индукции по числу nn
База индукции:
n=1n=1 −− верно.
Индукционный переход:
Пусть для числа nn верно, построим доказательство для n+1n+1:
Пусть у нас есть последовательность: A=[a1,a2,...,an−2].A=[a1,a2,...,an−2].
Выберем минимальное число vv не лежащее в AA. По предыдущей лемме vv −− вершина, которую мы удалили первой. Соединим vv и a1a1 ребром. Выкинем из последовательности AA число a1a1. Перенумеруем вершины, для всех ai>vai>v заменим aiai на ai−1ai−1. А теперь мы можем применить предположение индукции.
Пример построения кода Прюфера:

|