在堆排序中求解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