给定n:顶点的数量,我想随机生成一个有n个顶点的树。 目前,我使用random_shuffle()生成n个顶点的随机序列,仅生成线性树。但是,我怎样才能使其随机包含其他树类型以及C ++?
答案 0 :(得分:2)
假设您的目标是在具有n个顶点的带根标记树的集合上的均匀概率分布之后生成伪随机树,解决方案是生成所谓的Prüfer代码,这是[1,n]中统一生成的随机(n-2)元组数。
wiki文章准备使用伪代码:
https://en.wikipedia.org/wiki/Pr%C3%BCfer_sequence
但我怎样才能让它足够随机
没有“足够随机”这样的东西; 你需要指定树分布应具有的属性(并且可能存在多个此类分布)。在有限集的特殊情况下(例如所有具有n个顶点的树的集合),您总是可以在其上唯一地定义均匀分布,但这绝不是“更随机”,也不是“更自然”,也不是任何事情......由你(以及你的最终目标)决定这是否是正确的分配。