Aller au contenu

Tri par file de priorité

Un article de Wikipédia, l'encyclopédie libre.

Un tri par file de priorité[1] est un algorithme de tri utilisant comme support principal une implémentation du type abstrait file de priorité.

Si l'exemple classique de tri par file de priorité est le tri par tas, on peut aussi classifier d'autres tris usuels comme tri par file de priorité comme le tri par insertion, le tri par sélection ou encore le tri rapide.

Une fois que l'on dispose d'une file de priorité, on dispose alors des opérations enfiler, défiler et est_vide[2].

Pour trier une collection d'éléments, on va alors itérer une première fois la collection des éléments à trier pour les enfiler dans la file de priorité. Ensuite, tant que la file de priorité n'est pas vide (avec est_vide) on peut en défiler les éléments dans l'ordre triés.

Pseudo-code

[modifier | modifier le code]

Tri par file de priorité
Entrée = Un ensemble d'éléments E muni d'un ordre total <
Sortie = Une liste d'éléments triés selon <
fonction tri_file_priorité (E) :
    P une file de priorité initialement vide
    L une liste initialement vide
    tant que E non vide :
        e <- retirer élément de E
        enfiler e dans P
    tant que P non vide :
        e <- défiler P
        ajoute e à L
    renvoyer L


Représentation des tris classiques

[modifier | modifier le code]
nom de l'algo implémentation de la file de priorité meilleur cas cas moyen pire cas
Smoothsort Tas de Léonard
Tri par tas Tas
Tri arborescent ABR équilibré
Tri rapide ABR
Tri par insertion Tableau trié
Tri par sélection Tableau non trié

Tri par tas

[modifier | modifier le code]

Si la file de priorité est implémentée par un tas, le tri par file de priorité associée revient au tri par tas par définition de celui-ci[3].

Tri par insertion

[modifier | modifier le code]

Si la file de priorité est implémentée par une liste triée, le tri par file de priorité associée revient au tri par insertion[1].

En effet, enfiler un élément revient à une opération d'insertion du tri par insertion. La seconde boucle pour defiler n'est pas nécessaire comme l'on peut renvoyer la file de priorité elle-même qui est la liste triée.

Tri par sélection

[modifier | modifier le code]

Si la file de priorité est implémentée par une liste quelconque, le tri par file de priorité associée revient au tri par sélection[1].

En effet, la file de priorité est la liste d'élément elle-même. La première boucle pour enfiler les éléments n'est pas nécessaire. La seconde, qui consister à défiler les éléments un par un, reviens à l'opération de sélection des éléments du tri par sélection.

Si la file de priorité est implémentée par un arbre binaire de recherche, le tri par file de priorité associée revient au tri rapide.

En effet, les différents nœuds de l'arbre binaire de recherche sont les pivots du tri rapide.

Utilisation d'un tri pour faire une file de priorité

[modifier | modifier le code]

Si l'implémentation d'un tri à partir d'une file de priorité est assez immédiat, la réciproque est moins intuitive.

Pourtant, on peut déduire de l'existence d'algorithmes de tri l'existence d'une file de priorité associée. En effet, d'après Mikkel Thorup[2] :

Si l'on peut trier clef en temps par clef alors, il existe une file de priorité avec une complexité d'enfiler et de défiler en .

Notes et références

[modifier | modifier le code]
  1. a b et c « FILES A PRIORITÉ » Accès libre [PDF] (consulté le )
  2. a et b Mikkel Thorup, « Equivalence between priority queues and sorting », J. ACM, vol. 54, no 6,‎ , p. 28–es (ISSN 0004-5411, DOI 10.1145/1314690.1314692, lire en ligne, consulté le )
  3. François Schwarzentruber, « Files de priorité et Tas Binaires » Accès libre [PDF], (consulté le )