Algorithm 在没有重复密钥的N大小堆中,删除最大值操作期间必须交换的最小项数是多少?

Algorithm 在没有重复密钥的N大小堆中,删除最大值操作期间必须交换的最小项数是多少?,algorithm,heap,priority-queue,Algorithm,Heap,Priority Queue,我在塞吉威克的书中遇到了这个问题。在他的网站上,他说答案是2,但我不明白如何达到2,因为要消除最大值,我们需要先将max元素与最后一个元素交换,减少N,然后将最后一个元素从顶部向下沉到它的位置,这需要logN交换。那么,如何实现2 交换和删除最大值(&M): 然后我们需要接收L节点,这意味着我们需要进行更多的交换。下面是15个节点的示例。这个想法是:让根的子代变大(让左边的子代变大),但其他左边的子代要比右边的子代小得多。那么你只能交换两次 100

我在塞吉威克的书中遇到了这个问题。在他的网站上,他说答案是2,但我不明白如何达到2,因为要消除最大值,我们需要先将max元素与最后一个元素交换,减少N,然后将最后一个元素从顶部向下沉到它的位置,这需要logN交换。那么,如何实现2

交换和删除最大值(&M):


然后我们需要接收L节点,这意味着我们需要进行更多的交换。

下面是15个节点的示例。这个想法是:让根的子代变大(让左边的子代变大),但其他左边的子代要比右边的子代小得多。那么你只能交换两次

                 100
       99                   90
   9       8            89      88
7    6   5   4        87   86   85   84
您将切换
84100
,然后切换
9984
,就完成了。两次互换


对于
n>3
,在第一次交换之后,根目录的两个子目录都不可能不大于新根目录(否则它就不是一个堆)。所以你必须再做一次交换。作者很可能想写互换,而不是项目。

问题是必须交换的项目数量,而不是交换的数量。最小交换次数为1次,一次交换将涉及2次交换

例如:

       3
   1       2

在这里,两个元素之间只有一个交换:3和2

但他接着要求“给出一个大小为15的堆,以达到最小值”。所以,不知何故,我猜这也应该是2。同样在你的例子中,你交换了1次,而不是2次。@paul1076问题是“物品数量”,而不是“交换数量”。我的示例交换了2项。。。但是两次交换也可以。哦,是的,没错。不管怎么说,它应该还是2。对于任何N,当堆的大小为1时,我可以说最小值为0,因为您不需要交换任何东西。那案子呢?