【问题标题】:How to prove Average height of Binary Search Tree is O(logn)?如何证明二叉搜索树的平均高度为 O(logn)?
【发布时间】:2020-04-25 15:59:44
【问题描述】:

我曾想过一个证明,但无法在纸上画出草图。 我认为二叉搜索树高度的递归关系是

T(n)=T(k)+T(n-k-1)+1

如果根和 n-k-1 在根的右子树上(并且 n= 总节点),则 k 是左子树中的元素数

(如果上面有错,请纠正我)

现在我的想法是,因为我们必须计算平均情况.. 所以有一半的情况可能...... (现在这是我开始搞砸的地方,请在这里纠正..)

我的主张:我将有大约一半的情况。 示例

(0,N-1) 或 (1, N-2) 或 . . (N-1,0)

其中 N 是节点总数。 现在我正在考虑将上述案例中的一半用于平均案例计算... (我不知道我这样做是否正确..对此发表评论将不胜感激)

所以我明白了:

T(n)=T(n/2)+T(n/2)+1

T(n)=2T(n/2)+1

现在,当我应用主方法来获得所获得的递归关系的近似答案时.. 我得到 O(n)。

现在我应该如何继续...? (我的期望是我应该登录而不是 n) 但这并没有成功.. 所以请建议我应该如何进一步进行。 (我的方法是否完全正确..从一开始,也告诉我?)

【问题讨论】:

  • 您的树高重复出现错误。目前,它正在计算节点数而不是高度。如果您假设均匀分布,您可能想要的期望的递归形式为 $T(n) = \frac1n \sum_k (1+\max{T(k), T(n-k-1)})$ .我相信你可以通过归纳证明 $T(n) = O(\log n)$。使用 $\log(n!) \leq n\log n$ 的事实(为什么?)。
  • 不要忘记这仅适用于完全平衡的树。不平衡的树木将有更长的高度。考虑一个只有左节点的 BST。然后你基本上有一个链表,其中高度 == 节点数。

标签: algorithm time-complexity binary-search-tree


【解决方案1】:

来自 Robert Sedgewick 和 Kevin Wayne 的“算法”

定义。二叉搜索树(BST)是一棵二叉树,其中每个节点都有一个 可比键(和关联的值)并满足键的限制 in 任何节点都大于该节点左子树中所有节点中的键,并且小于该节点右子树中所有节点中的键。

命题 C. 在由 N 个随机键构建的 BST 中的搜索命中需要 ~ 2 ln N (大约 1.39 lg N)比较,平均而言。

证明: 用于在给定节点结束的搜索命中的比较次数是 1 加上深度。将所有节点的深度相加,我们得到一个称为 树的内部路径长度。因此,所需的量是 1 加上 BST 的平均内部路径长度,我们可以用相同的论点来分析 我们在 2.3 节中使用了命题 K:设 CN 为总内部路径长度 通过插入 N 个随机排序的不同键构建的 BST,因此平均 搜索命中的成本是 1 CN / N。我们有 C0= C1= 0 并且对于 N > 1,我们可以写一个 直接反映递归 BST 结构的递归关系:

CN = N 1 (C0 CN1) / N + (C1 CN2)/N 。 . . (CN1 C0 )/否

N 1 项考虑到根对路径长度的贡献为 1 树中其他 N 1 个节点中的每个节点;其余的表达式帐户 对于子树,它们同样可能是 N 个大小中的任何一个。重新整理后 术语,这种递归几乎与我们在第 2.3 节中解决的相同 对于快速排序,我们可以推导出近似 CN ~ 2N ln N

我也建议你查看这个麻省理工学院讲座Binary Search Trees, BST Sort

还可以查看算法书籍中的第 3.2 章,它深入解释了二叉搜索树

【讨论】:

  • 好的,谢谢它很直观......(对不起,我反应迟了)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 2015-08-25
相关资源
最近更新 更多