Algs4-2.4.14大堆中一次删除最少要交换几个元素

2.4.14对于没有重复元素的大小为N的堆,一次删除最大元素的操作中最少要交换几个元素?构造一个能够达到这个交换次数的大小为15的堆。连续两次删除最大元素呢?三次呢?

答:一次删除最大元素操作最少交换下取整(lgN)个元素。
证:
删除引起的交换发生在N位置的叶结点与根结点的交换和下沉的过程中的交换,下沉时只与比N位置大的元素进行交换,那么交换次数要达到最少就需要下沉层次最少,下沉层次少就需要确保N位置元素尽可能的大。

在二叉大堆中,比N位置的元素大的元素至少是从根结点到N位置元素的父结点的简单路径上经过的结点,这些结点分布在二叉堆不同的层上,这样的结点个数有下取整(lgN)个。删除最大元素后,至少还有下取整(lgN)-1个结点大于原N位置的元素,并且这些结点仍分布在不同的层上,那么N位置元至少要下沉到下取整(lgN)层,每下沉一层需要与一个元素交换一次,所以最少交换次数为下取整(lgN)次,上述结论得证。

或者说N位置元素至少要下沉到原有层次的上一层,或者说N位置的元素不要下沉到原有层(底层),要保证这一点需要N位置元素是它兄弟的大者,并且其层层父结点也是对应层的兄弟的大者。(N位置元素是叶结点中的最大者也可以保证这一点。)
1)大小为15的堆

图片
2)大小为15的堆的多次删除过程
图片

原文地址:https://www.cnblogs.com/longjin2018/p/9868632.html