Tri par paquets

Cet article est une ébauche concernant l’informatique.

Vous pouvez partager vos connaissances en l’améliorant (comment ?) selon les recommandations des projets correspondants.

Tri par paquets
Problèmes liés
Algorithme, algorithme de triVoir et modifier les données sur Wikidata
Structure des données
TableauVoir et modifier les données sur Wikidata
Basé sur
Pigeonhole sort (en)Voir et modifier les données sur Wikidata
Complexité en temps
Pire cas
O ( n 2 ) {\displaystyle O(n^{2})} Voir et modifier les données sur Wikidata
Complexité en espace
Pire cas
O ( n k ) {\displaystyle O(n\cdot k)} Voir et modifier les données sur Wikidata
Moyenne
O ( n + n 2 k + k ) {\displaystyle O(n+{\frac {n^{2}}{k}}+k)} Voir et modifier les données sur Wikidata

modifier - modifier le code - modifier WikidataDocumentation du modèle

Le tri par paquets est un algorithme de tri qui fonctionne sur des nombres réels appartenant à un intervalle borné fixé à l'avance.

Le principe de ce tri consiste à partitionner régulièrement l'intervalle d'entrée en autant de sous-intervalles que l'entrée comporte d'éléments à trier, et à distribuer les données selon leur valeurs en autant de paquets correspondant à ces sous-intervalles. Les paquets sont alors triés séparément à l'aide d'un autre algorithme de tri.

Si les nombres en entrée sont uniformément distribués dans l'intervalle initial, alors la complexité temporelle moyenne du tri par paquets est linéaire, et ce quel que soit l'algorithme de tri auxiliaire utilisé.

Description de l'algorithme

Le tri par paquets prend en entrée un tableau T de n nombres réels appartenant à un intervalle [a, b[. Le déroulement de l'algorithme est le suivant :

  • Créer n listes L 0 , , L n 1 {\displaystyle L_{0},\dots ,L_{n-1}} appelées paquets. Le paquet L k {\displaystyle L_{k}} est associé à l'intervalle I k = [ a + k ( b a ) / n , a + ( k + 1 ) ( b a ) / n [ {\displaystyle I_{k}=[a+k(b-a)/n,a+(k+1)(b-a)/n[} .
  • Pour chaque élément T[i] :
    • Calculer l'intervalle I k {\displaystyle I_{k}} dans lequel il se trouve : k = n ( T [ i ] a ) / ( b a ) {\displaystyle k=\lfloor n(T[i]-a)/(b-a)\rfloor } , où la notation {\displaystyle \lfloor \cdot \rfloor } désigne la partie entière inférieure.
    • Ajouter T[i] à L k {\displaystyle L_{k}} .
  • Trier chaque liste L k {\displaystyle L_{k}} , par exemple avec un tri par insertion.
  • Renvoyer la concaténation des listes L 0 , , L n 1 {\displaystyle L_{0},\dots ,L_{n-1}} .

Complexité

Dans le pire cas, les n {\displaystyle n} nombres de l'entrée se trouvent dans le même sous-intervalle et sont tous placés dans le même paquet. Ainsi, la complexité en temps dans le pire cas est égale à la complexité dans le pire cas de l'algorithme auxiliaire, par exemple O ( n 2 ) {\displaystyle O(n^{2})} avec un tri par insertion et O ( n log n ) {\displaystyle O(n\log \cdot n)} avec un tri fusion.

Comme il y a autant de paquets que de nombres, la taille moyenne de chaque paquet est 1. En utilisant l'hypothèse de distribution uniforme, on peut aussi démontrer que le temps moyen pour trier un paquet est O ( 1 ) {\displaystyle O(1)} , et ce, que l'on utilise un algorithme de tri en O ( n log n ) {\displaystyle O(n\cdot \log n)} ou O ( n 2 ) {\displaystyle O(n^{2})} [1]. Par conséquent, la complexité en moyenne de l'algorithme complet est O ( n ) {\displaystyle O(n)} .


Notes et références

  1. Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest et Clifford Stein, Introduction à l'algorithmique, Dunod, [détail de l’édition] (section 8.4, p. 169)
v · m
Algorithmes de tri
Tris par comparaisons
Sans hypothèse autre
Complexité moyenne O ( n log n ) {\displaystyle {\mathcal {O}}(n\log n)}
Complexité moyenne O ( n 2 ) {\displaystyle {\mathcal {O}}(n^{2})}
Complexité moyenne moins bonne que O ( n 2 ) {\displaystyle {\mathcal {O}}(n^{2})}
Avec hypothèse supplémentaire
Réseau de tri
Tri utilisant d'autres opérations
Applications
  • icône décorative Portail de l'informatique théorique