Cayley 公式的一些广为人知的证法:

  • Prufer 序列
  • Matrix-Tree 定理

然而我都不会 233,所以下面说一个生成函数角度的证法 .


我们知道 \(n\) 个节点的有标号无根树有 \(n^{n-2}\) 种,即 Cayley 公式 .

具体数学的做法是考虑递推完全图生成树个数,然后推出 EGF 的关系 .

那个递推太牛逼了,我就不这么干了,先令 \(g_n\) 表示 \(n\) 个节点的有标号有根树个数(\(g_0=0\)),且其 EGF 为 \(G(z)\) .

钦定一个根,它每一个儿子的 EGF 都与它相同, 就是 \(G(z)\) . 那么它的生成函数就是它儿子生成函数的一个组合, 即 \(\mathrm e^{G(z)}\) . 然后考虑根本身的影响,有

\[G(z)=z\mathrm e^{G(z)}
\]

即 \(G(z)\mathrm e^{-G(z)}=z\) .

现在只需要解出 \(G\) 来然后提取系数即可 .


方法 1

Lagrange 反演

若 \(F,G\) 互为复合逆(即 \(F(G(z))=G(F(z))=z\)),且 \(F,G\) 常系数为 \(0\),\(1\) 次项非 \(0\),则有

\[[z^n]G(z)=\dfrac1n[z^{-1}]F(z)^{-n}
\]

令 \(F(z)=z\mathrm e^{-z}\),那么易见 \(F,G\) 互为复合逆,于是 Lagrange 反演一下,得到

\[\begin{aligned}[x^n]G(z)&=\dfrac1n[z^{-1}]F(z)^{-n}\\&=\dfrac 1n[z^{n-1}]\left(z^nF(z)^{-n}\right)\\&=\dfrac1n[z^{n-1}]\left(\dfrac{z}{F(z)}\right)^n\\&=\dfrac1n[z^{n-1}]\mathrm e^{nz}\\&=n^{n-1}\end{aligned}
\]

于是有标号有根树个数为 \(n^{n-1}\),于是有标号无根树个数就是 \(n^{n-2}\),Cayley 公式得证 .


方法 2(不确保正确性,要是错了轻 D)

考虑广义指数函数 \(\mathcal E_t(z)\) 定义为

\[\mathcal E_t(z)=\sum_{n\ge 0}(tn+1)^{n-1}\dfrac{z^n}{n!}
\]

广义指数函数有一个性质叫

\[\mathcal E_t(z)^{-t}\ln\mathcal E_t(z)=z
\]

令 \(\mathcal D(z)=\ln\mathcal E_t(z)\),则上式可以化为

\[\dfrac{\mathcal D(z)}{\mathrm e^{t\mathcal D(z)}}=z
\]

移项得

\[\mathcal D(z)=z\mathrm e^{t\mathcal D(z)}
\]

取 \(t=1\) 就得到所需 EGF \(G\) .

于是 \(G(z)=\ln\mathcal E_1(z)\) .

然后 EGF \(\ln\) 其实相当于一个平移,所以就可以根据定义提取系数 \([z^n]G(z)=n^{n-1}\) .

同样,这表明有标号有根树个数为 \(n^{n-1}\),于是有标号无根树个数就是 \(n^{n-2}\),Cayley 公式又得证 .

