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

Joh*_*nny 10 random tree

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

Jef*_*rey 14

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

  • 为它命名:这是一个众所周知的算法,称为[水库采样](http://en.wikipedia.org/wiki/Reservoir_sampling). (5认同)

Quo*_*nux -1

只需对每个节点进行 0 到(子节点数)-1 范围内的随机调用,然后选择该数字之后的下一个子节点。

重复此操作,直到进入一片叶子​​。