堆排序建堆复杂度在特殊情况下的推导

  堆排序分为两个过程,一个建堆的过程,一个是从堆顶取数的过程。这里针对第一个过程,给出在堆的形式是完全满二叉树的情况下,建堆复杂度Ο(n)的简单推导。

  

  上图是一个完全满二叉树,假设一个完全满二叉树的节点数为n,树高为h(共h层),则满足h = log(n + 1)。由堆的构建过程可以知道,第一层(从下往上)进行的比较次数为0次,第二层为1次,。。。,第h层(最上一层)为h - 1次,而每一层对应的节点数分别为2^h, 2^(h - 1), ..., 2^0个,所以总计的比较次数为

  T(n) = 0 * 2^h + 1 * 2^(h - 1) + 2 * 2^(h - 2) + ... + (h - 1) * 2^0                                                                                                 式(1)

           2T(n) = 1 * 2^h + 2 * 2^(h - 1) + 3 * 2^(h - 2)... + (h - 1) * 2^1                                                                                                   式(2)

式(2)减式(1)得

T(n) = 2^h + 2^(h - 1) + 2^(h - 2)... + 2^1 - (h - 1)                                                                                                              式(3)

所以

                   T(n) = 2^(h + 1) - h - 1 = 2n - log(n + 1) + 1 = O(n)

推到错误,纯属正常。

 

转载于:https://www.cnblogs.com/liujinyao/p/4708306.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值