要构建最大堆树,我们可以siftDown
或siftUp
,通过筛选下来,我们从根开始,并将它与它的两个孩子,那么我们有两个孩子的更大的元素替换它,如果这两个孩子是小然后我们停止,否则我们继续筛选该元素,直到我们(或课程的再次,直到该元素是它的两个孩子大)到达叶节点。
现在,我们只需要做到这一点n/2
次,因为叶子的数量为n/2
,和叶子会满足,当我们完成heapifying上水平的最后一个元素之前的最后一个堆性质(前叶) -因此,我们将留下n/2
的元素heapify。
现在,如果我们使用siftUp
,我们将与叶开始,最终我们需要heapify所有n
元素。
我的问题是:当我们使用siftDown
,不是我们基本上做两个比较(对比元素,它的两个孩子),而不是只有一个比较使用时siftUp
,因为我们只该元素比较其父母一方? 如果是的话,那不就意味着我们正在加倍的复杂性和真正结束了作为筛选下来完全相同的复杂性?