Prüfer 序列 简要总结

内容主要总结自 OI Wiki。


简介

Prüfer 序列是一种在「包含 $n(n\ge 2)$ 个有编号结点的无根树」与「整数序列 $a(a_i\in[1,n],|a|=n-2)$」之间建立双射的方法。

原理

由树到序列的映射

每次选择树中编号最小的叶结点删除,并将与其连接的结点编号加入序列尾。重复 $n-2$ 次,剩下两个结点。

$O(n)$ 实现:维护编号值域上的指针 $p$,初始指向最小叶结点编号。假设一次删除后新增了叶结点 $x$,若 $x<p$ 则继续删除 $x$,否则让 $p$ 自增到第一个未删除的叶结点并删除。

由序列到树的映射

维护每个结点的度。正向遍历序列,每次选择度为 1 的最小编号结点与序列元素对应结点连接,然后减小这两个结点的度。重复 $n-2$ 次,剩下两个度为 1 的结点。

$O(n)$ 实现:同理,维护指针 $p$。假设一次连接后新增了度为 1 的结点 $x$,若 $x<p$ 则继续使用 $x$ 连接,否则让 $p$ 自增到第一个度为 1 的结点并使用其连接。

应用

证明凯莱公式

凯莱公式:完全图 $K_n$ 有 $n^{n-2}$ 棵生成树。

完全图 $K_n$ 的生成树集即「包含 $n(n\ge 2)$ 个有编号结点的无根树」集,而该集合与「整数序列 $a(a_i\in[1,n],|a|=n-2)$」集有双射关系,因此前者大小等于后者大小,即 $n^{n-2}$。

结论拓展:包含 $n$ 个有编号结点的有根树有 $n^{n-1}$ 种。


作者

Cu_OH_2

发布于

2024-04-25

更新于

2024-06-19

许可协议