Докажите формулу Катая (Cayley): количество помеченных деревьев на n вершинах равно n^{n-2}; опишите кодирование Прюфера и алгоритмы построения/восстановления дерева из кода, оцените временную сложность и приведите реальные применения этой теории в алгоритмах и сетевом моделировании

12 Окт в 14:14
5 +1
0
Ответы
1

Формулировка КэлиКэлиКэли. Число помеченных деревьев на n вершинах метки1..nметки 1..nметки1..n равно n^{\,n-2}.

Доказательство биекциячерезкодПрюферабиекция через код ПрюферабиекциячерезкодПрюфера.

Код Прюфера: каждому помеченному дереву на вершинах {1,...,n} ставим в соответствие последовательность P = p1,...,pn−2p1,...,p_{n-2}p1,...,pn2 длины n−2, где шаги такие:
Пока в дереве больше двух вершин: выбираем лист с наименьшей меткой u вклассическомопределении—минимальнуюпометкевершинустепени1в классическом определении — минимальную по метке вершину степени 1вклассическомопределенииминимальнуюпометкевершинустепени1, записываем метку его единственного соседа v в следующий элемент последовательности P, удаляем u иребро(u,v)и ребро (u,v)иребро(u,v).Повторяем, пока не останется два ребра; последовательность из n−2 записанных соседей — код Прюфера.Инвертируемость восстановлениедереваизкодавосстановление дерева из кодавосстановлениедереваизкода: пусть дана последовательность P длины n−2 из элементов {1..n}. Восстановим дерево:
Для кажой вершины i задаём degiii = 1 + number_of_occurrencesiвPi в PiвP.Инициализируем структуру для быстрого извлечения минимальной вершины с deg = 1 обычноmin−heapилиочередь/массивдляметок1..nобычно min-heap или очередь/массив для меток 1..nобычноminheapилиочередь/массивдляметок1..n.Для k = 1..n−2: извлечь минимальную вершину u с deguuu=1, взять v = Pkkk, добавить ребро u,vu,vu,v, decrement degvvv; если degvvv==1 — добавить v в множество листьев.В конце останутся ровно две вершины с deg=1; соединить их ребром.Бидективность доказана: код Прюфера строится однозначно; алгоритм восстановления даёт ровно то дерево, из которого получился код; поэтому это биекция между множеством помеченных деревьев на n вершинах и множеством последовательностей длины n−2 над алфавитом {1..n}. Число таких последовательностей = n^{n-2}. Следовательно, количество помеченных деревьев = n^{n-2}.

Альтернативный алгебраическийалгебраическийалгебраический подход: матрица Лапласа и теорема о числе остовных деревьев Matrix−TreetheoremMatrix-Tree theoremMatrixTreetheorem дают, что для полного графа K_n число остовных деревьев равно любой нетривиальной копротяненной алгебре детерминанта, что вычисляется как n^{n-2}. Но доказательство через Прюфера проще конструктивно.

Пример маленькиймаленькиймаленький: n=4. Все последовательности длины 2 над {1,2,3,4} — 4^2 = 16. Каждая соответствует своему дереву; напр., код 2,22,22,2 даёт дерево со степенями deg222=1+2=3, остальные 1 — звезда с центром 2.

Вычислительная сложность алгоритмов

1) Кодирование (дерево -> код):

Наивная реализация: поддерживать для дерева степени и множество листьев минимальныйлистизвлекаемминимальный лист извлекаемминимальныйлистизвлекаем, при каждом удалении обновлять соседа. Если множество листьев реализовано min-heap'ом приоритетнаяочередьприоритетная очередьприоритетнаяочередь — Onlognn log nnlogn по времени вдеревеn−1ребро,выполняетсяO(n)извлеченийиO(n)вставок/обновленийв дереве n−1 ребро, выполняется O(n) извлечений и O(n) вставок/обновленийвдеревеn1ребро,выполняетсяO(n)извлеченийиO(n)вставок/обновлений.Можно сделать Onnn по времени: так как метки — целые 1..n, поддерживают массив степеней degiii и линейную структуру для листьев например,массивочередейпометкамилибитовыймассивсопоискомследующейединицынапример, массив очередей по меткам или битовый массив со поиском следующей единицынапример,массивочередейпометкамилибитовыймассивсопоискомследующейединицы — при аккуратной реализации извлечение следующего минимального листа можно делать амортизировано O111, тогда весь алгоритм Onnn. Память Onnn.

2) Декодирование (код -> дерево):

Стандартный алгоритм см.вышесм. вышесм.выше: инициализация degiii = 1 + countOccurrencesiii O(n)сподсчётомO(n) с подсчётомO(n)сподсчётом, затем n−2 итераций: извлечь минимальный лист и соединить с текущим элементом Pkkk. С min-heap — Onlognn log nnlogn, с специализированной структурой для меток 1..n — Onnn. Память Onnn.

