估计树的大小

时间:2010-05-07 14:48:05

标签: algorithm math tree graph

我想估计一个大树结构中的叶子数量,我无法详尽地访问每个节点。这个算法合适吗?它有名字吗?另外,如果我不正确地使用任何条款,请迂腐。

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)

2 个答案:

答案 0 :(得分:3)

如果您可以对树进行一些安全的假设(例如:它是否平衡?)及其用法(有关多少叶子将成为同一节点的子节点的安全假设?),这可能是可能的。更好的是,如果每次添加/删除叶节点时都保持运行计数(计数器)。然后,您只需在一次操作中访问计数器变量。

答案 1 :(得分:2)

估算树木大小的理论,是指数时间分析的基础

中的算法和某些启发式方法

可满足性手册,IOS Press 2009,ISBN 978-1-58603-929-5 (编辑Armin Biere,Marijn J.H. Heule,Hans van Maaren和Toby Walsh) http://www.iospress.nl/book/handbook-of-satisfiability/

即第7章“分支启发式基础”(第205-244页)。 基础技术报告是 http://www.swan.ac.uk/compsci/research/reports/2008/CSR7-2008.pdf 该章可在以下网站获取 http://www.booksonline.iospress.nl/Content/View.aspx?piid=11712

这个理论在Donald Knuth的上述论文中概括了这种方法(1975, 估计回溯计划的效率)。