gpt4 book ai didi

algorithm - MinHeap删除理解

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:50:43 24 4
gpt4 key购买 nike

我很难理解教授给我的关于堆的其中一个问题的解决方案。

Give pseudocode for the routine Min-Heap-Delete(A, k). Assume that key k is at location l of the heap and that 1 ≤ l ≤ n.

我的解决办法是

Exchange A[k] with A[A.size() - 1]

A.size() = A.size() - 1

Min-heapify(A,k)

但是,我的解法和第一部分教授的解法有区别。

Exchange A[k] with A[A.heap_size()]

A.heap_size() = A.heap_size() - 1

最小堆化(A,k)

为什么我们要使用 A.size() 而不是 A.size() - 1?自从堆从索引 1 开始以来,A.size() 不会过度索引表示堆的数组吗?

enter image description here

在这种情况下,A.size() 会给我们 10。但是,A[10] 不存在并且会导致错误。所以,为什么不是A[10-1]获取堆树的最后一个节点呢?

最佳答案

因为教授使用从 1 开始的计数而不是从零开始的计数。注意 1 ≤ l ≤ n 条件。您可能错过了索引是 A。heap_size - 堆大小而不是数组大小,因此最后一个元素将被称为 A[9]

对于堆来说这是相当常见的做法并且很方便,因为子/父索引关系看起来非常简单:

childs = parent * 2 and parent * 2 + 1
parent = child / 2

请注意,图片中的数组实际上是基于 zeo 的,具有未使用的零条目

关于algorithm - MinHeap删除理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52744742/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com