首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何从树中获取随机节点?

如何从树中获取随机节点?
EN

Stack Overflow用户
提问于 2010-04-04 10:41:55
回答 1查看 588关注 0票数 2

这看起来很简单,但我发现实现起来很棘手。我需要它来解决我正在尝试实现的一个简单的遗传编程问题。给定一个节点,函数应该返回节点本身或它的任何子节点,这样选择节点的概率相对于它的深度是正态分布的(所以函数应该返回大部分中间节点,但有时返回根节点本身或最低的节点-但如果这使它变得更加复杂,那么这并不是真正必要的,如果所有节点都以相等的概率被选择,这就足够了)。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-04-04 10:45:07

对于均匀的情况,如果你知道每个节点的深度,你可以向左选择概率大小(左)/size(这),向右选择概率大小(右)/size(这),否则选择当前节点。每个结合点的单个随机数应该足够了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int r = rand() % size(this);
if (r < size(left)) { /* go left */ }
else if (r > size(left)) { /* go right */ }
else { /* pick this node */ }

实际上,通过一些调整,您可能可以向下传递一个随机数,以便在每个节点上使用。经过一番思考,是的,你可以做到:如果你向左转,使用未修改的r;如果你向右转,从r中减去(size(left) - 1)

对于正态分布,只需使用均值为深度一半的正态分布随机变量提前选择深度,然后回退到上面的算法。需要注意的是,这将根据子树的相对大小在中间节点之间分布,而不是均匀分布。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2574173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文