Technopedia Center
PMB University Brochure
Faculty of Engineering and Computer Science
S1 Informatics S1 Information Systems S1 Information Technology S1 Computer Engineering S1 Electrical Engineering S1 Civil Engineering

faculty of Economics and Business
S1 Management S1 Accountancy

Faculty of Letters and Educational Sciences
S1 English literature S1 English language education S1 Mathematics education S1 Sports Education
teknopedia

teknopedia

teknopedia

teknopedia

teknopedia

teknopedia
teknopedia
teknopedia
teknopedia
teknopedia
teknopedia
  • Registerasi
  • Brosur UTI
  • Kip Scholarship Information
  • Performance
  1. Weltenzyklopädie
  2. Radix sort - Teknopedia
Radix sort - Teknopedia
Niente fonti!
Questa voce o sezione sull'argomento algoritmi non cita le fonti necessarie o quelle presenti sono insufficienti.

Puoi migliorare questa voce aggiungendo citazioni da fonti attendibili secondo le linee guida sull'uso delle fonti.
Radix sort
Esempio di funzionamento dell'algoritmo.
ClasseAlgoritmo di ordinamento
Struttura datiArray
Caso peggiore temporalmente O ( k N ) {\displaystyle O(kN)} {\displaystyle O(kN)}
Caso peggiore spazialmente O ( k N ) {\displaystyle O(kN)} {\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} {\displaystyle nk}), dove n {\displaystyle n} {\displaystyle n} è la lunghezza dell'array e k {\displaystyle k} {\displaystyle k} è la media del numero di cifre degli n {\displaystyle 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

[modifica | modifica wikitesto]

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

Se k {\displaystyle k} {\displaystyle k} è invece maggiore di n {\displaystyle 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)} {\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)} {\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))} {\displaystyle \log _{n}(k)={\mathcal {O}}(\log _{n}(k))} passate di Integer sort e ciascuna richiede tempo O ( n ) {\displaystyle {\mathcal {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)} {\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)} {\displaystyle {\mathcal {O}}(n)} per contemplare il caso in cui k < n {\displaystyle k<n} {\displaystyle k<n}, dato che la sequenza va almeno letta.

Pseudocodice

[modifica | modifica wikitesto]

Ogni elemento nell'array A {\displaystyle A} {\displaystyle A} di n {\displaystyle n} {\displaystyle n} elementi ha d {\displaystyle d} {\displaystyle d} cifre, dove 1 {\displaystyle 1} {\displaystyle 1} è la cifra di ordine più basso e d {\displaystyle d} {\displaystyle d} quella di ordine più alto.

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

Storia

[modifica | modifica wikitesto]


Origini

[modifica | modifica wikitesto]

L'idea fondamentale del radix sort fu originariamente applicata alle macchine di smistamento a schede perforate, sviluppate da Herman Hollerith alla fine del XIX secolo. Queste macchine furono impiegate per il censimento degli Stati Uniti del 1890, dimostrando un'efficienza notevole nella gestione e nell'ordinamento di grandi volumi di dati. Le schede perforate, tipicamente formate da 80 colonne, potevano essere perforate in una delle 12 posizioni disponibili per ciascuna colonna, consentendo la codifica di numeri, lettere e simboli.

Il processo di ordinamento manuale o semi-meccanico sulle schede perforate seguiva la logica del radix sort: le schede venivano smistate ripetutamente in base a cifre successive, partendo da quella meno significativa (LSD, Least Significant Digit) fino ad arrivare a quella più significativa (MSD, Most Significant Digit). Per ogni passaggio, le schede venivano distribuite in scomparti corrispondenti al valore della cifra corrente e poi raccolte, mantenendo l'ordine relativo acquisito nei passaggi precedenti. Le aziende fondate da Hollerith, che in seguito confluirono in IBM, furono pioniere nell'utilizzo e nello sviluppo di queste tecniche.

Sviluppi Informatici

[modifica | modifica wikitesto]

L'algoritmo del radix sort fu formalizzato e analizzato nel contesto dei calcolatori elettronici da Harold H. Seward nel 1954, attraverso il suo rapporto tecnico Information sorting in the A-2 computer del MIT. Il lavoro di Seward adattò i principi di ordinamento delle schede perforate all'architettura e alle capacità dei computer emergenti, dimostrando la possibilità di un ordinamento efficiente anche in questo nuovo contesto.

Nonostante l'affermazione di altri algoritmi di ordinamento basati sui confronti (come Quicksort e Mergesort), il radix sort mantiene la sua rilevanza, specialmente per l'ordinamento di numeri interi o stringhe con un intervallo di valori limitato. La sua caratteristica di essere un algoritmo non-comparativo gli permette di raggiungere una complessità temporale di O(nk) nel caso peggiore, dove n è il numero di elementi e k è il numero di cifre (o passaggi), rendendolo potenzialmente più veloce per specifici tipi di dati rispetto agli algoritmi O(nlogn).

Bibliografia

[modifica | modifica wikitesto]
  • (EN) Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest e Clifford Stein, Introduction to Algorithms, 4ª ed., MIT Press, 2022, ISBN 978-0-262-04630-5.
  • (EN) P. E. T., The Story of Computing, Oxford University Press, 1995.

Altri progetti

[modifica | modifica wikitesto]

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

[modifica | modifica wikitesto]
  • (EN) Eric W. Weisstein, Radix Sort, su MathWorld, Wolfram Research. Modifica su Wikidata
V · D · M
Algoritmi di ordinamento
TeoriaTeoria della complessità computazionale · Notazione O Grande · Array · Lista · Stack · Coda · Ordinamento comparativo · Ordinamento adattivo
Algoritmi a scambioBubble sort · Shaker sort · Odd-even sort · Comb sort · Gnome sort · Quicksort
Algoritmi di selezioneSelection sort · Heap sort · Smoothsort
Algoritmi ad inserimentoInsertion sort · Shell sort · Tree sort · Library sort · Patience sorting
Algoritmi a fusioneMerge sort · Timsort
Algoritmi non comparativiRadix sort · Bucket sort · Counting sort · Pigeonhole sort
Altri algoritmiRete di ordinamento · Ordinamento topologico · Ordinamento bitonico · Ordinamento delle frittelle
Algoritmi inefficientiStupid sort · Trippel sort
  Portale Informatica: accedi alle voci di Teknopedia che trattano di informatica
Estratto da "https://it.wikipedia.org/w/index.php?title=Radix_sort&oldid=146063856"

  • Indonesia
  • English
  • Français
  • 日本語
  • Deutsch
  • Italiano
  • Español
  • Русский
  • فارسی
  • Polski
  • 中文
  • Nederlands
  • Português
  • العربية
Pusat Layanan

UNIVERSITAS TEKNOKRAT INDONESIA | ASEAN's Best Private University
Jl. ZA. Pagar Alam No.9 -11, Labuhan Ratu, Kec. Kedaton, Kota Bandar Lampung, Lampung 35132
Phone: (0721) 702022