Die Radix-Sortierung ist theoretisch sehr schnell, wenn Sie wissen, dass sich die Tasten in einem bestimmten begrenzten Bereich befinden, z. B. Werte im Bereich [ 0 … n k - 1 ] . Wenn k < lg n Sie nur die Werte zu Base umwandeln n , die nimmt Θ ( n ) Zeit, führen Sie eine Basis n Art radix und dann konvertiert für eine Gesamt zu Ihrer ursprünglichen Basis zurück Θ ( n k ) Algorithmus.
Ich habe jedoch gelesen, dass die Radix-Sortierung in der Praxis in der Regel viel langsamer ist als beispielsweise eine zufällige Quicksortierung :
Bei großen Arrays weist radix sort die niedrigste Befehlsanzahl auf. Aufgrund der relativ schlechten Cache-Leistung ist die Gesamtleistung jedoch schlechter als bei den speicheroptimierten Versionen von Mergesort und Quicksort.
Ist radix sort nur ein guter theoretischer Algorithmus oder hat er allgemeine praktische Anwendungen?
quelle
vector
) implementieren . Aber ich weiß es nicht, da ich Lamarcas Papiere nicht gelesen habe.@Robert: Dein Link ist ziemlich überraschend (eigentlich konnte ich den zitierten Satz nicht finden). Meine persönliche Erfahrung ist für die zufällige Eingabe, Radix-Sortierung ist viel schneller als die STL
std::sort()
, die eine Variante von Quicksort verwendet. Früher habe ich einen Algorithmus 50% schneller gemacht, indem ich ihn durchstd::sort()
eine instabile Radix-Sortierung ersetzt habe. Ich bin nicht sicher, was die "speicheroptimierte Version" von QuickSort ist, aber ich bezweifle, dass sie doppelt so schnell sein kann wie die STL-Version.In diesem Blog-Beitrag wurde die Radix-Sortierung zusammen mit mehreren anderen Sortieralgorithmen bewertet. Kurz gesagt,
std::sort()
dauert es in dieser Auswertung 5,1 Sekunden, um 50 Millionen Ganzzahlen zu sortieren, während die direkte / instabile Radix-Sortierung 2,0 Sekunden dauert. Stabile Radix-Sortierung sollte noch schneller sein.Radix-Sortierung wird auch häufig zum stabilen Sortieren von Zeichenfolgen verwendet. Zuweilen werden Varianten der Radix-Sortierung zum Erstellen von Suffix-Arrays, BWT usw. gesehen.
quelle
Radix-Sortierung ist auch eine natürliche Möglichkeit, Wörter mit fester Länge über ein festes Alphabet zu sortieren, z. B. im Kärkkäinen & Sanders-Algorithmus ( http://www.cs.cmu.edu/~guyb/realworld/papersS04/KaSa03.pdf ).
quelle