如何从树中选择一个随机节点

时间:2010-07-17 17:10:05

标签: random tree

如何从树中选择随机元素?是否有必要事先知道树的深度/大小?

3 个答案:

答案 0 :(得分:14)

不是。要随机选择一个节点,只需按照您喜欢的顺序遍历树。让检查的第n个节点是概率为1 / n的所选节点。也就是说,保留您将在变量中返回的节点的记录,当您查看第n个节点时,将当前节点替换为第n个概率为1 / n的节点。您可以通过归纳显示这会随机均匀地返回一个节点,而无需事先知道有多少节点。

答案 1 :(得分:2)

如果你已经将你的叶子结构化为一个可索引的数据类型(如数组),那么你可以很容易地(伪代码):

random_leaf = leaf_pile[ random( size of leaf pile ) ]

这是一个很好的,令人耳目一新的O(1): - )

当然,可能存在漏洞,因此您可能需要从那里进行迭代。如果它存储为链表,那么你可以迭代。

只提供明显的替代方案。这实际上取决于您的数据结构和最常见的用例。

答案 2 :(得分:-1)

为每个节点做一次0到(子项数)-1范围内的随机调用,然后选择该数字后面的下一个孩子。

重复此操作,直到你落叶。