Radix sort

Niente fonti!
Questa voce o sezione sull'argomento informatica non cita le fonti necessarie o quelle presenti sono insufficienti.
Radix sort
Esempio di funzionamento dell'algoritmo.
ClasseAlgoritmo di ordinamento
Struttura datiArray
Caso peggiore temporalmente O ( k N ) {\displaystyle O(kN)}
Caso peggiore spazialmente O ( k N ) {\displaystyle O(kN)}
OttimaleDipende dai dati
Manuale

Il radix sort è un algoritmo di ordinamento per valori numerici interi con complessità computazionale O( n k {\displaystyle nk} ), dove n {\displaystyle n} è la lunghezza dell'array e k {\displaystyle k} è la media del numero di cifre degli n {\displaystyle n} numeri.

Radix sort utilizza un procedimento controintuitivo per l'uomo, ma più facilmente implementabile. Esegue gli ordinamenti per posizione della cifra ma partendo dalla cifra meno significativa. Questo affinché l'algoritmo non si trovi a dovere operare ricorsivamente su sottoproblemi di dimensione non valutabili a priori.

Considerazioni sull'algoritmo

L'algoritmo radix sort ha complessità computazionale variabile in base al valore k {\displaystyle k} . Se k {\displaystyle k} risulta essere minore di n {\displaystyle n} , non si ha guadagno rispetto a counting sort che opera in tempo lineare.

Se k {\displaystyle k} è invece maggiore di n {\displaystyle n} , l'algoritmo può risultare peggiore anche dei più classici algoritmi di ordinamento per confronto a tempo quasi lineare, come quicksort o mergesort.

Usando come base dell'algoritmo un valore B = Θ ( n ) {\displaystyle B=\Theta (n)} il tempo di ordinamento diviene O ( n ( 1 + log ( k ) log ( n ) ) ) {\displaystyle {\mathcal {O}}\left(n\left(1+{\log(k) \over \log(n)}\right)\right)}

La precedente definizione è dimostrabile ricordando che ci sono log n ( k ) = O ( log n ( k ) ) {\displaystyle \log _{n}(k)={\mathcal {O}}(\log _{n}(k))} passate di Integer sort e ciascuna richiede tempo O ( n ) {\displaystyle {\mathcal {O}}(n)} .

Usando le regole per il cambiamento di base dei logaritmi, il tempo totale è dato da O ( n log n ( k ) ) = O ( n log ( k ) log ( n ) ) {\displaystyle {\mathcal {O}}(n\log _{n}(k))={\mathcal {O}}\left(n{\log(k) \over \log(n)}\right)} .

A questa quantità va aggiunto O ( n ) {\displaystyle {\mathcal {O}}(n)} per contemplare il caso in cui k < n {\displaystyle k<n} , dato che la sequenza va almeno letta.

Pseudocodice

Radix-sort (A, d)
   for i <- 1 to d
       do usa un ordinamento stabile per ordinare l'array A sulla cifra i

Storia

Il radix sort è l'algoritmo utilizzato dalle macchine per ordinare le schede perforate, che adesso si trovano soltanto nei musei di calcolatori.

Altri progetti

Altri progetti

  • Wikibooks
  • Wikimedia Commons
  • Collabora a Wikibooks Wikibooks contiene implementazioni del radix sort
  • Collabora a Wikimedia Commons Wikimedia Commons contiene immagini o altri file sul radix sort

Collegamenti esterni

  • (EN) Eric W. Weisstein, Radix sort, su MathWorld, Wolfram Research. Modifica su Wikidata
  Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica