max-heapify的运行时间分析

来源:互联网 发布:Centos内核查看 编辑:程序博客网 时间:2024/06/06 08:47

[算法] 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

原创粉丝点击