Share to: share facebook share twitter share wa share telegram print page

 

Tri par file de priorité

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.

Principe

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

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

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

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

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

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.

Tri rapide

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é

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

  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 )

Information related to Tri par file de priorité

Prefix: a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9

Portal di Ensiklopedia Dunia

Kembali kehalaman sebelumnya