【发布时间】:2018-01-18 20:47:56
【问题描述】:
我见过一些使用 heapifyUp() 和 heapifyDown() 方法。我们不能使用 heapifyDown() 来实现 heapifyUp() 吗:
for( int i = heap_size/2; i >= 0; i--)
heapifyDown(i);
我相信上述代码 sn-p 的时间复杂度是 O(n)(根据 Cormen)。
现在 heapifyUp() 实现如下:
while(i!=0 && arr[parent(i)]>arr[i])
{
swap(arr[i],arr[parent(i)]);
i = parent(i);
}
如果我没记错的话,上述实现的时间复杂度是 O(logn)
现在由于 O(logn) 比 O(n) 更好,所以 heapifyUp() 方法当然做得更好。那么Cormen为什么要使用bottom-up heapify(方法一)来建堆呢??
如果我错了,请纠正我,哪个实现更好?
【问题讨论】:
-
你能给你引用的 Cormen 论文的链接吗?是专门讨论在构建堆时添加值后会发生什么?
标签: data-structures heap priority-queue heapsort binary-heap