Le tri Radix est théoriquement très rapide lorsque vous savez que les clés sont dans une certaine plage limitée, disons valeurs dans la plage [ 0 … n k - 1 ] par exemple. Si k < lg n, vous venez de convertir les valeurs en base n, ce qui prend du temps Θ ( n ) , effectuez un tri radix en base n , puis convertissez-le à votre base d'origine pour un algorithme global Θ ( n k ) .
Cependant, j'ai lu que dans la pratique, le tri radix est généralement beaucoup plus lent que par exemple un tri rapide aléatoire :
Pour les baies de grande taille, le tri radix a le nombre d'instructions le plus faible, mais en raison de ses performances de cache relativement médiocres, ses performances globales sont inférieures à celles des versions optimisées en mémoire de mergesort et quicksort.
Le tri radix est-il juste un bon algorithme théorique, ou a-t-il des utilisations pratiques communes?
la source
vector
). Mais je ne sais pas, car je n'ai pas lu les papiers de Lamarca.@Robert: Votre lien est assez surprenant (en fait, je n'ai pas pu trouver la phrase citée). Mon expérience personnelle est pour la saisie aléatoire, le tri radix est beaucoup plus rapide que le STL
std::sort()
, qui utilise une variante de quicksort. J'avais l'habitude de rendre un algorithme 50% plus rapide en le remplaçantstd::sort()
par un tri radix instable. Je ne sais pas quelle est la "version optimisée en mémoire" de quicksort, mais je doute qu'elle puisse être deux fois plus rapide que la version STL.Ce billet de blog a évalué le tri radix ainsi que plusieurs autres algorithmes de tri. En bref, dans cette évaluation, il
std::sort()
faut 5,1 secondes pour trier 50 millions d'entiers, tandis que le tri radix sur place / instable prend 2,0 secondes. Le tri de radix stable devrait être encore plus rapide.Le tri Radix est également largement utilisé pour trier les chaînes de manière stable. Des variantes de tri radix sont parfois vues pour la construction de tableaux de suffixes, BWT, etc.
la source
Le tri Radix est également un moyen naturel de trier des mots de longueur fixe sur un alphabet fixe, par exemple dans l'algorithme Kärkkäinen & Sanders ( http://www.cs.cmu.edu/~guyb/realworld/papersS04/KaSa03.pdf )
la source