随机树

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

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

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

所以f[i]=f[i1]+2i

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

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

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

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

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

主要是第二问

先来看看这篇文章

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

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

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

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

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

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

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

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

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

update 2024.8.11

重新做了一遍,做出来了,转化成序列的操作在计数交换中也有体现,这道题目其实想一下一颗树怎么生成的,我们一会在左子树操作,一会在右子树操作就不难想出转化成序列的操作了

posted @   最爱丁珰  阅读(12)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示