我想估计一个大型树结构中的树叶数,我无法详尽地访问每个节点。这个算法是否合适?它有名字吗?另外,如果我不恰当地使用任何条款,请小心。估计树的大小
sum_trials = 0
num_trials = 0
WHILE time_is_not_up
bits = 0
ptr = tree.root
WHILE count(ptr.children) > 0
bits += log2(count(ptr.children))
ptr = ptr.children[rand()%count(ptr.children)]
sum_trials += bits
num_trials++
estimated_tree_size = 2^(sum_trials/num_trials)
我看不出这可能会在任何种类的不平衡树上工作。定制树对象本身以在插入和移除过程中跟踪这种东西会更有意义。 – 2010-05-07 14:52:41
认为巨大,就像所有可能的跳棋游戏的树。不是记忆中的东西。 – 2010-05-07 14:54:44
我明白了。 :)看起来你可能有一个树在物理上存在(即使它是分裂的),或者你有一棵实际上并不存在的树,并根据需要从给定节点生成树。在第一种情况下,树型代码需要保留统计信息以给你想要的东西。第二种情况,你不能解决任何任意的树结构。如果你有特殊的第二种情况 - 比如跳棋游戏排列 - 有比统计抽样更好的方法。 – 2010-05-07 15:01:39