Radix sort

Da Wikipedia, l'enciclopedia libera.
Radix sort
Radix.JPG

Esempio di funzionamento dell'algoritmo.
Classe Algoritmo di ordinamento
Struttura dati Array
Caso peggiore temporalmente O(kN)
Caso peggiore spazialmente O(kN)
Ottimale Dipende dai dati

Il Radix Sort è un algoritmo di ordinamento per valori numerici interi con complessità computazionale O(nk), dove n è la lunghezza dell'array e k è la media del numero di cifre degli 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[modifica | modifica wikitesto]

L'algoritmo Radix sort ha complessità computazionale variabile in base al valore k. Se k risulta essere minore di n, non si ha guadagno rispetto a Integer sort che opera in tempo lineare.

Se k è invece maggiore di 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) il tempo di ordinamento diviene \mathcal{O}(n (1 + {log (k) \over log (n)  } ))

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

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

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

Altri progetti[modifica | modifica wikitesto]