В комбинаторной математике последовательность Прюфера (также код Прюфера или числа Прюфера ) маркированного дерева — это уникальная последовательность , связанная с деревом. Последовательность для дерева с n вершинами имеет длину n − 2 и может быть сгенерирована простым итеративным алгоритмом. Последовательности Прюфера были впервые использованы Хайнцем Прюфером для доказательства формулы Кэли в 1918 году. [1]
Можно сгенерировать последовательность Прюфера маркированного дерева, итеративно удаляя вершины из дерева, пока не останется только две вершины. В частности, рассмотрим маркированное дерево T с вершинами {1, 2, ..., n }. На шаге i удалите лист с наименьшей меткой и установите i -й элемент последовательности Прюфера в качестве метки соседа этого листа.
Последовательность Прюфера помеченного дерева уникальна и имеет длину n − 2.
Как кодирование, так и декодирование можно свести к целочисленной сортировке и распараллелить. [2]
Рассмотрим приведенный выше алгоритм, запущенный на дереве, показанном справа. Изначально вершина 1 является листом с наименьшей меткой, поэтому она удаляется первой, а 4 помещается в последовательность Прюфера. Затем удаляются вершины 2 и 3, поэтому 4 добавляется еще дважды. Вершина 4 теперь является листом и имеет наименьшую метку, поэтому она удаляется, и мы добавляем 5 к последовательности. У нас остается только две вершины, поэтому мы останавливаемся. Последовательность дерева — {4,4,4,5}.
Пусть {a[1], a[2], ..., a[n]}
будет последовательностью Прюфера:
Дерево будет иметь n+2
узлы, пронумерованные от 1
до n+2
. Для каждого узла установите его степень равной количеству раз, которое он появляется в последовательности, плюс 1. Например, в псевдокоде:
Convert-Prüfer-to-Tree ( a ) 1 н ← длина [ а ] 2 T ← граф с n + 2 изолированными узлами, пронумерованными от 1 до n + 2 3 степень ← массив целых чисел 4 для каждого узла i в T до 5 степени [ i ] ← 1 6 для каждого значения i в a do 7 степень [ i ] ← степень [ i ] + 1
Далее для каждого числа в последовательности a[i]
находим первый (с наименьшим номером) узел, j
со степенью, равной 1, добавляем ребро (j, a[i])
к дереву и уменьшаем степени j
и a[i]
. В псевдокоде:
8 для каждого значения i в a do 9 для каждого узла j в T do 10 если степень [ j ] = 1 , то 11 Вставить ребро [ i , j ] в T 12 степень [ i ] ← степень [ i ] - 113 степень [ j ] ← степень [ j ] - 114 перерыв
В конце этого цикла останутся два узла со степенью 1 (назовем их u
, v
). Наконец, добавим ребро (u,v)
к дереву. [3]
15 у ← в ← 016 для каждого узла i в T 17 если степень [ i ] = 1 , то 18 если u = 0 , то 19 u ← i 20 иначе 21 v ← i 22 разрыв 23 Вставить ребро [ u , v ] в T 24 степень [ u ] ← степень [ u ] - 125 градусов [ v ] ← градусов [ v ] - 126 возврат Т
Последовательность Прюфера маркированного дерева на n вершинах — это уникальная последовательность длины n − 2 на метках от 1 до n . Для заданной последовательности S длины n − 2 на метках от 1 до n существует уникальное маркированное дерево , последовательность Прюфера которого равна S.
Непосредственным следствием является то, что последовательности Прюфера обеспечивают биекцию между набором помеченных деревьев на n вершинах и набором последовательностей длины n − 2 на метках от 1 до n . Последний набор имеет размер n n −2 , поэтому существование этой биекции доказывает формулу Кэли , то есть, что существует n n −2 помеченных деревьев на n вершинах.
{{cite journal}}
: CS1 maint: несколько имен: список авторов ( ссылка )