我想估計一個大型樹結構中的樹葉數,我無法詳盡地訪問每個節點。這個算法是否合適?它有名字嗎?另外,如果我不恰當地使用任何條款,請小心。估計樹的大小
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