A classificação Radix é teoricamente muito rápida quando você sabe que as teclas estão em um determinado intervalo limitado, digamos valores no intervalo por exemplo. Se você apenas converter os valores para a base de que leva tempo, fazer uma base radix sort e depois converter de volta para sua base original para um total algoritmo.
No entanto, eu li que, na prática, a classificação do radical é geralmente muito mais lenta do que fazer, por exemplo, uma classificação rápida aleatória :
Para matrizes grandes, a classificação radix tem a menor contagem de instruções, mas devido ao seu desempenho de cache relativamente ruim, seu desempenho geral é pior que as versões otimizadas para memória do mergesort e quicksort.
Radix sort é apenas um bom algoritmo teórico ou tem usos práticos comuns?
fonte
vector
). Mas não sei, porque não li os papéis de Lamarca.@ Robert: Seu link é bastante surpreendente (na verdade eu não consegui encontrar a frase citada). Minha experiência pessoal é de entrada aleatória, a classificação do radical é muito mais rápida que a STL
std::sort()
, que usa uma variante do quicksort. Eu costumava fazer um algoritmo 50% mais rápido substituindo-ostd::sort()
por uma classificação de raiz instável. Não sei ao certo qual é a "versão otimizada para memória" do quicksort, mas duvido que possa ser duas vezes mais rápido que a versão STL.Esta postagem no blog avaliou a classificação do radical juntamente com vários outros algoritmos de classificação. Resumidamente, nesta avaliação, são
std::sort()
necessários 5,1 segundos para classificar 50 milhões de números inteiros, enquanto a classificação de raiz no local / instável leva 2,0 segundos. A classificação estável do radical deve ser ainda mais rápida.A classificação Radix também é amplamente usada para classificar cordas de maneira estável. Às vezes, variantes de classificação de raiz são vistas para a construção de matrizes de sufixos, BWT etc.
fonte
A classificação Radix também é uma maneira natural de classificar palavras de tamanho fixo sobre um alfabeto fixo, por exemplo, no algoritmo Kärkkäinen & Sanders ( http://www.cs.cmu.edu/~guyb/realworld/papersS04/KaSa03.pdf )
fonte