自下而上建立堆时间复杂度推导

建立堆的顺序是bottom-top的。 
正确的证明方法应当如下:

  1. 具有n个元素的平衡二叉树,树高为㏒n,我们设这个变量为h。
  2. 最下层非叶节点的元素,只需做一次线性运算便可以确定大根,而这一层具有2^(h-1)个元素,我们假定O(1)=1,那么这一层元素所需时间为2^(h-1) × 1。
  3. 由于是bottom-top建立堆,因此在调整上层元素的时候,并不需要同下层所有元素做比较,只需要同其中之一分支作比较,而作比较次数则是树的高度减去当前节点的高度。因此,第x层元素的计算量为2^(x-1) × (h-x)。
  4. 又以上通项公式可得知,构造树高为h的二叉堆的精确时间复杂度为: 
    S = 2^(h-1) × 1 + 2^(h-2) × 2 + …… +1 × (h-1) ①

通过观察第四步得出的公式可知,该求和公式为等差数列和等比数列的乘积,因此用错位想减发求解,给公式左右两侧同时乘以2,可知: 
2S = 2^h × 1 + 2^(h-1) × 2+ …… +2 × (h-1) ②

用②减去①可知: S =2^h +2^h-1+2^h-2......2^1- h +1=2^(h+1)-h+1 ③

将h = ㏒n 带入③,得出如下结论:

S = 2*n - ㏒n -1 = O(n)

结论:构造二叉堆的时间复杂度为线性得证。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值