我有一个创建两个堆 minHeap 和 maxHeap 的算法。两者之间的唯一区别是 maxHeap 反转了 minHeap 的符号,这是一个使用 Python 的 heapq 数据结构作为最大堆的简单 hack。这是我创建堆的代码(堆键基本上是字典中一周中给定日期的工人数量):
for day in self.weekDict:
if day != 'Saturday' and len(self.weekDict[day]) != 0: #saturdays and holidays not part of optimization
heapq.heappush(minHeap, (len(self.weekDict[day]), day))
heapq.heappush(maxHeap, (-len(self.weekDict[day]), day))
minHeap 按预期工作,但是当有多个相同的键时,最大堆给了我奇怪的行为。见下文:
[(-8, 'Thursday'), (-7, 'Monday'), (-5, 'Friday'), (-7, 'Wednesday'), (-7, 'Tuesday')]
为什么最后两天不正常?是不是因为只有第一天保证是最小值,并且一旦我从堆中弹出第一天就会自动调整自己?