Le module heapq

Adresse : http://docs.python.org/3.3/library/heapq.html

Le module heapq implémente un modèle de liste triée “par tas”.

On dit qu’une liste L est un tas si, pour tout indice k dont les enfants existent, on a les inégalités : L[k] <= L[2*k + 1] et L[k] <= L[2*k + 2].

Tas binaire minimum représentant la liste [3, 5, 9, 7, 11, 13, 14, 8, 12, 15, 18, 17]
Représentation arborescente du tas binaire.

Par exemple, [3,5,9,7,11,13,14,8,12,15,18,17] est un tas, qu’il est commode de représenter sous forme arborescente.

Les opérations de maintien de la structure de tas (ajouts ou suppressions) y sont en temps logarithmique par rapport à la longueur de la liste. La valeur minimum est située au début du tas.

Remarque : les tas implémentés dans le module heapq sont des “tas-min” (chaque élément parent est inférieur ou égal à ses deux enfants), alors que l’habitude est plus souvent de considérer des “tas-max”. Pour la théorie, on se reportera à son livre favori sur l’algorithmique et les structures de données.

Le module heapq contient deux fonctions renvoyant la liste (ordonnée) des n plus grands (ou des n plus petits) éléments d’un itérable. C’est efficace si n n’est pas trop grand (sinon utiliser sorted) et si n != 1 (sinon utiliser min ou max).

Le module heapq contient également une fonction merge permettant de fusionner deux ou plusieurs itérables (supposés déjà triés dans l’ordre croissant) en un seul générateur (comme toujours avec les générateurs, l’ensemble des valeurs n’est pas chargé en mémoire en même temps, mais il est disponible à la demande dans un contexte d’itération) :

Retour à l’accueil du cours Python/Numpy

Sommaire du chapitre 7

  1. Le module random
  2. Le module decimal
  3. Le module fractions
  4. Le module string
  5. Le module itertools
  6. Les modules operator et functools
  7. Le module time
  8. La classe Counter du module collections
  9. La classe deque du module collections
  10. Le module heapq
  11. Le module bisect
  12. Le module copy
  13. Autres modules et adresses utiles