堆是一种非常有用的数据结构类型,它可以用作执行优先级队列的存储结构,也可以用来实现堆排序。BUILD-HEAP算法(即建堆算法)的功能是从无序的输入数组中构建一个堆(最大堆或者最小堆),它是具有线性时间复杂度的算法(这个知识点在《算法导论》中也有被提及)。本文将讨论如何解释及证明这个结论。
首先来回顾一下BUILD-HEAP算法,下面是算法的流程:
BUILD-HEAP(A) heapsize := size(A); for i := downto 1 do HEAPIFY(A, i); end for END
因为在【1】或【2】中都有介绍过这个算法,此处将不再重复,本文的重点将放在对其时间复杂度的分析上。
直觉上,BUILD-HEAP算法的时间复杂度应该是,因为HEAPIFY算法的复杂度是