Следствия и полезные формулы

Степени вершин в случайном равновероятномравновероятномравновероятном помеченном дереве: degiii = 1 + X_i, где X_i — число вхождений i в код Прюфера. Поскольку P — последовательность независимых выборов из {1..n}, X1,...,XnX_1,...,X_nX1 ,...,Xn имеют совместное распределение мультинономного типа с суммой n−2. Это даёт явные формулы на количество деревьев с заданной последовательностью степеней d1,...,dn приsumd<em>i=2(n−1)при sum d<em>i = 2(n−1)приsumd<em>i=2(n1):
число = n−2n−2n2! / ∏{i=1}^n di−1d_i − 1di 1!
получаетсяизчислаперестановоккода,дающегоэтивхожденияполучается из числа перестановок кода, дающего эти вхожденияполучаетсяизчислаперестановоккода,дающегоэтивхождения.Это удобно при перечислении деревьев с заданной степенной структурой.

Применения в алгоритмах и моделировании сетей

1) Генерация равномерно случайных деревьев:

Чтобы получить равномерно распределённое помеченное дерево на n вершинах, сгенерируйте P1..n−21..n-21..n2 как независимые равномерные целые в {1..n} O(n)O(n)O(n), затем раскодируйте O(n)O(n)O(n). Это даёт быстрый способ моделирования случайных топологий.

2) Анализ степенного распределения в случайных деревьях:

Поскольку degiii=1+count_in_code, степени распределены мультинономно; это позволяет задавать аналитические выводы среднее,дисперсия,предельныераспределениясреднее, дисперсия, предельные распределениясреднее,дисперсия,предельныераспределения. Полезно при изучении случайных сетей, разветвляющихся структур.

3) Компактное кодирование деревьев:

Код Прюфера представляет помеченное дерево за n log n бит теоретически; практические компактные представления и хеширование используют сходные идеи.

4) Комбинаторика и химия:

Перечисление изомеров алкановалкановалканов приближённо использует подсчёт деревьев модификациидлявершинсограниченнойстепеньюмодификации для вершин с ограниченной степеньюмодификациидлявершинсограниченнойстепенью. Формулы типа n−2n−2n2! / ∏di−1d_i−1di 1! применяются для подсчёта структур.

5) Моделирование топологий сетей симуляциисимуляциисимуляции:

Для тестирования протоколов распространениесообщений,маршрутизация,алгоритмыприема/передачираспространение сообщений, маршрутизация, алгоритмы приема/передачираспространениесообщений,маршрутизация,алгоритмыприема/передачи, для генерации случайных деревянистых топологий например,дляP2Poverlay,топологийраспределённыхвычисленийнапример, для P2P overlay, топологий распределённых вычисленийнапример,дляP2Poverlay,топологийраспределённыхвычислений, моделирования процессов распространения по древовидным графам эпидемии,потоксообщенийэпидемии, поток сообщенийэпидемии,потоксообщений.

6) Теоретические алгоритмы:

Различные доказательства и конструкции подсчётостовныхдеревьев,анализпространствдеревьев,перебордеревьевсзаданнымисвойствамиподсчёт остовных деревьев, анализ пространств деревьев, перебор деревьев с заданными свойствамиподсчётостовныхдеревьев,анализпространствдеревьев,перебордеревьевсзаданнымисвойствами используют код Прюфера как инструмент.

Кратко о практической реализации

Для n до миллионов алгоритм Onnn линейныйповремениипамятилинейный по времени и памятилинейныйповремениипамяти вполне реализуем: массив подсчёта вхождений, массив очереди листьев например,связныйсписокилиочередь+текущееположениедляпоискаследующегоминимальногонапример, связный список или очередь + текущее положение для поиска следующего минимальногонапример,связныйсписокилиочередь+текущееположениедляпоискаследующегоминимального обеспечивает эффективную работу.Для разреженных меток или общих объектов нечисловомаркированныхот1доnне числово маркированных от 1 до nнечисловомаркированныхот1доn используют хеш-таблицы и приоритетную очередь — тогда сложность обычно Onlognn log nnlogn.

Итог

Прюфер-код даёт конструктивную биекцию между помеченными деревьями на n вершинах и всеми последовательностями длины n−2 над n метками. Поэтому число помеченных деревьев = n^{n-2}. Код удобен для линейной/почти линейной генерации и восстановления деревьев и на практике широко применяется при моделировании случайных топологий, анализе распределений степеней и задачах перечисления.
12 Окт в 14:48
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир