Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 估计树的大小_Algorithm_Math_Tree_Graph - Fatal编程技术网

Algorithm 估计树的大小

Algorithm 估计树的大小,algorithm,math,tree,graph,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.ch

我想估计一个大型树结构中的叶子数量,因为我不能彻底访问每个节点。这个算法合适吗?它有名字吗?此外,请学究,如果我使用任何术语不当

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)

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

一种估计树大小的理论,是分析指数时间的基础 算法和某些领域的启发式,是在

可满足性手册,IOS出版社2009,ISBN 978-1-58603-929-5 (编辑Armin Biere、Marijn J.H.Heule、Hans van Maaren和Toby Walsh)

即第7章“分支启发式的基础”(第205-244页)。 基本的技术报告是 本章可在

该理论概括了Donald Knuth(1975,
评估回溯程序的效率)。

我看不出这在任何类型的不平衡树上都可能起作用。自定义树对象本身,以便在插入和删除过程中跟踪此类内容,这会更有意义。不是记忆中的东西。我明白。:)看起来您可能有一个物理上存在的树(甚至它被拆分),或者您有一个实际上不存在的树,并且根据需要从给定节点生成。在第一种情况下,树生成代码需要保留stats以提供所需的数据。第二种情况,您无法解决任何任意树结构的问题。如果你有一个特殊的第二种情况,比如跳棋游戏排列,有比统计抽样更好的方法可以使用。评估回溯计划的效率。计算数学29(129):121–136。如果你的估计作为一个统计数据有意义,你还需要计算(或估计)方差。我不能假设这棵树是平衡的。但我可以设定深度的上限。这有用吗?例如,这棵树将是巨大的,它代表了一个完美信息游戏中的所有动作。嗯,这可能会给你一个最坏情况下的叶子数量估计,但要更接近,你需要知道更多。有没有办法知道/估计有多少分支实际达到最大深度?我不知道如何估计有多少分支达到最大深度,但实际上我只对这些分支感兴趣。我将继续这个话题,并提出其他问题。