建堆时间复杂度的计算
建堆的方式有两种,比较常见的建堆方式是自底向上,因为时间复杂度更低,为O(N).
- 自顶向下的建堆方式
该建堆方式是从根节点开始,然后一个个的插入堆的末尾,向上进行调整。假设堆的高度为 ,每层节点数为 , 每层的高度定义为该层到堆的根节点的层数,设为 .每层的调整的时间复杂度为 .
则该建堆方式的时间复杂度为
由于上述为差比数列之和,使用错位相减法即可求得结果,即
假设该堆理想情况下为满二叉树,则存在 ,即 ,则有
即时间复杂度为
- 自底向上的建堆方式
该建堆方式是从倒数第二层的节点(叶子节点的上一层)开始,从右向左,从下到上的向下进行调整。
同样的,假设该堆为满二叉树,堆高为 。同样的,假设每层高度为 , 每层结点数为 , 则建堆复杂度为 , 则有
同样的,该数列和为差比数列。因此,可以用错位相减法,得到时间复杂度为
即,时间复杂度为 .