Algorithm 二叉搜索树分析

Algorithm 二叉搜索树分析,algorithm,Algorithm,在二叉搜索树中,大多数操作的平均计算复杂度表示为O(NlogN)。下面是Algo书中的一段文字片段: 内部路径长度的平均值为D(n)=O(n logn)。因此,预期的深度 任何节点都是O(logn)。例如,随机生成的500个节点 树具有预期深度为9.98的节点 很容易马上说,这一结果意味着 讨论的所有操作的平均运行时间,即插入, 二叉搜索树上的findmin,findmax,delete是O(logn),但这个 这并不完全正确。原因是因为 删除时,不清楚是否所有的二叉搜索树都是相同的 很可能。特

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

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

很容易马上说,这一结果意味着 讨论的所有操作的平均运行时间,即插入, 二叉搜索树上的findmin,findmax,delete是O(logn),但这个 这并不完全正确。原因是因为 删除时,不清楚是否所有的二叉搜索树都是相同的 很可能。特别地,上述删除算法有利于 使左子树比右子树更深,因为我们总是 用右子树中的节点替换已删除的节点。确切的 这一策略的效果仍然不得而知,但似乎只是暂时的 理论新颖性。研究表明,如果我们交替插入 删除O(n2)(即n平方的θ)次,然后是树 将具有平方根N的预期θ深度

在25万个随机插入/删除对之后 有点偏右,看起来明显不平衡(平均深度= 12.51)

我对上述文本片段的问题如下:

  • 作者所说的“由于删除,不清楚所有的二元搜索树是否都具有相同的可能性”是什么意思
  • 当日志500不是9.98时,作者如何实现500节点树的预期深度9.98
  • 在最后一段中,他是如何得到12.51的平均深度的
  • 谢谢

    1)它考虑由(某种程度上统一的)随机插入和删除序列生成的二叉树。当只进行插入时,该大小的树的所有可能形状(最多符号!!)都是相同的-您可以尝试使用(1,2,3)或(1,2,3,4)的所有可能排列构建一棵树

    在这里描述的算法中,当一个有两个子树的节点被删除时,它将被它的右子树替换,我猜左子树将位于最左边最下面。这不仅使某些(不平衡)形状比未删除时更可能出现,而且使树的左分支比右分支更深(请参见使用此策略删除平衡树根处或靠近平衡树根的几个节点时发生的情况)

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


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

    我认为在上面的511大小中,深度是9而不是8。