考虑以下元素列表。
h = [38, 203, 1, 45, 39, 10, 34, 90, 10, 2, 100, 1]
如果将其转换为基于数组的堆,则如下所示。import heapq
heapq.heapify(h)
# now we have a heap that looks like this
# [1, 2, 1, 10, 39, 10, 34, 90, 45, 203, 100, 38]
如何最好地找出这个堆中数字 39
的位置呢?
一种方法是不断从堆中弹出元素,直到返回39为止,并且记录我们从堆中弹出元素的次数,这样我们就可以知道它的位置。然而,这并不是很高效,因为我们会修改堆本身。
有没有更好的解决方法呢?
39
的情况下,有6个大于39
的元素,因此39
将位于第7个位置或排名。我想知道的原因是,如果您正在使用堆来实现优先队列,则知道元素所在的位置将非常有用。 - Jonathanclass PQi
:http://www.cs.princeton.edu/~rs/Algs3.java1-4/code.txt - MBo