证明随机建立的二叉搜索树具有对数高度


10

如何证明具有n个节点的随机构建的二叉搜索树的期望高度为O (log n )?CLRS 算法入门(第12.4章)中有一个证明,但我不理解。ñØ(日志⁡ñ)


1
哪个问题?什么例子 请编辑并提供完整的详细信息。
— Ran G.

3
请避免使用缩写(例如BST),并假设我们大多数人都没有CLRS书。如果您可以在此处复制该定理,并解释您不了解的原理,则会得到更多答案。
— Ran G.

2
这将取决于如何在二叉搜索树建。(即使结果没有,证明也可以。)更多详细信息将很有用。
— 彼得·索尔

Answers:


21

让我们首先直观地考虑一下。在最佳情况下,树是完美平衡的;在最坏的情况下,树是完全不平衡的:

高度平衡的二叉搜索树最坏情况的二叉搜索树

从根节点开始,该左树具有两倍于每个后续深度许多节点,使得该树具有Ñ = Σ ħ 我= 0 2 我 = 2 ħ + 1 - 1个节点和一个高度ħ(这是在这种情况3)。用少量的数学,Ñ ≤ 2 ħ + 1 - 1 → ħ ≤ ⌈ 日志2(Ñ + 1 )- 1 ⌉ ≤ ⌊ 升öpñ=∑一世=0H2一世=2H+1个-1个H,这就是说它具有 ø (日志Ñ )的高度。对于完全不平衡的树,树的高度仅为 n − 1 → O (n )。所以我们有界限。ñ≤2H+1个-1个→H≤⌈日志2⁡(ñ+1个)-1个⌉≤⌊升ØG2ñ⌋Ø(日志⁡ñ)ñ-1个→Ø(ñ)

