如何证明二叉搜索树的平均高度为O(logn)?

时间:2020-04-25 15:59:44

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

我想到了一个证明,但无法在纸上画草图。 我对二元搜索树的高度有一个递归关系,就是

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

如果k是根和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) 但这没有解决.. 因此,plz建议我应如何进一步进行。 (我的方法从一开始就完全正确吗?从头开始,还要告诉我有关的信息吗?)

1 个答案:

答案 0 :(得分:2)

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

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

命题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

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

我也建议您查看Mit讲座Binary Search Trees, BST Sort

还请查阅算法书籍中的第3.2章,深入介绍了二进制搜索树