关于建堆的一些时间复杂度

当然你得知道堆的物理结构是数组,小堆是下面的数大。

然后去计算悲观预期,即最坏的情况

1.建小堆:

①向下调(从下往上对每棵小树)

 从倒数第二层开始对每个小树进行调整。

结果:

F(h)=2^(h-2)*1 + 2^(h-3)*2 + ... + 2^1*(h-2) + 2^0*(h-1)

分析:

倒数第二层为2^(h-2)*1,2^(h-2)即为倒数第二层的节点个数,假设每个数都比儿子节点大,都要向下调整,调整需要调整1次(这里当然替换大的儿子节点)。那么这么多个节点就要调整这么多次。

后面同理。

然后是化简结果,需要使用错位相减法。

  F(h)=                    2^(h-2)*1 + 2^(h-3)*2 + ... + 2^2*(h-3)+2^1*(h-2) + 2^0*(h-1)

2*F(h)=2^(h-1)*1 + 2^(h-2)*2 + 2^(h-3)*3 +... + 2^2*(h-2) + 2^1*(h-1)

∴F(h)=2^(h-1) + 2^(h-2) + 2^(h-3) + ... + 2^2 + 2^1 - (h-1)

即F(h)=2^(h-1) + 2^(h-2) + 2^(h-3) + ... + 2^2 + 2^1 + 2^0 - h

所以F(h)=2^h-1 - h

(我们是用h计算,最后还是要回到节点个数)

关系:

h是树的高度

N是节点个数

有2^h-1 = N

∴F(N) = N - log₂(N+1)

因为后者影响小

所以时间复杂度为O(N)

②向上调

 F(h) = 2^1*1 + 2^2*2 + ... + 2^(h-2)*(h-2) + 2^(h-1)*(h-1)

...

时间复杂度为 O(N*log₂N)

————

————

我们发现向下调是对节点数多的调少量次,对上面节点数少的调多量次

而向上调是对节点数少的调少量次,对节点数多的调多量次

所以向下调时间复杂度更小

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值