UPD. 具体数学写法好像和我不太一样,我也知道 EGF 的微积分事实上是平移,然而这个做法看起来哪都对(

Cayley 公式的另一种证明的更多相关文章

  1. 树的计数 Prufer序列+Cayley公式

    先安利一发.让我秒懂.. 第一次讲这个是在寒假...然而当时秦神太巨了导致我这个蒟蒻自闭+颓废...早就忘了这个东西了... 结果今天老师留的题中有两道这种的:Luogu P4981 P4430 然后 ...

  2. 树的计数 + prufer序列与Cayley公式(转载)

    原文出处:https://www.cnblogs.com/dirge/p/5503289.html 树的计数 + prufer序列与Cayley公式 学习笔记(转载) 首先是 Martrix67 的博 ...

  3. 树的计数 Prüfer编码与Cayley公式 学习笔记

    最近学习了Prüfer编码与Cayley公式,这两个强力的工具一般用于解决树的计数问题.现在博主只能学到浅层的内容,只会用不会证明. 推荐博客:https://blog.csdn.net/moreja ...

  4. P4981 父子 Cayley公式

    CayleyCayley公式的定义是这样的,对于n个不同的节点,能够组成的无根树(原来是无向连通图或者是有标志节点的树)的种数是n^(n-2)种.(这里让大家好理解一点,就写成了无根树,其实应该是一样 ...

  5. 树的计数 + prufer序列与Cayley公式 学习笔记

    首先是 Martrix67 的博文:http://www.matrix67.com/blog/archives/682 然后是morejarphone同学的博文:http://blog.csdn.ne ...

  6. Ceva定理的四种证明方法

    ${\color{Teal} {Ceva定理}}$设$D.E.F$依次为三角形ABC的边$AB.BC.CA$的内点,记 $λ$=(A,B,D),$μ$=(B,C,E),$v$=(C,A,F) 求证:三 ...

  7. Dijkstra算法的另一种证明

    按:今天看Tanenbaum的计算机网络时讲到了Dijkstra算法.关于算法的正确性,<算法导论>给出了严格的证明.CLRS的证明基于一个通用的框架,非常清晰.今天只是随意想想是否有其他 ...

  8. [Bilingual] Different proofs of Jordan cardinal form (Jordan标准型的几种证明)

  9. 【数据结构与算法分析——C语言描述】第一章总结 引论

    这一章主要复习了一些数学知识,像指数.对数.模运算.级数公式:还有2种证明方法,归纳假设法和反证法.所幸以前学过,重新拾捡起来也比较轻松. 简要地复习了递归,提出了编写递归例程的四条基本法则: 基准情 ...

随机推荐

  1. Spring Ioc源码分析系列--Ioc容器BeanFactoryPostProcessor后置处理器分析

    Spring Ioc源码分析系列--Ioc容器BeanFactoryPostProcessor后置处理器分析 前言 上一篇文章Spring Ioc源码分析系列--Ioc源码入口分析已经介绍到Ioc容器 ...

  2. 923. 3Sum With Multiplicity - LeetCode

    Question 923. 3Sum With Multiplicity Solution 题目大意: 给一个int数组A和一个目标值target,求满足下面两个条件的组合个数,其中i,j,k分别为数 ...

  3. 817. Linked List Components - LeetCode

    Question 817. Linked List Components Solution 题目大意:给一个链表和该链表元素组成的一个子数组,求子数组在链表中组成多少个片段,每个片段中可有多个连续的元 ...

  4. SSH管理多密钥

    生成密钥对 ssh-keygen -t rsa -b 4096 -C "your_email@example.com" # 默认情况下在~/.ssh目录下生成id_rsa和id_r ...

  5. python之数据类型的内置方法(set、tuple、dict)与简单认识垃圾回收机制

    目录 字典的内置方法 类型转换 字典取值 修改值 计算字典长度 成员运算 删除元素 获取元素 更新字典 快速生成字典 setdefault()方法 元组的内置方法 类型转换 索引与切片操作 统计长度 ...

  6. Spring Authorization Server 0.3.0 发布,官方文档正式上线

    基于OAuth2.1的授权服务器Spring Authorization Server 0.3.0今天正式发布,在本次更新中有几大亮点. 文档正式上线 Spring Authorization Ser ...

  7. 微信小程序开发 记录

    采坑了 微信小程序--TabBar不出现的一种原因 学习微信小程序中,遇到底部的TabBar不出现的问题.经过多番尝试,终于解决问题.在此记录问题产生的原因和对策.下面先描述错误现象,接着指出错误原因 ...

  8. 爬取豆瓣TOP250电影

    自己跟着视频学习的第一个爬虫小程序,里面有许多不太清楚的地方,不如怎么找到具体的电影名字的,那么多级关系,怎么以下就找到的是那个div呢? 诸如此类的,有许多,不过先做起来再说吧,后续再取去弄懂. i ...

  9. 【Java面试】什么是可重入,什么是可重入锁? 它用来解决什么问题?

    一个工作了3年的粉丝,去一个互联网公司面试,结果被面试官怼了. 面试官说:"这么简单的问题你都不知道? 没法聊了,回去等通知吧". 这个问题是: "什么是可重入锁,以及它 ...

  10. Django从数据库导model迁移乱码

    python manage.py inspectdb > [your app name]\models.py 执行后 model.py乱码,将models.py以 UTF-16LE打开.