随机树

对这题的第一问,我们可以感性地理解一下

\(f[i]\)表示\(i\)个叶子的平均叶子深度是多少

那么增加一个叶子(即一次拓展操作)所有叶子的总深度增加了\(2\),平均深度增加了\(\frac{2}{i}\)

所以\(f[i]=f[i-1]+\frac{2}{i}\)

想一下为什么这里可以这么理解,而下一问求深度却不可以。因为对任意一张确定的图,你随便添加两个节点,总深度一定是增加\(2\),而平均深度一定是增加\(\frac{2}{i}\),也就是说对所有的图变化都是一样的,所以我们可以直接从平均的角度去理解

然后就可以利用样例进行验证了

如果不放心我们就老老实实地推式子

给一些基础数据:当有\(i\)个叶节点的时候,一共有\((i-1)!\)张图(注意本文所提到的所有“不同”的图可以长得一模一样,但是生成方式是不同的)

\(i\)时,利用\(i-1\)时的每一张图(设出未知量)来推导,最后也可以推,不赘述

主要是第二问

先来看看这篇文章

以下是对这篇文章的解释与总结

首先是本篇文章将拓展过程转化为序列的思想很好,一定要记住。这种二叉树生成的题目也考得挺多了,这个思想还是蛮重要的

另外这篇文章里面所说的“形态数”可以指两个一模一样的树但是“生成方式”是不同的,跟第一问的括号那里一样(如果不能理解可以看看式子)

然后是整数期望公式,注意\(E(X)\)的X是随机变量,是这个实验的最终结果。比如此题的\(X\)指代的是深度,不能像DP一样去乱说意义,比如说\(E(X)\)表示有X个叶子节点的期望深度,这是不行的。\(E(x)\)只能表示在固定了叶子节点的情况下的期望深度是多少。然后再去理解这个公式就好理解了:\(P(X>=i)\)指深度大于等于\(i\)的概率(我们拿掷骰子来验证一下,掷一次骰子,\(P(X≥1)=1,P(X≥2)=\frac{5}{6},...,P(X≥6)=\frac{1}{6}\),所以\(E(X)=3.5\));注意看公式的证明,只有随机变量都是整数的时候可以用(本题随机变量为深度,深度肯定是整数)

最后在计算概率的时候,如果理解不了这个式子,可以从定义根本出发。重新设一个函数\(h[i][j]\)表示有\(i\)个叶子,深度不小于\(j\)的图的数量(再次强调,“不同”的图可以一模一样,但是生成方式不同),然后再去按照定义推导也可以得出这个式子

此时,我们有\(f[i][j]=\frac{h[i][j]}{(i-1)!}\)\(h[i][j]\)所代表的每一个树都有自己独特的生成序列,所有满足深度不小于\(j\)的生成序列的数量除以\((i-1)!\)就是概率),从“将拓展过程转化为序列”的角度去思考(还是注意每个\(h\)都代表若干个生成序列),有\(h[i][j]=\sum C_{i-2}^{k-1}h[k][j-1]h[i-k-1][0]+C_{i-2}^{i-k-1}h[i-k-1][j-1]h[k][0]-C_{i-2}^{k-1}h[k][j-1]h[i-k-1][j-1]\),两边同时除以\((i-1)!\)即可得到题解中的式子

为什么这个式子要这么推?其实一旦题目涉及的是二叉树我们就可以考虑这么推,即分别考虑左右子树。另一应用就是推导不同二叉树的数量为卡特兰数,也是用的这个方法

最后再注意一下这个初始化的问题,一定不要漏掉了某些数组的初始化(看看那个递推式子,j最小为1,那么j-1可以为0,所以一定要把所有的0都初始化了)

如果让自己来想,一定要知道整数期望公式,然后倒着想吧(其实最开始那个小结论没必要证明,我们知道整数期望公式之后推导\(f\)的时候再算就好了,但是证明过程中将拓展过程转化为序列的思想很好,一定要记住)

posted @ 2023-09-24 19:21  最爱丁珰  阅读(3)  评论(0编辑  收藏  举报