File de priorité

En informatique, une file de priorité est un type abstrait élémentaire sur laquelle on peut effectuer trois opérations :

  • insérer un élément ;
  • extraire l'élément ayant la plus grande clé ;
  • tester si la file de priorité est vide ou pas.

Ainsi, elle permet d'implémenter efficacement des planificateurs de tâches, où un accès rapide aux tâches d'importance maximale est souhaité. On la retrouve par exemple dans les ordonnanceurs des systèmes d'exploitation, notamment le noyau Linux[1].

On ajoute parfois à cette liste l'opération « augmenter/diminuer la clé d'un élément », utilisée par exemple dans l'algorithme de Dijkstra.

Implémentations

Une implémentation simple de la file de priorité consiste à utiliser une liste chaînée non triée. Dans ce cas, la complexité de l'insertion serait O(1) mais celle de l'extraction du plus grand élément serait linéaire en la taille de la structure, causée par la recherche de l'élément de clé maximale. Cette solution est donc inefficace.

D'autres implémentations permettent de réaliser toutes les opérations efficacement, c'est-à-dire en O(1) ou O(log n) (éventuellement en complexité amortie). La principale est le tas, lui-même implémenté via un tableau. D'autres améliorations, plus difficiles à implémenter, existent, telles que le tas binomial et le tas de Fibonacci.

La file de priorité est déjà implémentée dans plusieurs langages de programmation :

  1. En Python, le module heapq[2] implémente la file de priorité.
  2. En C++, la STL fournit une implémentation nommée priority_queue[3]. Ce type de file se base sur un des conteneurs présents dans la STL (liste, vecteur, etc.) et manipule des objets d'un type défini par l'utilisateur. Il est nécessaire de fournir une fonction de comparaison qui permettra à la bibliothèque d'ordonner la file.
  3. En Java, c'est la classe PriorityQueue[4] qui implémente la file de priorité.

Utilisations notables

Les algorithmes suivants doivent leur efficacité à la structure de tas :

La file de priorité peut notamment être utilisée comme optimisation de l'algorithme algorithme A* en facilitant l'accès au meilleur nœud stocké dans la liste des nœuds ouverts (open list).

Références

🔥 Top keywords: Wikipédia:Accueil principalListe de sondages sur les élections législatives françaises de 2024Spécial:RechercheJordan BardellaChampionnat d'Europe de football 2024N'Golo KantéJodie DevosKylian MbappéÉlections législatives françaises de 2024Marcus ThuramLe Jardin des Finzi-Contini (film)Maria Schneider (actrice)Cookie (informatique)Championnat d'Europe de footballNouveau Front populaireKevin DansoAntoine GriezmannÉric CiottiChampionnat d'Europe de football 2020Dominique SandaMike MaignanWilliam SalibaLionel JospinÉlections législatives de 2024 dans l'EssonneFront populaire (France)Françoise HardyÉlections législatives de 2024 à ParisRassemblement nationalJean-Luc MélenchonFichier:Cleopatra poster.jpgOlivier GiroudSébastien ChenuDidier DeschampsLa Chronique des BridgertonÉlections législatives de 2024 dans les YvelinesLilian ThuramListe de partis politiques en FranceAnne SinclairGabriel Attal