随机化的二叉搜索树总结(treap,随机输入)

看数据结构的时候,书里面说对于随机输入的序列,BST的期望深度是log(n),当时没当一回事(其实是证明看不懂),这两天复习二叉搜索树遇到树堆(treap)又回去翻了一下证明过程,其实还蛮简单的。

   总结起来也就一句话:

   只要保证BST的任意子树的根节点选取是随机的,那么这颗树的期望深度就必然是log(n).

证明如下:

 1.首先要定义一个概念——内部路径长(D(N)),也就是一个树内每个节点的深度和,平均一下也就得到了一棵树的期望深度。

  D(N) = D(M) - D(N-M-1) + N-1 一颗树的路径长 = 左子树的路径长 + 右子树的路径长 + N-1 (子树的节点个数)

 假如 M 取任意值的概率一样(1/N),那么有:


这个通项公式最终规模是D(N) = O(NlogN)的。

2.对于随机输入的数据,任意值为根的概率是一样的。

(1)排在第一位的值必然为根,由于输入数据随机,那么为排在第一的数自然是随机的。

3.treap树

我们知道优先级最小的数据必然是根(堆序性),并且treap的优先级是随机给予的,那么一个数有最小优先级的概率自然是相等的,那么自然的,任一值被选取为根的概率是相同的,自然treap树的平均深度为logN。



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值