【问题标题】:How can I keep track of the positions/indices of my elements in a minimum heap?如何在最小堆中跟踪元素的位置/索引?
【发布时间】:2021-05-27 10:08:34
【问题描述】:
heap = MinHeap()
print(heap) #[]
heap.push(5)
print(heap) #[5]
heap.push(1)
print(heap) #[1,5]
heap.push(4)
print(heap) #[1,5,4]
heap.push(20)
print(heap) #[1,5,4,20]
heap.push(2)
print(heap) #[1,2,4,20,5]

每次服务或推入最小堆时,我如何不断跟踪最小堆中每个项目的索引位置?这个复杂度能在O(1)时间复杂度内实现吗?

【问题讨论】:

  • 欢迎来到 SO,您能否更准确地了解预期输出以及您尝试达到的目标?
  • 你是否假设堆中的值是唯一的?

标签: python algorithm time-complexity heap priority-queue


【解决方案1】:

如果您有自己的 MinHeap 实现,则为其添加一个字典属性(如 self._dict),其中键是堆中的值,值是它们的位置(索引)。

因此,如果您当前为某个索引分配(移动、交换、...)值,例如 self.arr[i] = val,那么您也应该使用 self._dict[val] = i

要使其按预期工作,您需要确保堆中的值是唯一的。如果没有,则在您的实现中添加一个频率计数器,并且不要在不同的索引处存储两次相同的值。

【讨论】:

    猜你喜欢
    • 2010-09-07
    • 1970-01-01
    • 2011-05-25
    • 2015-07-25
    • 2012-06-27
    • 2012-03-05
    • 1970-01-01
    • 2021-10-25
    • 1970-01-01
    相关资源
    最近更新 更多