如何在最小堆中跟踪元素的位置/索引?
Posted
技术标签:
【中文标题】如何在最小堆中跟踪元素的位置/索引?【英文标题】: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,您能否更准确地了解预期输出以及您尝试达到的目标? 你是否假设堆中的值是唯一的? 【参考方案1】:如果您有自己的 MinHeap 实现,则为其添加一个字典属性(如 self._dict
),其中键是堆中的值,值是它们的位置(索引)。
因此,如果您当前为某个索引分配(移动、交换、...)值,例如 self.arr[i] = val
,那么您也应该使用 self._dict[val] = i
。
要使其按预期工作,您需要确保堆中的值是唯一的。如果没有,则在您的实现中添加一个频率计数器,并且不要在不同的索引处存储两次相同的值。
【讨论】:
以上是关于如何在最小堆中跟踪元素的位置/索引?的主要内容,如果未能解决你的问题,请参考以下文章