minHeap と maxHeap の 2 つのヒープを作成するアルゴリズムがあります。2 つの唯一の違いは、maxHeap が minHeap の符号を逆にすることです。これは、Python の heapq データ構造を最大ヒープとして使用するための単純なハックです。ヒープを作成するためのコードは次のとおりです (ヒープ キーは基本的に、特定の曜日の辞書内のワーカーの数です)。
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')]
最後の 2 日間はなぜ順不同なのですか? 最初の日だけが最小であることが保証されており、最初の日をポップすると、ヒープが自動的に調整されるためですか?