Complessità: ordinamenti

Per il problema dell’ordinamento esistono molti algoritmi con complessità diverse

Ingenuiselection sort, bubble sort, shaker sort, insertion sortO(n2)
Intermedishell sortO(n~1.2)
Evolutimerge sort, quick sort, heap sortO(n logn)

Si può dimostrare che non può esistere un algoritmo di ordinamento con complessità in tempo minore di O(n log n).
Il problema dell’ordinamento ha complessità O(n log n).


Confrontiamo la complessità in tempo degli algoritmi di ordinamento ingenui con quella degli algoritmi evoluti, al variare della dimensione del problema

nT(n) = n2
(ingenuo)
T(n) = n log2n
(evoluto)
210~103220~106210 · 10~104
220~106240~1012220 · 20~2 · 107
230~109260~1018230 · 30~3 · 1010
240~1012280~1024240 · 40~4 · 1013

Se il computer esegue 106 operazioni elementari al secondo allora i tempi di attesa sono

nn2\displaystyle \frac{n^2}{10^6}Tempo di attesan log2n\displaystyle \frac{n \log_2 {n}}{10^6}Tempo di attesa
1031061001 secondo~104~10-2~0.01 secondi
1041081021 minuto e 40 secondi~1,3 · 105~1,3 · 10-1~0,13 secondi
10510101042 ore, 46 minuti e 40 secondi~1,7 · 106~1,7 · 101~1,7 secondi
106101210611 giorni, 13 ore, 46 minuti e 40 secondi~2 · 107~2 · 101~20 secondi
10910181012 ~32 mila anni~3 · 1010~3 · 104> 8 ore
101010201014 ~3 milioni di anni~3,3 · 1011~3,3 · 105< 4 giorni

Se il computer esegue 109 operazioni elementari al secondo allora i tempi di attesa sono

nn2\displaystyle \frac{n^2}{10^9}Tempo di attesan log2n\displaystyle \frac{n \log_2 {n}}{10^9}Tempo di attesa
10310610-3~0,001 secondi~104~10-5~0.00001 secondi
10410810-1~0,1 secondi~1,3 · 105~1,3 ·10-4~0.00013 secondi
105101010110 secondi~1,7 · 106~1,7 · 10-3~0.0017 secondi
1061012103~17 minuti~2 · 107~2 · 10-2~0.02 secondi
1091018109~30 anni~3 · 1010~3 · 101~30 secondi
101010201011 ~3000 anni~3,3 · 1011~3,32 · 102> 5 minuti

Utilizzare un algoritmo ingenuo con milioni di dati porta a tempi di attesa inaccettabili!!!