二叉搜索树的分析

时间:2011-08-30 13:15:09

标签: algorithm

在二进制搜索树中,大多数操作的平均计算复杂度为O(NlogN)。以下是Algo的书中的文字片段:

  

内部路径长度的平均值是D(n)= O(n log n)。因此,预期的深度   任何节点都是O(log n)。例如,随机生成的500个节点   tree的节点长度为9.98。

     

很容易立即说出这个结果意味着   所讨论的所有操作的平均运行时间,即插入,   找到min,find max,删除二叉搜索树是O(log n),但是这个   并非完全正确。原因是因为   删除,目前尚不清楚所有二叉搜索树是否相同   有可能。特别地,上述删除算法是有利的   使左侧子树比右侧更深,因为我们总是如此   用右子树中的节点替换已删除的节点。最正确   这种策略的效果仍然未知,但似乎只是一个   理论新颖性。已经表明,如果我们交替插入   和删除O(n2)(即n平方的θ)次,然后是树   将具有预期的平方根N的θ深度。

     

在25万随机插入/删除对后,树就是   有点右重的看起来显然是不平衡的(平均深度=   12.51)。

我对上述文字摘要的问题是:

  1. 作者的意思是“由于删除,并不清楚所有二叉搜索树是否同样可能”?
  2. 作者如何达到500节点树的预期深度9.98,因为log 500不是9.98?
  3. 在最后一段中,他是如何获得12.51的平均深度的?
  4. 谢谢!

1 个答案:

答案 0 :(得分:1)

1)它考虑由(稍微均匀的)随机插入和删除序列生成的二叉树。当仅进行插入时,树的所有可能形状(直到symetry !!)都是可能的 - 您可以尝试构建具有(1,2,3)或(1,2)的所有可能排列的树。 ,3,4)。

在这里描述的算法中,当删除具有两个子树的节点时,它被其右子树替换,并且我猜左子树最左下方。这不仅使得一些(不平衡的)形状比没有删除的形状更有可能,而且使它可能比树的左侧分支更深,而不是它们右侧的分支(看看当你移除或接近的几个节点时会发生什么这个策略的平衡树的根)

2)考虑尺寸511。如果树是完全平衡的,它将具有深度9(log(n + 1))这是具有许多元素的最小深度。对于随机形状,这是平均值,而不是平均值,平均值必须更大:有深度为511的形状(请注意,虽然深度必须大于log2(N),但它可能仍然是O(logN)) 。我不知道作者如何得到这个数字。也许聪明的数学,也许只是运行一个大样本。

4)在这种情况下,我相信会运行一个示例:树有正确的重外观 。然而,很明显,删除平均会使树木不那么平衡