prufer编码学习笔记
prufer 编码
对于一个无根树,他的 prufer 编码是这样确定的:
- 每次找到编号最小的一个叶子节点,也就是度数为\(1\)的节点,把和它相连的点,加入 prufer 编码序列的末尾,然后把这个点从树中删掉
- 如果当前树只有两个节点了,就停止
那么,通过给定的无根树求 prufer 编码就很简单了
比如下面这个无根树,它的 prufer 编码就是\(\texttt{125214}\)

这个 prufer 编码有一些很显然的性质
首先长度肯定是\(n-2\),但每个元素可能相同,然后对于每个无根树,它的 prufer 编码肯定也唯一
如果编码的每个元素都相同,那么它可以是一个编号最大的点连向其它所有点(特殊的菊花图),如果都不同,可以是一个链
当然,这里说“可以”是因为有可能还存在其它的构造方式
那么,prufer 编码对应的树是否唯一?
也就是说,每一个编码是不是只能求出唯一的树?
是可以的,先给出求的方式:
设这棵树点的集合为\(V\),初始状态下\(V=\{1,2,\cdots,n\}\)
- 每次找到编码最前面的一个点,在\(V\)中找到不在编码序列中出现的编号最小的点,连边,然后分别把他们在\(V\)中和编码中删掉
- 显然,当编码被全部删掉后,\(V\)中还有两个元素,再把他们两个连边,结束
然后验证一下刚才那个图,发现是正确的
可以感性理解一下,编码序列的第一个数,就是我们第一次删除叶子节点以后添加的它的相邻节点,而这个被删掉的节点肯定不在编码中,它也是序号最小的,所以还原树的时候就要把它和它相邻的那个被添加到编码中的点连边
然后每次都这样做就得出了原树
又因为在找编码的时候最后剩了两个节点,那两个节点肯定是连在一起的,所以这就是为什么要把\(V\)中剩下的两个点连边
所以,上面通过 prufer 编码求树的操作,也是唯一的
那么可以得出一下更深入的性质:
- prufer 编码和无根树一一对应
- 对于有\(n\)个节点的无根树,有\(n^{n-2}\)种构造方式
因为编码和树一一对应,所以长度为\(n-2\),每一位有\(n\)种取值的编码的种类数是\(n^{n-2}\),这个东西也叫做 Cayley 公式 - 对于有\(n\)个节点的有根树,有\(n^{n-1}\)种构造方式,很显然,就是让每个节点轮流当根,然后运用上面那个式子
- 度数为\(k\)的点,在 prufer 编码中出现的次数是\(k-1\)
因为在\(k-1\)个点被删掉的时候,它被加入编码,此时度数为\(1\),直接被删掉不会加入编码中 - 对于给定\(n\)个点的度数分别是\(k_1,k_2,\cdots,k_n\)的有根树,有\(\dfrac{(n-2)!}{\prod (k_i-1)!}\)种构造方式
问题即为求每个元素出现\(k_i\)次的排列个数,分子的\((n-2)!\)是说,没有这个限制条件的全排列个数,分母上是去重,就是说如果相同的元素交换位置应该算一种方案,所以要除以它的阶乘 - 上面那个性质再扩展一下,假设有\(cnt\)个点对度数有要求,其它的没要求,设\(sum=\sum_{i=1}^{cnt}k_i\),则方式有:
\(\tbinom{n-2}{sum}\frac{sum!}{\prod_{i=1}^{cnt}(k_i-1)!}\times (n-cnt)^{n-2-sum}\)
解释一下什么意思,那个组合数就是从\(n-2\)个数里面算出\(sum\)个,然后对这\(sum\)个用上一条性质的公式,然后还有\(n-2-sum\)个位置可以任意排列剩下的\(n-cnt\)个点,所以得出上面式子
应该没有了,如果有大佬知道其它性质欢迎在评论区给出
然后有一些题,这些在tulun-prufer编码的分类中有题解
P4430 小猴打架
P4981 父子
P2290 [HNOI2004]树的计数
P2624 [HNOI2008]明明的烦恼
prufer编码学习笔记的更多相关文章
- prufer序列学习笔记
prufer序列是一个定义在无根树上的东西. 构造方法是:每次选一个编号最小的叶子结点,把他的父亲的编号加入到序列的最后.然后删掉这个叶节点.直到最后只剩下两个节点,此时得到的序列就是prufer序列 ...
- Base64编码——学习笔记
Base64是一种编码方式. 非加密 chcp->936 编码流程: 位数不够后面补0,例中补了2个0. 末尾加=表示结束符. GB2312,有些敏感词不能显示. GBK,是GB2312升级版. ...
- prufer 序列 学习笔记
prufer 序列是一种无根树的序列,对于一个 \(n\) 个点的树,其 prufer 序列的长度为 \(n-2\). prufer 序列和原树之间都可以唯一地相互转化. 构造 构造 prufer 序 ...
- 零基础HTML编码学习笔记
任务目的 了解HTML的定义.概念.发展简史 掌握常用HTML标签的含义.用法 能够基于设计稿来合理规划HTML文档结构 理解语义化,合理地使用HTML标签来构建页面 任务描述:完成一个HTML页面代 ...
- 稀疏编码学习笔记(二)L2范数
L2范数 除了L1范数,还有一种更受宠幸的规则化范数是L2范数: ||W||2.它也不逊于L1范数,它有两个美称,在回归里面,有人把有它的回归叫“岭回归”(Ridge Regression),有人也叫 ...
- 学习笔记:Prufer 编码
Prufer 编码可以将无根树与序列之间进行转化. 一个 \(n\) 个点.区分编号的无向图 和 Prufer 序列一定是一一对应的,下面会给出映射方式. 借此可以证明 Cayley 定理: \(n\ ...
- [原创]java WEB学习笔记45:自定义HttpFilter类,理解多个Filter 代码的执行顺序,Filterdemo:禁用浏览器缓存的Filter,字符编码的Filter,检查用户是否登陆过的Filter
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- java web 学习笔记 编码问题总结
java web 学习笔记 编码问题总结 1.非form表单中提交的中文参数---------------------------传递给Servlet服务器时,默认以iso-8859-1解码 ...
- 【视频编解码·学习笔记】8. 熵编码算法:基本算法列举 & 指数哥伦布编码
一.H.264中的熵编码基本方法: 熵编码具有消除数据之间统计冗余的功能,在编码端作为最后一道工序,将语法元素写入输出码流 熵解码作为解码过程的第一步,将码流解析出语法元素供后续步骤重建图像使用 在H ...
随机推荐
- MTK Android Driver :Memory
型号配置: 1.CUSTOM_MEMORY_HDR(需要确认是否是MTK认证的flash ic) mediatek\custom\$(PROJECT)\preloader\inc\custom_Mem ...
- python 函数--迭代器
一.迭代协议: 可以被迭代要满足要求的就叫做可迭代协议.内部实现__iter__方法. iterable:可迭代的--对应的标志. 什么叫做迭代?:可以一个一个取值,就像for循环一样取值. 字符串, ...
- canvas压缩、裁切图片和格式转换的方法
按照大小压缩图片,或者按照特定分辨率裁切图片,转为blob数据.自动处理ios中可能存在的照片偏差90°问题. 例如,获取300*300大小的头像,实现以下效果: 使用方式: <!-- 引入js ...
- 【python实现卷积神经网络】卷积层Conv2D实现(带stride、padding)
关于卷积操作是如何进行的就不必多说了,结合代码一步一步来看卷积层是怎么实现的. 代码来源:https://github.com/eriklindernoren/ML-From-Scratch 先看一下 ...
- Git常用指令整理(Git Cheat Sheet)
[Toc] 1. 创建 复制一个已创建的仓库:git clone ssh://user@domain.com/repo.git 创建一个新的本地仓库:git init 2. 本地修改 显示工作路径下已 ...
- Python设计模式(7)-建造者模式
# coding=utf-8 class Report: def create_head(self): pass def create_body(self): pass class year_Repo ...
- 小程序以及H5页面上IphoneX底部安全区域小黑条适配问题
背景 公司项目开发中,发现iPhoneX上吸底元素存在被小黑条遮挡的问题 原因 在苹果 iPhoneX .iPhone XR等机型上,物理Home键被取消,改为底部小黑条替代home键功能,从而导致吸 ...
- 012-C语言小游戏之推箱子
012-C语言小游戏之推箱子 一.创建游戏地图 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #define ROWS 11 #define COLS 12 char ...
- JMock2入门
说明:学习JMock官网的Getting Started的笔记 例子:为测试publish/subscribe发布/订阅信息系统的publisher(发布者),mock subscriber(订阅者) ...
- D - Catch That Cow BFS
农夫知道一头牛的位置,想要抓住它.农夫和牛都于数轴上 ,农夫起始位于点 N(0<=N<=100000) ,牛位于点 K(0<=K<=100000) .农夫有两种移动方式: 1. ...