Код Прюфера

Материал из Википедии — свободной энциклопедии
Перейти к навигацииПерейти к поиску
Дерево с кодом Прюфера (4,4,4,5).

Код Прюфера сопоставляет произвольномуконечному дереву сn{\displaystyle n} вершинамипоследовательность изn2{\displaystyle n-2} чисел (от1{\displaystyle 1} доn{\displaystyle n}) с возможными повторениями. Отношение между деревом с помеченными вершинами и кодом Прюфера является взаимно однозначным: каждому дереву соответствует уникальный код Прюфера, при этом номерам вершин сопоставляются элементы последовательности кода. Обратно, по заданному коду изn2{\displaystyle n-2} чисел можно однозначно восстановить дерево сn{\displaystyle n} вершинами. Код был построенХайнцем Прюфером при доказательствеформулы Кэли в 1918 году.[1]

Содержание

Построение

[править |править код]

ПустьT{\displaystyle T} есть дерево с вершинами, занумерованными числами{1,2,,n}{\displaystyle \{1,2,\dots ,n\}}. Построение кода Прюфера дереваT ведётся путем последовательного удаления вершин из дерева, пока не останутся только две вершины. При этом каждый раз выбирается концевая вершина с наименьшим номером, и в код записывается номер единственной вершины, с которой она соединена. В результате образуется последовательность(p1,,pn2){\displaystyle (p_{1},\dots ,p_{n-2})}, составленная из чисел{1,2,,n}{\displaystyle \{1,2,\dots ,n\}}, возможно с повторениями.

Пример

[править |править код]

Для дерева на диаграмме вершина 1 является концевой вершиной с наименьшим номером, поэтому она удаляется первой, и 4 записывается в код Прюфера.

Вершины 2 и 3 удаляются следующими, так что 4 добавляется в код два раза.

Вершина 4 теперь стала концевой и имеет наименьший номер, поэтому она удаляется, а 5 добавляется в код.

Остались только две вершины, поэтому код записан полностью, и процесс останавливается.

В результате получается код Прюфера (4,4,4,5).

Восстановление дерева

[править |править код]

Для восстановления дерева по кодуp=(p1,,pn2){\displaystyle p=(p_{1},\dots ,p_{n-2})} заготовим список номеров вершинs=(1,,n){\displaystyle s=(1,\dots ,n)}. Выберем первый номерi1{\displaystyle i_{1}}, который не встречается в коде. Добавим ребро(i1,p1){\displaystyle (i_{1},p_{1})}, после этого удалимi1{\displaystyle i_{1}} изs{\displaystyle s} иp1{\displaystyle p_{1}} изp{\displaystyle p}.

Повторяем процесс до момента, когда кодp{\displaystyle p} становится пустым. В этот момент списокs{\displaystyle s} содержит ровно два числаin1{\displaystyle i_{n-1}} иn{\displaystyle n}. Остаётся добавить ребро(in1,n){\displaystyle (i_{n-1},n)}, и дерево построено.

Свойства

[править |править код]

Приложения

[править |править код]
(n2d11,d21,,dn1)=(n2)!(d11)!(d21)!(dn1)!.{\displaystyle {\binom {n-2}{d_{1}-1,\,d_{2}-1,\,\dots ,\,d_{n}-1}}={\frac {(n-2)!}{(d_{1}-1)!(d_{2}-1)!\cdots (d_{n}-1)!}}.}
  • Код Прюфера используется для построений случайных деревьев.

Ссылки

[править |править код]
  1. Prüfer, H. Neuer Beweis eines Satzes über Permutationen (нем.) // Arch. Math. Phys.. — 1918. —Bd. 27. —S. 742—744.
Источник —https://ru.wikipedia.org/w/index.php?title=Код_Прюфера&oldid=140196682
Категории: