max-heapify的运行时间分析

[算法] MAX-HEAPIFY最坏情况下子树大小2n/3的由来

      在堆排序中求解MAX-HEAPIFY时间复杂度时,可以得到下面的递归表达式:

T(n)=T(subtree(i)) + Θ(1)

式中关键是要知道subtree(i)的大小。

      由于堆排中用到的二叉树是个近似满二叉树。因此最坏情况出现在最底层只有一半满的时候。

由二叉树性质可以知道,对于只有0个或2个子结点的二叉树,其叶子结点的个数要比内结点个数总和多1。此时可以得到:

    ROOT
   L      R
  / \     / \

 /   \   /   \

 -----   -----

*****      

      设i的右子树结点个数为k

      则i左子树结点个数由两部分组成:

         一部分与右子树对称也有k个结点

         一部分是多出来的最后一层,因为这一层只有一半所以它的结点个数为(2k+1+1)/2

于是可以得到:

k+k+(2k+1+1)/2+1=n

化简得到:

k=(n-2)/3

因此,subtree(i)结点个数为:

k+(2k+1+1)/2=2n/3-1/3≤2n/3

因此MAX-HEAPIFY的时间复杂度递归表达式为:

T(n)=T(2n/3) + Θ(1)

 

 

转自:http://hi.baidu.com/ghymark/item/462ad61d3d2c450c1894ec11

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值