objectif
Planifier des tâches avec priorités en utilisant un tas binaire.
code minimal
import heapq, itertools
counter = itertools.count()
heap = []
def push(priority, item):
heapq.heappush(heap, (priority, next(counter), item))
def pop():
return heapq.heappop(heap)[-1]
push(10, "low"); push(1, "high"); push(10, "low2")
print(pop() == "high") # attendu: True
utilisation
import heapq
h = []
heapq.heappush(h, (2, "b")); heapq.heappush(h, (1, "a"))
print(heapq.heappop(h)[1] == "a")
variante(s) utile(s)
import heapq, itertools
heap = []; c = itertools.count()
for p in [5,3,4]: heapq.heappush(heap, (p, next(c)))
print([heapq.heappop(heap)[0] for _ in range(3)] == [3,4,5])
notes
- Ajoutez un compteur pour stabiliser l’ordre entre priorités égales.
- Les priorités plus petites sortent en premier (min-heap).