Prufer编码

孤者浪人 提交于 2020-04-08 04:42:59

Prufer编码

1.概念

给定一棵带标号的无根树,找出编号最小的叶子结点,写下与它相邻的节点的编号,然后删掉这个叶子结点。反复执行这个操作直到只剩两个节点为止。由于节点数\(n>2\)的树总存在叶子节点,因此一棵\(n\)个节点的无根树唯一对应了一个长度为\(n - 2\)的数列,数列中的每个数都在\(1\)\(n\)的范围内。

将Prufer序列中第一个数与没有出现在Prufer序列中的第一个数连边;之后按次序依次将第\(2,3,…,n - 2\)个数与其对应的未出现在Prufer序列中的第\(2,3,…,n - 2\)个数连边;最后剩下两个点直接连边。这样就重新构建出来了原来的无根树。

这样每一棵\(n\)个节点的无根树唯一的对应了一个\(n - 2\)长度的数列,数列中的每个数都在\(1\)\(n\)的范围内。

2.性质

  1. 易得\(n\)个点的无向完全图的生成树计数(\(n\)个点的有标号无根树的计数)为\(n^{n-2}\)
  2. Prufer序列中某个编号出现的次数等于此编号节点在树中的度数减一。
  3. \(n\)个节点,每个节点的度数分别为\(D_{1}, D_{2}, …,D_{n}\),此时无根树的个数为\(\dfrac{(n - 2) !}{[(D_{1} - 1)! (D_{2} - 1)!…(D_{n} - 1)!]}\)个,因为此时Prufer编码中的编号\(i\)出现了\(D_{i} - 1\)次。(即\(n - 2\)个元素,各不相同,其中第\(i\)种元素有\(D_{i} - 1\)个,求排列数)(例题:洛谷P2290
  4. 与上问条件相同,另有\(m\)个节点度数未知。设\(left = (n - 2) - (D_{1} - 1) - (D_{2} - 1) - … - (D_{n} - 1)\),则已知节点可能组合方式为\(\dfrac{(n - 2) !}{[(D_{1} - 1)! (D_{2} - 1)!…(D_{n} - 1)!] \cdot left}\),剩余\(left\)个位置由\(m\)个未知度数的节点自由填补,方案数为\(m^{left}\)。所以答案为\(\dfrac{(n - 2) !}{[(D_{1} - 1)! (D_{2} - 1)!…(D_{n} - 1)!] \cdot left} \times m^{left}\)。(例题:洛谷P2624(因为有高精所以没写)
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!