堆排序自下而上建立大根堆时间复杂度为O(n)的证明

建立大根堆时,设有n个记录的初始序列所对应的完全二叉树的深度为h,建初堆时,每个非终端结点即非叶子节点都要自上而下进行"筛选"。由于第i层上的结点数小于等于 2 i − 1 2^{i-1} 2i1,且第i层结点最大下移的深度为h-i,每下移一层要做两次比较,则有:
h = ⌊ l o g 2 ( n ) ⌋ + 1 h=\lfloor log_2(n)\rfloor+1 h=log2(n)+1

所以建初堆时关键字总的比较次数为:
∑ i = h − 1 1 2 i − 1 ⋅ 2 ⋅ ( h − i ) = ∑ i = h − 1 1 2 i ( h − i ) \sum_{i=h-1}^1 2^{i-1}\cdot2\cdot(h-i)=\sum_{i=h-1}^12^i(h-i) i=h112i12(hi)=i=h112i(hi)
令 j = h − i , 则 : i = h − j 令j=h-i,则:i=h-j j=hi,i=hj
∑ i = h − 1 1 2 i ( h − i ) = ∑ j = 1 h − 1 2 h − j ⋅ j = ∑ j = 1 h − 1 2 h j 2 j = ∑ j = 1 h − 1 2 ⌊ l o g 2 ( n ) ⌋ + 1 ⋅ j 2 j \sum_{i=h-1}^12^i(h-i) = \sum_{j=1}^{h-1}2^{h-j}\cdot j = \sum_{j=1}^{h-1}2^h\frac j{2^j}=\sum_{j=1}^{h-1}2^{\lfloor log_2(n)\rfloor+1}\cdot\frac j{2^j} i=h112i(hi)=j=1h12hjj=j=1h12h2jj=j=1h12log2(n)+12jj
∑ j = 1 h − 1 2 ⌊ l o g 2 ( n ) ⌋ + 1 ⋅ j 2 j = 2 ⌊ l o g 2 ( n ) ⌋ + 1 ∑ j = 1 h − 1 j 2 j ≤ 2 n ∑ j = 1 h − 1 j 2 j \sum_{j=1}^{h-1}2^{\lfloor log_2(n)\rfloor+1}\cdot\frac j{2^j}=2^{\lfloor log_2(n)\rfloor+1}\sum_{j=1}^{h-1}\frac j{2^j}\leq2n\sum_{j=1}^{h-1}\frac j{2^j} j=1h12log2(n)+12jj=2log2(n)+1j=1h12jj2nj=1h12jj
S = 1 2 + 2 2 2 + 3 2 3 + . . . + h − 2 2 h − 2 + h − 1 2 h − 1 S = \frac12+ \frac2{2^2}+\frac3{2^3}+...+\frac{h-2}{2^{h-2}}+\frac{h-1}{2^{h-1}} S=21+222+233+...+2h2h2+2h1h1
2 S = 1 + 2 2 + 3 2 2 + . . . + h − 2 2 h − 3 + h − 1 2 h − 2 2S =1+ \frac2{2}+\frac3{2^2}+...+\frac{h-2}{2^{h-3}}+\frac{h-1}{2^{h-2}} 2S=1+22+223+...+2h3h2+2h2h1
S = 2 S − S = 1 + ( 1 2 + 1 2 2 + . . . + 1 2 h − 2 ) − h − 1 2 h − 1 S = 2S - S = 1+(\frac12+\frac1{2^2}+...+\frac{1}{2^{h-2}})-\frac{h-1}{2^{h-1}} S=2SS=1+(21+221+...+2h21)2h1h1
S = 1 + ( a 1 − a n ∗ q 1 − q ) − h − 1 2 h − 1 = 1 + ( 1 − 1 2 h − 2 ) − h − 1 2 h − 1 S = 1+(\frac {a_1-a_n*q}{1-q})-\frac{h-1}{2^{h-1}}=1+(1-\frac1{2^{h-2}})-\frac{h-1}{2^{h-1}} S=1+(1qa1anq)2h1h1=1+(12h21)2h1h1
当 n → ∞ , 则 h → ∞ , lim ⁡ n → ∞ S = lim ⁡ h → ∞ S = 2 当n\to \infty,则h\to \infty,\lim_{n\to \infty}S=\lim_{h\to \infty}S=2 n,hnlimS=hlimS=2
故 : 建 立 堆 的 比 较 次 数 为 : ∑ i = h − 1 1 2 i ( h − i ) ≤ 2 n ∑ j = 1 h − 1 j 2 j < 4 n 故:建立堆的比较次数为:\sum_{i=h-1}^12^i(h-i)\leq2n\sum_{j=1}^{h-1}\frac j{2^j}<4n :i=h112i(hi)2nj=1h12jj<4n
综上,建立堆的时间复杂度是O(n)的,暴力建堆的同志不要瞎闹!

  • 12
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

USTC暖暖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值