我已经看到了一些使用heapifyUp()和heapifyDown()方法的堆的实现。使用heapifyDown(无法我们实施heapifyUp())为:heapifyUp()方法的时间复杂度是多少?
for(int i = heap_size/2; i >= 0; i--)
heapifyDown(i);
我beleive上面的代码片断的时间复杂度是O(n)(根据Cormen)。
现在heapifyUp()实现如下:
while(i!=0 && arr[parent(i)]>arr[i])
{
swap(arr[i],arr[parent(i)]);
i = parent(i);
}
现在,如果我没看错的上述实施timeplexity是O(LOGN)
现在,因为O(LOGN)是更好比O(n)heapifyUp()方法肯定做得更好。那么为什么Cormen使用自下而上的heapify(方法1)来构建堆?
请纠正我,如果我错了,哪个实施更好?
您能给出您参考的Cormen纸张的链接吗?是否正在专门讨论在构建堆时添加值后会发生什么? – Justin