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编码学习笔记的更多相关文章

  1. prufer序列学习笔记

    prufer序列是一个定义在无根树上的东西. 构造方法是:每次选一个编号最小的叶子结点,把他的父亲的编号加入到序列的最后.然后删掉这个叶节点.直到最后只剩下两个节点,此时得到的序列就是prufer序列 ...

  2. Base64编码——学习笔记

    Base64是一种编码方式. 非加密 chcp->936 编码流程: 位数不够后面补0,例中补了2个0. 末尾加=表示结束符. GB2312,有些敏感词不能显示. GBK,是GB2312升级版. ...

  3. prufer 序列 学习笔记

    prufer 序列是一种无根树的序列,对于一个 \(n\) 个点的树,其 prufer 序列的长度为 \(n-2\). prufer 序列和原树之间都可以唯一地相互转化. 构造 构造 prufer 序 ...

  4. 零基础HTML编码学习笔记

    任务目的 了解HTML的定义.概念.发展简史 掌握常用HTML标签的含义.用法 能够基于设计稿来合理规划HTML文档结构 理解语义化,合理地使用HTML标签来构建页面 任务描述:完成一个HTML页面代 ...

  5. 稀疏编码学习笔记(二)L2范数

    L2范数 除了L1范数,还有一种更受宠幸的规则化范数是L2范数: ||W||2.它也不逊于L1范数,它有两个美称,在回归里面,有人把有它的回归叫“岭回归”(Ridge Regression),有人也叫 ...

  6. 学习笔记:Prufer 编码

    Prufer 编码可以将无根树与序列之间进行转化. 一个 \(n\) 个点.区分编号的无向图 和 Prufer 序列一定是一一对应的,下面会给出映射方式. 借此可以证明 Cayley 定理: \(n\ ...

  7. [原创]java WEB学习笔记45:自定义HttpFilter类,理解多个Filter 代码的执行顺序,Filterdemo:禁用浏览器缓存的Filter,字符编码的Filter,检查用户是否登陆过的Filter

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  8. java web 学习笔记 编码问题总结

       java web 学习笔记 编码问题总结 1.非form表单中提交的中文参数---------------------------传递给Servlet服务器时,默认以iso-8859-1解码 ...

  9. 【视频编解码·学习笔记】8. 熵编码算法:基本算法列举 & 指数哥伦布编码

    一.H.264中的熵编码基本方法: 熵编码具有消除数据之间统计冗余的功能,在编码端作为最后一道工序,将语法元素写入输出码流 熵解码作为解码过程的第一步,将码流解析出语法元素供后续步骤重建图像使用 在H ...

随机推荐

  1. ENVI 安装

    本文转自https://jingyan.baidu.com/article/2d5afd69d50e9585a2e28e37.html  但对该文有所补充,建议看本文,本文更详细. ENVI5.3安装 ...

  2. Python Requests-学习笔记(7)-Cookies

    如果某个响应中包含一些Cookie,你可以快速访问它们: url = 'http://example.com/some/cookie/setting/url' r = requests.get(url ...

  3. Python中关于字符串你应该知道这些...

    # Python中字符串的常见用法### 定义:带有双引号/单引号/三引号### 双引号:适用于所写的字符串里没有双引号的.例如:"凡是“辛苦”必是礼物"报错​### 单引号:适用 ...

  4. floyd最小环&&模板

    floyd的核心代码: ;k<=n;k++){ ;i<=n;i++){ ;j<=n;j++){ dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j] ...

  5. js操作svg整体缩放

    首先我们先创建一个svg整体布局,代码如下: <!DOCTYPE html> <html> <head> <title>js操作svg实现整体缩放< ...

  6. L21 Momentum RMSProp等优化方法

    airfoil4755 下载 链接:https://pan.baidu.com/s/1YEtNjJ0_G9eeH6A6vHXhnA 提取码:dwjq 11.6 Momentum 在 Section 1 ...

  7. Spring Cloud 系列之 Gateway 服务网关(三)

    本篇文章为系列文章,未读第一集的同学请猛戳这里: Spring Cloud 系列之 Gateway 服务网关(一) Spring Cloud 系列之 Gateway 服务网关(二) 本篇文章讲解 Ga ...

  8. ATmega328P定时器详解

    写这篇文章,纯粹是想为博客拉点点击量.在博客园,游客访问好像是不计入阅读量的,而作为一个十八线博主,注册用户的访问应该以搜索引擎为主,博客园首页为次,个位数的粉丝就别谈了. 所以,希望各位从搜索引擎点 ...

  9. 常问的MySQL面试题整理

    char.varchar 的区别是什么? varchar是变长而char的长度是固定的.如果创建的列是固定大小的,你会得到更好的性能 truncate 和 delete 的区别是什么? delete ...

  10. 【认证与授权】2、基于session的认证方式

    这一篇将通过一个简单的web项目实现基于Session的认证授权方式,也是以往传统项目的做法. 先来复习一下流程 用户认证通过以后,在服务端生成用户相关的数据保存在当前会话(Session)中,发给客 ...