如果我们从一个有序列表构建一个平衡树,我们会选择中间元素是我们的根节点。如果我们正在代替随机构建树中,任何的Ñ节点都同样可能被拾取和我们的树的高度是:ħ ë 我克ħ 吨吨- [R ë ë = 1 + 最大(ħ Ë 我克ħ 吨升e f t s u b t r e{1个,2,…,ñ}ñ 我们知道,在一个二叉搜索树,左子树必须只包含键小于根节点。因此,如果我们随机选择我吨ħ元件,左子树具有我-1种元素和右子树具有ñ-我元素,因此更紧凑: ħ Ñ =1+最大( ħ 我-

HË一世GHŤŤ[RËË=1个+最大值(HË一世GHŤ升ËFŤ sübŤ[RËË,HË一世GHŤ[R一世GHŤ sübŤ[RËË)
一世ŤH一世-1个ñ-一世。从那里开始,有意义的是,如果每个元素均等地被选择,则期望值只是所有案例的平均值(而不是加权平均值)。因此:E[ h n ]= 1Hñ=1个+最大值(H一世-1个,Hñ-一世)Ë⁡[Hñ]=1个ñ∑一世=1个ñ[1个+最大值(H一世-1个,Hñ-一世)]

正如我确定您已经注意到的那样,我与CLRS的证明方式略有不同,因为CLRS使用了两种相对通用的证明技术,这些技术使初学者感到不安。第一种是使用我们要查找的值(在这种情况下为高度)的指数(或对数),这使数学计算更清晰。第二种是使用指标函数(在这里我将忽略)。CLRS将指数高度定义为,因此类似的递归为Y n = 2 × max (Y i − 1,Y n − i)ÿñ=2Hñÿñ=2×最大值(ÿ一世-1个,ÿñ-一世)。

假设独立性(一个元素(在可用元素中)的每个绘制作为子树的根都与之前的所有绘制无关),我们仍然具有以下关系: 为此我做了两个步骤:(1)移动1

Ë⁡[ÿñ]=∑一世=1个ñ1个ñË⁡[2×最大值(ÿ一世-1个,ÿñ-一世)]=2ñ∑一世=1个ñË⁡[最大值(ÿ一世-1个,ÿñ-一世)]
是一个常数,求和的性质之一是∑ici=c∑ii;(2)将2移到外面是因为它也是一个常数,并且期望值的性质之一是E[ax]=aE[x]。现在,我们将用更大的函数替换max函数,因为否则很难进行简化。如果我们主张非负X,则Y:E[max(X,Y1个ñ∑一世C一世=C∑一世一世E⁡[ax]=aE⁡[x]最大值Xÿ,则: ë [ ÿ Ñ ] ≤ 2E⁡[最大值(X,ÿ)]≤Ë⁡[最大值(X,ÿ)+分(X,ÿ)]=Ë⁡[X]+Ë⁡[ÿ] ,使得从i=1,Yi-1=Y0和Yn-i=Yn-1的观察到最后一步,方式我=ñ,ÿ我-1=ýñ-1和ÿñ-
Ë⁡[ÿñ]≤2ñ∑一世=1个ñ(Ë⁡[ÿ一世-1个]+Ë⁡[ÿñ-一世])=2ñ∑一世=0ñ-1个2Ë⁡[ÿ一世]
一世=1个ÿ一世-1个=ÿ0ÿñ-一世=ÿñ-1个一世=ñÿ一世-1个=ÿñ-1个,所以每个项 Y 0到 Y n − 1出现两次,因此我们可以用一个相似的项代替整个求和。好消息是,我们有复发é[ ÿ Ñ ]≤ 4ÿñ-一世=ÿ0ÿ0ÿñ-1个;坏消息是,我们离开始的地方不远。Ë⁡[ÿñ]≤4ñ∑一世=0ñ-1个Ë⁡[ÿ一世]

在这一点上,CLRS拉动感应证明从他们的...数学经验库中,其中包括一个∑ n − 1 i = 0( i+3Ë⁡[ÿñ]≤1个4(ñ+33)他们留给用户证明。关于它们的选择,重要的是其最大项为n3,回想一下,我们使用的是指数高度Yn=2hn,因此hn=log2n3=3log2n→O(logn)。也许有人会评论为什么选择此特定二项式。但是,通常的想法是从我们的递归之上用一个常数k的表达式nk约束。∑一世=0ñ-1个(一世+33)=(ñ+34)ñ3ÿñ=2HñHñ=日志2⁡ñ3=3日志2⁡ñ→Ø(日志⁡ñ)ñķķ

2Ë⁡[Xñ]≤Ë⁡[ÿñ]≤4ñ∑一世=0ñ-1个Ë⁡[ÿ一世]≤1个4(ñ+33)=(ñ+3)(ñ+2)(ñ+1个)24→Ë⁡[Hñ]=Ø(日志⁡ñ)

哇谢谢 !!!!即使我不知道期望值,这种方式还是有道理的。在做算法之前,我没有做过谨慎的数学课程。如果我有任何疑问,我将发表更多评论。谢谢Merbs。
— user1675999

但是为什么指数高度恰好小于或等于所选的二项式呢?我仍然不明白为什么我们不能选择任何其他具有最大项不同的二项式,并且做完全相同的数学运算……可能我很愚蠢,但我只是不明白为什么…… 直到现在为止完全有道理,那么他们只需要把某些事情完全
— 从天而降

@Zeks因此,我们可以选择其他具有较大项的二项式。如果该术语仍然是多项式(n^k),则结论是相同的,因为k在big-O表示法中删除了(3的删除方法)。但是,如果我们用指数(e^n)代替,它仍然是正确的上限,而不是严格的上限。我们知道期望的高度至少是对数的,因此确定它为最大对数会使它变紧。
— Merbs 2013年

@DavidNathan我不明白您的担心-您是否怀疑1 / n是常数还是可以将其移到求和之外?像常数2一样,在很大程度上出于说明目的将其删除,以简化剩余的证明。
— Merbs's
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.