首页 > 其他分享 >随机生成树问题的研究与思考

随机生成树问题的研究与思考

时间:2023-09-15 13:44:50浏览次数:29  
标签:pre 期望 个点 sum 生成 随机 思考 深度

随机选父亲法

随机选父亲法代码如下:

void RandomFatherGenerator(int n, Graph &g){
	std::mt19937 rnd(time(nullptr));
	for(int i=2;i<=n;i++){
		g.addUndirectedEdge(rnd%(i-1)+1, i);
	}
}

上述代码会生成一个以 \(1\) 为根的树。

每个点的期望深度

用随机选父亲法构造一个 \(n\) 个点的树,求每个点的期望深度。

我们都知道随机选父亲法生成的树深度期望 \(O(\log n)\)。但如果我们需要求精确值呢?

一个朴素的 ytxy 的 \(O(n^3)\) 做法:设 \(f(i,j)\) 表示第 \(i\) 个点深度为 \(j\) 的概率。

容易得到:

\[f(i,j) = \frac{1}{i-1}\sum_{k=1}^{i-1} f(k,j-1) \]

最后第 \(i\) 个点答案:

\[\sum_{k=1}^{i} f(i,k)k \]

一个朴素的 \(O(n^2)\) 做法。我们发现 \(f(,j)\) 中的 \(j\) 完全就是一个多余的东西。因此我们无须这个状态。

设 \(f(i)\) 为第 \(i\) 个节点的深度期望。

\[f(i)=1+\frac{1}{i-1}\sum_{k=1}^{i-1} f(k) \]

用前缀和即可优化到 \(O(n)\)。

给个 python 代码吧:

pre,f,n = 1,1,10
for i in range(1, n + 1):
    print(f)
    f = 1 + (1 / (i)) * pre
    pre += f

整个树的期望深度

标签:pre,期望,个点,sum,生成,随机,思考,深度
From: https://www.cnblogs.com/zheyuanxie/p/17704818.html

相关文章

  • Vue源码学习(六):(支线)渲染函数中with(),call()的使用以及一些思考
    好家伙, 昨天,在学习vue源码的过程中,看到了这个玩意嘶,看不太懂,研究一下 1.上下文这段出现vue模板编译的虚拟node部分exportfunctionrenderMixin(Vue){Vue.prototype._c=function(){//创建标签returncreateElement(...arguments)......
  • 墨天轮专访星环科技刘熙:“向量热”背后的冷思考,Hippo如何打造“先发”优势?
    导读: 深耕技术研发数十载,坚持自主可控发展路。星环科技一路砥砺前行、坚持创新为先,建设了全面的产品矩阵,并于2022年作为首个独立基础软件产品公司成功上市。星环科技在今年的向星力•未来技术大会上发布了分布式向量数据库TranswarpHippo以及两款领域大模型“无涯”和“求索”......
  • python利用openpyxl实现利用excel每行数据填入对应模板批量生成excel
    一、openpyxl常见操作可以参考:https://blog.csdn.net/JunChen681/article/details/1260532061、openpyxl把excel分成了三层Workbook是对工作簿的抽象(工作簿,一个excel文件包含多个sheet。)Worksheet是对表格的抽象(工作表,一个workbook有多个,表名识别,如“sheet......
  • Android studio 修改APK打包生成名称
    在app的build.gradle的android{}添加一下代码android.applicationVariants.all{variant->variant.outputs.all{defcreateTime=newDate().format("YYYYMMdd",TimeZone.getTimeZone("GMT+08:00"))//在这里修改apk文件名......
  • 京东一面:分布式 ID 生成方案怎么选?写得太好了!
    背景在分布式系统中,经常需要用到全局唯一ID发生器,标识需要存储的数据。我们需要什么样的ID生成器?ID生成器除了是数据的唯一标识以外,一般需要在系统中承担更多的责任,概括起来有以下几点:唯一性:“全局唯一”vs“业务唯一”?分布式系统使用唯一的ID生成器,会有非常严重的申请互斥......
  • 伪随机数算法
    伪随机数算法(一)伪随机数概念在我大学一年级接触C语言基础的时候就听说过,并熟练掌握C语言中rand()函数的使用方法。不过,当时我对伪随机数的认识基本也就停留在百度百科那种小白水平,最多就知道老师说我们用的随机数是假的,是通过某种算法实现的。最近学习计算物理学讲到MonteCa......
  • 一个基于Vue模型的表单生成器
    哈喽,我是老鱼,一名致力于在技术道路上的终身学习者、实践者、分享者!VuetifyFormBase是一个基于模型的表单生成器,目的是提供一个工具,以便以较少的努力从任何模型数据生成可编辑的表单,即使模型是一个深度嵌套的对象。VuetifyFormBase作为Vue组件工作,可以很容易地集成到任何VU......
  • app测试日常踩坑——gocache缓存的过期时间和生成间隔问题
    问题:自动化监控平台添加的分类详情页的接口报错,分类详情页校验失败,看到的错误信息是接口响应错误,信息如下:{"errors":{"id":"0","code":"44010102","level":"1","status":"200","title":"参数错误","popup......
  • Java生成Json字符串
    publicclassTest01{publicstaticvoidmain(String[]args){//StringBuilderresponseMsg=newStringBuilder();//responseMsg.append("");//responseMsg.append("");//System.out.println(responseMsg.leng......
  • 迭代器的总结和生成器
    迭代器的总结和生成器迭代器总结(迭代取值和索引取值的对比生成器(自定义的迭代器)(yield)生成器表达式yield和return的对比迭代器总结(迭代取值和索引取值的对比迭代取值 1.不依赖于索引取值的一种取值方式2.不能够重复取值,只能够从左往右固定取值索引取值 1.......