试图想出一个下界,比如最大堆中第 n 大键的位置。假设堆排列在数组中。我认为上限的 min(2^n-2, array size -1) 是否总是以 0 为下限?
最佳答案
对问题的初步调查揭示了 n 与上下界之间的以下关系(假设堆中有 14 个元素)
n lb up
1 1 1
2 2 3
3 2 7
4 2 14
9 3 14
10 4 14
12 5 14
13 6 14
14 8 14
要确定可能比堆数组特定位置中的元素大的元素数,请计算以该位置为根的子树的大小。这两个数字然后通过公式相关
# of elements possible larger = total number of elements - size of subtree - 1
编辑:
请注意,计算是反向执行的。给定数组/堆中的位置,可以确定如果堆已排序,则该值将位于哪个位置。给定节点,堆可以分为三个分区:
如果我们查看一个包含 14 个元素的示例堆,并希望确定第 6 个位置中可能值的范围,则组如下:
因此,下限是 3(第一组元素的数量 + 1),而上限是 11(第一组元素的数量 + 第三组元素的数量 + 1)。
关于binary-heap - 堆数据结构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2492884/