Algoritmi e Strutture Dati
Analisi di algoritmi
Introduzione
Alberto Montresor
Università di Trento
2016/10/18
This work is licensed under a Creative Commons
Attribution-ShareAlike 4.0 International License.
Sommario
1
2
3
Introduzione
Definizioni
Modelli di calcolo – Definizione
Esempi di analisi
Notazione
Complessità problemi vs algoritmi
Moltiplicare numeri complessi
Sommare numeri binari
Moltiplicare numeri binari
Algoritmi di ordinamento
Problema
Selection Sort
Insertion Sort
Merge Sort
Introduzione
Introduzione
Obiettivo: stimare la complessità in tempo degli algoritmi
Definizioni
Modelli di calcolo
Esempi di valutazioni
Notazione
Perché?
Per stimare il tempo impiegato per un dato input
Per stimare il più grande input gestibile in tempi ragionevoli
Per confrontare l’efficienza di algoritmi diversi
Per ottimizzare le parti più importanti
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
2016/10/18
1 / 49
Introduzione
Definizioni
Complessità
Definizione: Complessità: "Dimensione dell’input" → "Tempo"
Come definire la dimensione dell’input?
Come misurare il tempo?
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
2016/10/18
2 / 49
Introduzione
Definizioni
Dimensione dell’input
Criterio di costo logaritmico
La taglia dell’input è il numero di bit necessari per rappresentarlo
Esempio: moltiplicazione di numeri binari lunghi n bit
Criterio di costo uniforme
La taglia dell’input è il numero di elementi di cui è costituito
Esempio: ricerca minimo in un vettore di n elementi
In molti casi...
Possiamo assumere che gli "elementi" siano rappresentati da un
numero costante di bit
Le due misure coincidono a meno di una costante moltiplicativa
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
2016/10/18
3 / 49
Introduzione
Definizioni
Definizione di tempo
Tempo ≡ wall-clock time
Il tempo effettivamente impiegato per eseguire un algoritmo
Dipende da troppi parametri:
bravura del programmatore
linguaggio di programmazione utilizzato
codice generato dal compilatore
processore, memoria (cache, primaria, secondaria)
sistema operativo, processi attualmente in esecuzione
Dobbiamo considerare una rappresentazione più astratta
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
2016/10/18
4 / 49
Introduzione
Definizioni
Definizione di tempo
Tempo ≡ n. istruzioni elementari
Un’istruzione si considera elementare se può essere eseguita in tempo
"costante" dal processore.
Esempio (Operazioni elementari)
a *= 2 ?
Math.cos(d) ?
min(A, n) ?
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
2016/10/18
5 / 49
Introduzione
Modelli di calcolo – Definizione
Modelli di calcolo
Modello di calcolo
Rappresentazione astratta di un calcolatore
Astrazione: deve permettere di nascondere i dettagli
Realismo: deve riflettere la situazione reale
Potenza matematica: deve permettere di trarre conclusioni
"formali" sul costo
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
2016/10/18
6 / 49
P Introduzione
▶► Turing machine​ (26 P)
Modelli di calcolo – Definizione
▶► Persistence​ (2 C, 18 P)
Modelli di calcolo – Wikipedia
▶► Petri nets​ (15 P)
Pages in category "Models of computation"
The following 108 pages are in this category, out of 108 total. This list may not reflect recent changes (learn more).
E cont.
Model of computation
A
Event-driven finite-state machine
Probabilistic Turing machine
Evolution in Variable Environment
Pushdown automaton
Extended finite-state machine
Abstract Job Object
Abstract machine
P cont.
Q
F
Quantum capacity
Abstract state machines
Finite state machine with datapath
Quantum circuit
Agent-based model
Finite state transducer
Quantum computer
Algorithm characterizations
Finite-state machine
Alternating Turing machine
FRACTRAN
Applicative computing systems
Funnelsort
B
Alberto Montresor (UniTN)
R
Realization (systems)
Register machine
H
ASD - Analisi di algoritmi
2016/10/18
7 / 49
Introduzione
Modelli di calcolo – Definizione
Modelli di calcolo
Macchina di Turing
Una macchina ideale che manipola i dati contenuti su un nastro di
Macchina
di Turingsecondo un insieme prefissato di regole.
lunghezza
infinita,
Meccanismo di controllo
Testina
⊥
a1 a2 a3 a4
Nastro
Cella
Marcatore della prima cella
Ad ogni passo, la Macchina di Turing:
legge il simbolo sotto la testina
Lamodifica
macchina: il proprio stato interno
! legge il simbolo sotto la testina
nuovo
nella cella
! scrive
modifica un
il proprio
statosimbolo
(finito) interno
! scrive un nuovo simbolo nella cella
muove la testina a destra o a sinistra
! muove la testina a destra o a sinistra
Fondamentale nello
studio
della calcolabilità
Fondamentale
nello
studio
della calcolabilità
✦
Non adatto
per i nostri
Livello
troppo
bassoscopi
per i nostri scopi
✦
✦
Livello troppo basso
Alberto Montresor
(UniTN)
✦ Non sufficientemente
ASD - Analisi di algoritmi
realistico
2016/10/18
8 / 49
Introduzione
Modelli di calcolo – Definizione
Modelli di calcolo
Random Access Machine (RAM)
Memoria:
Quantità infinita di celle di dimensione finita
Accesso in tempo costante (indipendente dalla posizione)
Processore (singolo)
Set di istruzioni elementari simile a quelli reali:
somme, sottrazioni, moltiplicazioni, operazioni logiche, etc.
istruzioni di controllo (salti, salti condizionati)
Costo delle istruzioni elementari
Uniforme, ininfluente ai fini della valutazione (come vedremo)
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
2016/10/18
9 / 49
Introduzione
Esempi di analisi
Tempo di calcolo min()
Ogni istruzione richiede un tempo costante per essere eseguita
La costante è potenzialmente diversa da istruzione a istruzione
Ogni istruzione viene eseguita un certo # di volte, dipendente da n
Item min(Item[ ] A, integer n)
Costo # Volte
c1
1
c2
n
c3
n−1
c4
n−1
Item min ← A[1]
for i ← 2 to n do
if A[i] < min then
min ← A[i]
c5
return min
1
T (n) = c1 + c2 n + c3 (n − 1) + c4 (n − 1) + c5
= (c2 + c3 + c4 )n + (c1 + c5 − c3 − c4 ) = an + b
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
2016/10/18
10 / 49
Introduzione
Esempi di analisi
Tempo di calcolo binarySearch()
Il vettore viene suddiviso in due parti:
Parte SX: b(n − 1)/2c
Parte DX: bn/2c
integer binarySearch(Item[ ] A, Item v, integer i, integer j)
if i > j then
return 0
else
integer m ← b(i + j)/2c
if A[m] = v then
return m
else if A[m] < v then
return binarySearch(A, v, m + 1, j)
else
return binarySearch(A, v, i, m − 1)
Alberto Montresor (UniTN)
Costo
c1
c2
# (i > j) # (i ≤ j)
1
1
1
0
c3
c4
c5
c6
c7 + T (b(n − 1)/2c)
0
0
0
0
0
1
1
0
1
0/1
c7 + T (bn/2c)
0
1/0
ASD - Analisi di algoritmi
2016/10/18
11 / 49
Introduzione
Esempi di analisi
Tempo di calcolo binarySearch()
Assunzioni (Caso pessimo):
Per semplicità, assumiamo n potenza di 2: n = 2k
L’elemento cercato non è presente
Ad ogni passo, scegliamo sempre la parte DX di dimensione n/2
Due casi:
i>j
(n = 0)
i≤j
(n > 0)
T (n) = c1 + c2 = c
T (n) = T (n/2) + c1 + c3 + c4 + c6 + c7
= T (n/2) + d
Relazione di ricorrenza: (
c
se n = 0
T (n) =
T (n/2) + d se n ≥ 1
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
2016/10/18
12 / 49
Introduzione
Esempi di analisi
Tempo di calcolo binarySearch()
Soluzione della relazione di ricorrenza tramite espansione
T (n) = T (n/2) + d
= T (n/4) + 2d
= T (n/8) + 3d
...
n = 2k ⇒ k = log n
= T (1) + kd
= T (0) + (k + 1)d
= kd + (c + d)
= d log n + e.
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
2016/10/18
13 / 49
Introduzione
Notazione
Ordini di complessità
Per ora, abbiamo analizzato precisamente due algoritmi e abbiamo
ottenuto due funzioni di complessità:
Ricerca: T (n) = d log n + e
Minimo: T (n) = an + b
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
2016/10/18
14 / 49
Introduzione
Notazione
Ordini di complessità
Per ora, abbiamo analizzato precisamente due algoritmi e abbiamo
ottenuto due funzioni di complessità:
Ricerca: T (n) = d log n + e
logaritmica
Minimo: T (n) = an + b
lineare
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
2016/10/18
14 / 49
Introduzione
Notazione
Ordini di complessità
Per ora, abbiamo analizzato precisamente due algoritmi e abbiamo
ottenuto due funzioni di complessità:
Ricerca: T (n) = d log n + e
logaritmica
Minimo: T (n) = an + b
lineare
Una terza funzione deriva dall’algoritmo naïf per il minimo:
Minimo: T (n) = f n2 + gn + h
Alberto Montresor (UniTN)
quadratica
ASD - Analisi di algoritmi
2016/10/18
14 / 49
Introduzione
Notazione
Ordini di complessità
Per ora, abbiamo analizzato precisamente due algoritmi e abbiamo
ottenuto due funzioni di complessità:
Ricerca: T (n) = d log n + e
logaritmica
Minimo: T (n) = an + b
lineare
Una terza funzione deriva dall’algoritmo naïf per il minimo:
Minimo: T (n) = f n2 + gn + h
quadratica
Notazione O(f (n)) – Limite superiore
Un algoritmo ha complessità O(f (n)) se il suo tempo di esecuzione è
limitato superiormente da una funzione di complessità c · f (n), dove c è
un’opportuna costante.
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
2016/10/18
14 / 49
Introduzione
Notazione
Ordini di complessità
Per ora, abbiamo analizzato precisamente due algoritmi e abbiamo
ottenuto due funzioni di complessità:
Ricerca: T (n) = d log n + e
logaritmica
O(log n)
Minimo: T (n) = an + b
lineare
O(n)
Una terza funzione deriva dall’algoritmo naïf per il minimo:
Minimo: T (n) = f n2 + gn + h
quadratica
O(n2 )
Notazione O(f (n)) – Limite superiore
Un algoritmo ha complessità O(f (n)) se il suo tempo di esecuzione è
limitato superiormente da una funzione di complessità c · f (n), dove c è
un’opportuna costante.
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
2016/10/18
14 / 49
Introduzione
Notazione
Classi di complessità
f (n)
log n
√
n
n
n log n
n2
n3
2n
n = 101
3
3
10
30
102
103
1024
n = 102
6
10
100
664
104
106
1030
n = 103
9
31
1000
9965
106
109
10300
n = 104
13
100
10000
132877
108
1012
103000
Tipo
logaritmico
sublineare
lineare
loglineare
quadratico
cubico
esponenziale
Come sbagliare completamente l’algoritmo di controllo degli update in
Windows XP e renderlo esponenziale:
http://m.slashdot.org/story/195683
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
2016/10/18
15 / 49
Algoritmi e strutture dati
Analisi di algoritmi
Complessità algoritmi vs Complessità problemi
Alberto Montresor
Università di Trento
2016/10/18
This work is licensed under a Creative Commons
Attribution-ShareAlike 4.0 International License.
Sommario
1
2
3
Introduzione
Definizioni
Modelli di calcolo – Definizione
Esempi di analisi
Notazione
Complessità problemi vs algoritmi
Moltiplicare numeri complessi
Sommare numeri binari
Moltiplicare numeri binari
Algoritmi di ordinamento
Problema
Selection Sort
Insertion Sort
Merge Sort
Complessità problemi vs algoritmi
Introduzione
Obiettivo: riflettere sulla complessità dei problemi e degli algoritmi
In alcuni casi, si può migliorare quanto si ritiene "normale"
In altri casi, è impossibile fare di meglio
Qual è il rapporto fra un problema computazionale e l’algoritmo?
Back to basics!
Somme
Moltiplicazioni
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
2016/10/18
16 / 49
Complessità problemi vs algoritmi
Moltiplicare numeri complessi
Moltiplicare numeri complessi
Moltiplicazione numeri complessi
(a + bi)(c + di) = [ac − bd] + [ad + bc]i
Input: a, b, c, d
Output: ac − bd, ad + bc
Domande
Considerate un modello di calcolo dove la moltiplicazione costa 1, le
addizioni/sottrazioni costano 0.01.
Quanto costa l’algoritmo dettato dalla definizione?
Potete fare meglio di così?
Qual è il ruolo del modello di calcolo?
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
2016/10/18
17 / 49
Complessità problemi vs algoritmi
Moltiplicare numeri complessi
Moltiplicare numeri complessi
Questioni aperte
Si può fare ancora meglio?
Oppure, è possibile dimostrare che non si può fare meglio di così?
Alcune riflessioni
In questo modello, effettuare 3 moltiplicazioni invece di 4 risparmia
il 25% del costo
Esistono contesti in cui effettuare 3 moltiplicazioni invece di 4 può
produrre un risparmio maggiore
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
2016/10/18
18 / 49
Complessità problemi vs algoritmi
Sommare numeri binari
Sommare numeri binari
Algoritmo
elementare della somma – sum()
Sommare numeri binari
richiede di esaminare tutti gli n bit
✦ Algoritmo elementare della somma - sum()
costo
totale cn (c ≡ costo per sommare tre bit e generare riporto)
✦
Domanda
✦
richiede di esaminare tutti gli n bit
costo totale cn (c ≡ costo per sommare tre bit e generare riporto)
Esiste ✦unDomanda
metodo più efficiente?
✦
Esiste un metodo più efficiente?
11101111111111
1 0 1 1 0 0 1 1 0 1 1 0 1 1 1+
111101101101011
1101010100100010
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
2016/10/18
19 / 49
Complessità problemi vs algoritmi
Sommare numeri binari
Limite inferiore alla complessità di un problema
Notazione Ω(f (n)) – Limite inferiore
Un problema ha complessità Ω(f (n)) se tutti i possibili algoritmi che lo
risolvono hanno complessità c · f (n) o superiore, dove c è un’opportuna
costante.
Limite inferiore della somma di numeri binari
Il problema della somma di numeri binari ha complessità Ω(n).
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
2016/10/18
20 / 49
Complessità problemi vs algoritmi
Moltiplicare numeri binari
Moltiplicare numeri binari
Algoritmo elementare del prodotto – prod()
moltiplicazione di ogni bit con ogni altro bit
Moltiplicare numeri binari
costo totale cn2
✦
Algoritmo “elementare” del prodotto - prod()
n2
Alberto Montresor (UniTN)
*******
*******
*******
*******
*******
*******
*******
*******
*******
ASD - Analisi di algoritmi
x
2016/10/18
21 / 49
Complessità problemi vs algoritmi
Moltiplicare numeri binari
Algoritmi aritmetici
Confronto della complessità computazionale
Somma : Tsum (n) = O(n)
Prodotto : Tprod (n) = O(n2 )
Si potrebbe concludere che...
Il problema della moltiplicazione è inerentemente più costoso del
problema dell’addizione
Conferma la nostra esperienza
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
2016/10/18
22 / 49
Complessità problemi vs algoritmi
Moltiplicare numeri binari
Algoritmi aritmetici
Confronto fra problemi
Per provare che il problema del prodotto è più costoso del problema
della somma, dobbiamo provare che non esiste una soluzione in tempo
lineare per il prodotto
Abbiamo confrontato gli algoritmi, non i problemi!
Sappiamo solo che l’algoritmo di somma studiato alle elementari è
più efficiente dell’algoritmo del prodotto studiato alle elementari
Nel 1960, Kolmogorov enunciò in una conferenza che la
moltiplicazione ha limite inferiore Ω(n2 )
Una settimana dopo, fu provato il contrario!
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
2016/10/18
23 / 49
Complessità problemi vs algoritmi
Moltiplicare numeri binari
Moltiplicare
numeri
binari
Moltiplicare numeri
binari
Un metodo algoritmico: divide-et-impera
Divide-et-impera
✦ Divide:
Divide:dividi
dividiililproblema
problemaininsottoproblemi
sottoproblemidididimensioni
dimensioniinferiori
inferiori
✦
✦
Impera: risolvi i sottoproblemi in maniera ricorsiva
Impera: risolvi i sottoproblemi in maniera ricorsiva
Combina: unisci le soluzioni dei sottoproblemi in modo da ottenere
✦ Combina: unisci le soluzioni dei sottoproblemi in modo da ottenere l
la risposta del problema principale
risposta del problema principale
Moltiplicazione divide-et-impera
✦ Moltiplicazione ricorsiva
X✦ =X a=· a
2n/2
2n/2++b b
Y✦ =Y c=· 2cn/2
2n/2++dd
XY✦ = ac · 2n +n(ad + bc) · 2n/2
n/2+ bd
XY = ac 2 + (ad+bc) 2
✦
+ bd
X
a
b
Y
c
d
Nota:
✦ Moltiplicare per 2t ≡ shift di t posizioni, in tempo lineare
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
2016/10/18
24 / 49
Complessità problemi vs algoritmi
Moltiplicare numeri binari
Moltiplicare numeri binari tramite Divide-et-impera
boolean [ ] pdi(boolean[ ] X, boolean[ ] Y , integer n)
if n = 1 then
return X[1] · Y [1]
else
spezza X in a; b e Y in c; d
return pdi(a, c, n/2) · 2n + (pdi(a, d, n/2)+
pdi(b, c, n/2)) · 2n/2 + pdi(b, d, n/2)
T (n) =
c1
n=1
4T (n/2) + c2 · n n > 1
Nota: Moltiplicare per 2t ≡ shift di t posizioni, in tempo lineare
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
2016/10/18
25 / 49
Complessità problemi vs algoritmi
Moltiplicare numeri binari
Svolgere
la ricorsione
Analisi
della
ricorsione
0
1
2
c2 · 1 · n
nn
n/2
n/2
n/4
n/4
i
+
n/4
n/4
n/2 n/2 +
n/4
n/4
n/4
n/2
n/4
n/4
+ n/2
n/4
n/2
n/4
n/4
c2 · 4 · n/2
n/2
n/4
n/4
n/4
n/4
c2 · 42 · n/22
c2 · 4i · n/2i
Livello i: 4i istanze
n/24ii copies of n/2i
Leveldii dimensione
is the sum of
..........................
log2 n
............................................................................
1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1
T (1) · 4log n
= c1 · nlog 4
T (n) =
⇢
c1
4T (n/2) + c2 · n
Alberto Montresor (UniTN)
n=1
n>1
ASD - Analisi di algoritmi
= c1 · n2
2016/10/18
26 / 49
Complessità problemi vs algoritmi
Moltiplicare numeri binari
Moltiplicare numeri binari
Confronto della complessità computazionale
Prodotto : Tprod (n) = O(n2 )
Prodotto : Tpdi (n) = O(n2 )
Tutto questo lavoro per nulla?
Domanda: E’ possibile fare meglio di così?
Notate che la versione ricorsiva chiama se stessa 4 volte.
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
2016/10/18
27 / 49
Complessità problemi vs algoritmi
Moltiplicare numeri binari
Moltiplicazione di Karatsuba (1962)
A1 = a × c
A3 = b × d
m = (a + b) × (c + d) = ac + ad + bc + bd
A2 = m − A1 − A3 = ad + bc
boolean [ ] karatsuba(boolean[ ] X, boolean[ ] Y , integer n)
if n = 1 then
return X[1] · Y [1]
else
spezza X in a; b e Y in c; d
boolean[ ] A1 ← karatsuba(a, c, n/2)
boolean[ ] A3 ← karatsuba(b, d, n/2)
boolean[ ] m ← karatsuba(a + b, c + d, n/2)
boolean[ ] A2 ← m − A1 − A3
return A1 · 2n + A2 · 2n/2 + A3
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
2016/10/18
28 / 49
X[1] · Y [1]
Complessità problemi vs algoritmi
Moltiplicare numeri binari
X in a; b e Y in c; d
Svolgere la ricorsione
DI (a, c, n/2) · 2n + ( PDI (a, d, n/2) + PDI (b, c, n/2)) · 2n/2 + PDI (b, d, n/2)
Analisi della ricorsione
0
RATSUBA (boolean[ ]
1
n
X[1] · Y [1]
2
n/2n/2
n/4
c2 · 1 · n
nn
X, boolean[ ] Y , integer n)
n/4
+
n/2
n/4
+
n/2
n/2
n/4
n/4
+
n/2
n/4
c2 · 3 · n/2
n/2
n/4
n/4
c2 · 32 · n/22
n/4
X in a; b e Y in c; d
] A1
KARATSUBA (a, c, n/2)
] A3 i KARATSUBA(b,
d, n/2)
Livello
i: 3i istanze
n/24ii copies of n/2i
Leveldii dimensione
is the sum of
]m
KARATSUBA (a + b, c + d, n/2)
] A2
m A1 A3
A1 · 2n + A2 · 2n/2 + A3
c2 · 3i · n/2i
..........................
log2 n
............................................................................
⇢
1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1
T (n) =
T (n) =
⇢
c1
4T (n/2) + c2 · n
n=1
n>1
c1
3T (n/2) + c2 · n
n=1
n>1
⇢ (UniTN)
Alberto Montresor
ASD - Analisi di algoritmi
T (1) · 3log n
= c1 · nlog 3
= n1.58...
2016/10/18
29 / 49
Complessità problemi vs algoritmi
Moltiplicare numeri binari
Moltiplicare numeri binari
Confronto della complessità computazionale
Prodotto : Tprod (n) = O(n2 )
Es. Tprod (106 ) = 1012
Prodotto : Tkara (n) = O(n1.58... )
Es. Tkara (106 ) = 3 · 109
Conclusioni
L’algoritmo "naif" non è sempre il migliore ...
... può esistere spazio di miglioramento ...
... a meno che non sia possibile dimostrare il contrario!
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
2016/10/18
30 / 49
Complessità problemi vs algoritmi
Moltiplicare numeri binari
Non finisce qui . . .
Toom-Cook (1963)
Detto anche Toom3, ha complessità
O(nlog 5/ log 3 ) ≈ O(n1.465 )
Karatsuba ≡ Toom2
Moltiplicazione normale ≡ Toom1
Schönhage–Strassen (1971)
Complessità O(n · log n · log log n)
Basato su Fast Fourier Transforms
Logaritmo iterato
n
log∗ n
(−∞, 1]
0
(1, 2]
1
(2, 4]
2
(4, 16]
3
(16, 216 ]
4
16
65536
(2 , 2
] 5
Martin Fürer (2007)
Complessità O(n · log n · 2O(log
∗
n)
)
Limite inferiore: Ω(n log n) (congettura)
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
2016/10/18
31 / 49
Complessità problemi vs algoritmi
Moltiplicare numeri binari
GNU Multiple Precision Arithmetic Library
GMP
Utilizzata da Mathematica, Maple, etc.
MUL_FFT_THRESHOLD
«Arithmetic without limitations»
Utilizza Schönhage–Strassen quando l’input è più lungo di k parole
di 64 bit, con k dipendente dall’architettura
host type
abi
z10-ibm-linux-gnu
64
atom-unknown-linux-gnu
64
z10esa-ibm-linux-gnu
32
power7-unknown-linux-gnu
mode32
bulldozer-unknown-freebsd8.3
64
piledriver-unknown-netbsd6.1.3
64
powerpc7447-unknown-linux-gnu
32
coreihwl-unknown-netbsd6.1.2
64
coreinhm-unknown-netbsd6.1.3
64
power7-ibm-aix7.1.0.0
mode64
atom-unknown-linux-gnu
32
core2-unknown-netbsd6.1.4
64
coreisbr-apple-darwin12.5.0
64
coreiwsm-unknown-linux-gnu
64
power7-unknown-linux-gnu
mode64
powerpc970-apple-darwin8.11.0
mode32
power7-ibm-aix7.1.0.0
32
bobcat-unknown-netbsd6.1.3
64
alphaev6-unknown-linux-gnu
standard
armcortexa15neon-unknown-linux- standard
power7-unknown-linux-gnu
32
Alberto
Montresor (UniTN)32
core2-unknown-netbsdelf6.1.4
meas
thres
lgentoo4.s390.gentoo.wh0rd.org-stat
1728
gege.gmplib.org-stat
2240
lgentoo3.s390.gentoo.wh0rd.org-stat
2240
gcc1-power7.osuosl.org-stat
2688
oshell.gmplib.org-stat
3520
pilenbsd64v61.gmplib.org-stat
3712
spigg.gmplib.org-stat
3712
hannahnbsd64v61.gmplib.org-stat
4224
bikonbsd64v61.gmplib.org-stat
4224
power-aix.fsffrance.org-stat
4288
gege.gmplib.org-stat
4544
repentiumnbsd64v61.gmplib.org-stat
4736
poire.loria.fr-stat
4736
gcc20.fsffrance.org-stat
4736
gcc1-power7.osuosl.org-stat
4736
g5.gmplib.org-stat
4736
power-aix.fsffrance.org-stat
5312
bobcat.gmplib.org-stat
5504
agnesi.math.su.se-stat
5760
parma.gmplib.org-stat
5760
gcc1-power7.osuosl.org-stat
5760
ASD
Analisi
di
algoritmi
repentiumnbsd32v61.gmplib.org-stat
6784
host name
conf
thres
1728
2240
2240
2688
3712
3712
3712
4224
4032
4288
4544
4736
4736
4032
4288
2688
5312
5504
5760
5760
5312
6784
cfg file
s390_64/z10/gmp-mparam.h
x86_64/atom/gmp-mparam.h
s390_32/esame/gmp-mparam.h
powerpc64/mode32/p4/gmp-mparam.h
x86_64/bd1/gmp-mparam.h
x86_64/bd2/gmp-mparam.h
powerpc32/gmp-mparam.h
x86_64/coreihwl/gmp-mparam.h
x86_64/coreinhm/gmp-mparam.h
powerpc64/mode64/p7/gmp-mparam.h
x86/atom/gmp-mparam.h
x86_64/core2/gmp-mparam.h
x86_64/coreisbr/gmp-mparam.h
x86_64/coreinhm/gmp-mparam.h
powerpc64/mode64/p7/gmp-mparam.h
powerpc64/mode32/p4/gmp-mparam.h
powerpc32/p7/gmp-mparam.h
x86_64/bobcat/gmp-mparam.h
alpha/ev6/gmp-mparam.h
arm/v7a/cora15/gmp-mparam.h
powerpc32/p7/gmp-mparam.h
2016/10/18
32 / 49
x86/core2/gmp-mparam.h
Algoritmi e strutture dati
Analisi di algoritmi
Algoritmi di ordinamento
Alberto Montresor
Università di Trento
2016/10/18
This work is licensed under a Creative Commons
Attribution-ShareAlike 4.0 International License.
Sommario
1
2
3
Introduzione
Definizioni
Modelli di calcolo – Definizione
Esempi di analisi
Notazione
Complessità problemi vs algoritmi
Moltiplicare numeri complessi
Sommare numeri binari
Moltiplicare numeri binari
Algoritmi di ordinamento
Problema
Selection Sort
Insertion Sort
Merge Sort
Algoritmi di ordinamento
Introduzione
Obiettivo: valutare gli algoritmi in base alla tipologia dell’input
In alcuni casi, gli algoritmi si comportano diversamente a seconda
delle caratteristiche dell’input
Conoscere in anticipo tali caratteristiche permette di scegliere il
miglior algoritmo in quella situazione
Il problema dell’ordinamento è una buona palestra dove mostrare
questi concetti
Algoritmi d’ordinamento
Selection Sort
Insertion Sort
Merge Sort
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
2016/10/18
33 / 49
Algoritmi di ordinamento
Tipologia di analisi
Analisi del caso pessimo
La più importante
Il tempo di esecuzione nel caso peggiore è un limite superiore al
tempo di esecuzione per qualsiasi input
Per alcuni algoritmi, il caso peggiore si verifica molto spesso
Es.: ricerca di dati non presenti in un database
Analisi del caso medio
Difficile in alcuni casi: cosa si intende per "medio"?
Distribuzione uniforme
Analisi del caso ottimo
Può avere senso se si conoscono informazioni particolari sull’input
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
2016/10/18
34 / 49
Algoritmi di ordinamento
Problema
Ordinamento
Problema dell’ordinamento
Input: Una sequenza A = a1 , a2 , . . . , an di n numeri
Output: Una sequenza B = b1 , b2 , . . . , bn che sia una
permutazione di A e tale per cui b1 ≤ b2 ≤ . . . ≤ bn
Approccio "demente":
Genero tutte le possibili permutazioni fino a quando non ne trovo
una già ordinata
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
2016/10/18
35 / 49
Algoritmi di ordinamento
Problema
Ordinamento
Problema dell’ordinamento
Input: Una sequenza A = a1 , a2 , . . . , an di n numeri
Output: Una sequenza B = b1 , b2 , . . . , bn che sia una
permutazione di A e tale per cui b1 ≤ b2 ≤ . . . ≤ bn
Approccio "demente":
Genero tutte le possibili permutazioni fino a quando non ne trovo
una già ordinata
Approccio "naif":
Cerco il minimo e lo metto in posizione corretta, riducendo il
problema agli n − 1 restanti valori.
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
2016/10/18
35 / 49
Algoritmi di ordinamento
Selection Sort
Selection Sort
selectionSort(Item[ ] A, integer n)
for i ← 1 to n − 1 do
integer min ← min(A, i, n)
A[i] ↔ A[min]
integer min(Item[ ] A, integer i, integer n)
integer min ← i
% Posizione del minimo parziale
for j ← i + 1 to n do
if A[j] < A[min] then
min ← j
% Nuovo minimo parziale
return min
Complessità nel caso medio, pessimo, ottimo?
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
2016/10/18
36 / 49
Algoritmi di ordinamento
Selection Sort
Selection Sort
selectionSort(Item[ ] A, integer n)
for i ← 1 to n − 1 do
integer min ← min(A, i, n)
A[i] ↔ A[min]
integer min(Item[ ] A, integer i, integer n)
integer min ← i
% Posizione del minimo parziale
for j ← i + 1 to n do
if A[j] < A[min] then
min ← j
% Nuovo minimo parziale
return min
Complessità nel caso medio, pessimo, ottimo?
n−1
n−1
X
X
n(n − 1)
(n − i) =
i=
= n2 − n/2 = O(n2 )
2
i=1
Alberto Montresor (UniTN)
i=1
ASD - Analisi di algoritmi
2016/10/18
36 / 49
Algoritmi di ordinamento
001_207_13_DEAGO_Algoritmi_OK
Insertion
Sort
Insertion Sort
28/01/14 12:25 Pagina 29
Algoritmo efficiente per ordinare piccoli insiemi di elementi
Si basa sul principio di ordinamento di una "mano" di carte da
gioco (e.g. scala quaranta)
insertionSort(Item[ ] A, integer n)
for i ← 2 to n do
Item temp ← A[i]
integer j ← i
while j > 1 and A[j − 1] > temp do
A[j] ← A[j − 1]
j ←j−1
A[j] ← temp
Anal
1 2 3 4 5 6 7
7 4 2 1 8 3 5
4 7 2 1 8 3 5
2 4 7 1 8 3 5
1 2 4 7 8 3 5
1 2 4 7 8 3 5
1 2 3 4 7 8 5
1 2 3 4 5 7 8
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
2016/10/18
37 / 49
Algoritmi di ordinamento
Insertion Sort
Correttezza e complessità
In questo algoritmo
Il costo di esecuzione non dipende solo dalla dimensione...
ma anche dalla distribuzione dei dati in ingresso
Domande
Dimostrare che l’algoritmo è corretto
Qual è il costo nel caso il vettore sia già ordinato?
Qual è il costo nel caso il vettore sia ordinato in ordine inverso?
Cosa succede "in media"? (informalmente)
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
2016/10/18
38 / 49
Algoritmi di ordinamento
Merge Sort
Merge Sort
Divide et impera
Merge Sort è basato sulla tecnica divide-et-impera vista in precedenza
Divide: Spezza virtualmente il vettore di n elementi in due
sottovettori di n/2 elementi
Impera: Chiama Merge Sort ricorsivamente sui due sottovettori
Combina: Unisci (merge) le due sequenze ordinate
Idea
Si sfrutta il fatto che i due sottovettori sono già ordinati per ordinare
più velocemente
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
2016/10/18
39 / 49
Algoritmi di ordinamento
Merge Sort
Merge
primo
1
Merge(integer[ ]
mezzo
ultimo
n
A, integer primo, integer ultimo, integer mezzo)
Input:
A è un vettore di n interi
primo, ultimo, mezzo sono tali che 1 ≤ primo ≤ mezzo < ultimo ≤ n
I sottovettori A[primo . . . mezzo ] e A[mezzo +1 . . . ultimo ] sono
già ordinati
Output:
I due sottovettori sono fusi in un unico sottovettore ordinato
A[primo . . . ultimo ] tramite un vettore di appoggio B
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
2016/10/18
40 / 49
Algoritmi di ordinamento
Merge Sort
Funzionamento Merge()
Merge Sort
i
j
A 1 3 7 8 2
i
j
A
3 7 8 2
i
A
3 7 8
i
A
7 8
i
A
7 8
i
A
7 8
Alberto Montresor (UniTN)
k
4 6 9
B
k
B
4 6 9
j
B
4 6 9
j
B
4 6 9
j
B
6 9
j
B
9
ASD - Analisi di algoritmi
1
k
1 2
k
1 2 3
k
1 2 3 4
k
1 2 3 42016/10/18
6
41 / 49
i
j
Algoritmi di ordinamento
A
7 8
4 6 9
Funzionamento
Merge()
i
j
A
7 8
6 9
j
i
A
7 8
9
j
i
A
8
9
i
j
A
9
A
1 2 3 4 6 7 8 9
k
Merge Sort
B
1 2 3
k
B
1 2 3 4
k
B
1 2 3 4 6
k
B
B
B
1 2 3 4 6 7
k
1 2 3 4 6 7 8
k
1 2 3 4 6 7 8
© Alberto Montresor
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
2016/10/18
42 / 49
Algoritmi di ordinamento
Merge Sort
Merge()
Merge(Item A[ ], integer primo, integer ultimo, integer mezzo)
integer i, j, k, h
i ← primo
j ← mezzo + 1
k ← primo
while i ≤ mezzo and j ≤ ultimo do
if A[i] ≤ A[j] then
B[k] ← A[i]
i←i+1
else
B[k] ← A[j]
j ←j+1
j ← ultimo
for h ← mezzo downto i do
A[j] ← A[h]
j ←j−1
for j ← primo to k − 1 do
A[j] ← B[j]
k ←k+1
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
2016/10/18
43 / 49
Algoritmi di ordinamento
Merge Sort
Costo computazionale
Domanda
Qual è il costo computazionale di Merge()?
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
2016/10/18
44 / 49
Algoritmi di ordinamento
Merge Sort
Costo computazionale
Domanda
Qual è il costo computazionale di Merge()? ⇒ O(n)
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
2016/10/18
44 / 49
Algoritmi di ordinamento
Merge Sort
Merge Sort
Programma completo:
Chiama ricorsivamente se stesso e usa Merge() per unire i risultati
Caso base: sequenze di lunghezza ≤ 1 sono già ordinate
MergeSort(Item A[ ], integer primo, integer ultimo)
if primo < ultimo then
integer mezzo ← b(primo + ultimo)/2c
MergeSort(A, primo, mezzo)
MergeSort(A, mezzo + 1, ultimo)
Merge(A, primo, ultimo, mezzo)
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
2016/10/18
45 / 49
Algoritmi di ordinamento
Merge Sort
MergeSort(): Esecuzione
33, 21, 7, 48, 28, 13, 65, 17
33, 21, 7, 48
33, 21
33
21
Alberto Montresor (UniTN)
28, 13, 65, 17
7,48
7
28, 13
48
28
ASD - Analisi di algoritmi
13
65, 17
65
2016/10/18
17
46 / 49
Algoritmi di ordinamento
Merge Sort
MergeSort(): Esecuzione
33, 21, 7, 48, 28, 13, 65, 17
33, 21, 7, 48
33, 21
33
21
Alberto Montresor (UniTN)
28, 13, 65, 17
7,48
7
28, 13
48
28
ASD - Analisi di algoritmi
13
65, 17
65
2016/10/18
17
46 / 49
Algoritmi di ordinamento
Merge Sort
MergeSort(): Esecuzione
33, 21, 7, 48, 28, 13, 65, 17
33, 21, 7, 48
33, 21
33
21
Alberto Montresor (UniTN)
28, 13, 65, 17
7,48
7
28, 13
48
28
ASD - Analisi di algoritmi
13
65, 17
65
2016/10/18
17
46 / 49
Algoritmi di ordinamento
Merge Sort
MergeSort(): Esecuzione
33, 21, 7, 48, 28, 13, 65, 17
33, 21, 7, 48
33, 21
33
21
Alberto Montresor (UniTN)
28, 13, 65, 17
7,48
7
28, 13
48
28
ASD - Analisi di algoritmi
13
65, 17
65
2016/10/18
17
46 / 49
Algoritmi di ordinamento
Merge Sort
MergeSort(): Esecuzione
33, 21, 7, 48, 28, 13, 65, 17
33, 21, 7, 48
33, 21
33
21
Alberto Montresor (UniTN)
28, 13, 65, 17
7,48
7
28, 13
48
28
ASD - Analisi di algoritmi
13
65, 17
65
2016/10/18
17
46 / 49
Algoritmi di ordinamento
Merge Sort
MergeSort(): Esecuzione
33, 21, 7, 48, 28, 13, 65, 17
33, 21, 7, 48
33, 21
33
21
Alberto Montresor (UniTN)
28, 13, 65, 17
7,48
7
28, 13
48
28
ASD - Analisi di algoritmi
13
65, 17
65
2016/10/18
17
46 / 49
Algoritmi di ordinamento
Merge Sort
MergeSort(): Esecuzione
33, 21, 7, 48, 28, 13, 65, 17
33, 21, 7, 48
33, 21
33
21
Alberto Montresor (UniTN)
28, 13, 65, 17
7,48
7
28, 13
48
28
ASD - Analisi di algoritmi
13
65, 17
65
2016/10/18
17
46 / 49
Algoritmi di ordinamento
Merge Sort
MergeSort(): Esecuzione
33, 21, 7, 48, 28, 13, 65, 17
33, 21, 7, 48
33, 21
28, 13, 65, 17
7,48
28, 13
65, 17
21, 33
33
21
Alberto Montresor (UniTN)
7
48
28
ASD - Analisi di algoritmi
13
65
2016/10/18
17
46 / 49
Algoritmi di ordinamento
Merge Sort
MergeSort(): Esecuzione
33, 21, 7, 48, 28, 13, 65, 17
33, 21, 7, 48
33, 21
28, 13, 65, 17
7,48
28, 13
65, 17
21, 33
33
21
Alberto Montresor (UniTN)
7
48
28
ASD - Analisi di algoritmi
13
65
2016/10/18
17
46 / 49
Algoritmi di ordinamento
Merge Sort
MergeSort(): Esecuzione
33, 21, 7, 48, 28, 13, 65, 17
33, 21, 7, 48
21, 33
7,48
7
Alberto Montresor (UniTN)
28, 13, 65, 17
28, 13
48
28
ASD - Analisi di algoritmi
13
65, 17
65
2016/10/18
17
46 / 49
Algoritmi di ordinamento
Merge Sort
MergeSort(): Esecuzione
33, 21, 7, 48, 28, 13, 65, 17
33, 21, 7, 48
21, 33
7,48
7
Alberto Montresor (UniTN)
28, 13, 65, 17
28, 13
48
28
ASD - Analisi di algoritmi
13
65, 17
65
2016/10/18
17
46 / 49
Algoritmi di ordinamento
Merge Sort
MergeSort(): Esecuzione
33, 21, 7, 48, 28, 13, 65, 17
33, 21, 7, 48
21, 33
7,48
7
Alberto Montresor (UniTN)
28, 13, 65, 17
28, 13
48
28
ASD - Analisi di algoritmi
13
65, 17
65
2016/10/18
17
46 / 49
Algoritmi di ordinamento
Merge Sort
MergeSort(): Esecuzione
33, 21, 7, 48, 28, 13, 65, 17
33, 21, 7, 48
21, 33
7,48
7
Alberto Montresor (UniTN)
28, 13, 65, 17
28, 13
48
28
ASD - Analisi di algoritmi
13
65, 17
65
2016/10/18
17
46 / 49
Algoritmi di ordinamento
Merge Sort
MergeSort(): Esecuzione
33, 21, 7, 48, 28, 13, 65, 17
33, 21, 7, 48
21, 33
7,48
7
Alberto Montresor (UniTN)
28, 13, 65, 17
28, 13
48
28
ASD - Analisi di algoritmi
13
65, 17
65
2016/10/18
17
46 / 49
Algoritmi di ordinamento
Merge Sort
MergeSort(): Esecuzione
33, 21, 7, 48, 28, 13, 65, 17
33, 21, 7, 48
21, 33
28, 13, 65, 17
7,48
28, 13
65, 17
7, 48
7
Alberto Montresor (UniTN)
48
28
ASD - Analisi di algoritmi
13
65
2016/10/18
17
46 / 49
Algoritmi di ordinamento
Merge Sort
MergeSort(): Esecuzione
33, 21, 7, 48, 28, 13, 65, 17
33, 21, 7, 48
21, 33
28, 13, 65, 17
7,48
28, 13
65, 17
7, 48
7
Alberto Montresor (UniTN)
48
28
ASD - Analisi di algoritmi
13
65
2016/10/18
17
46 / 49
Algoritmi di ordinamento
Merge Sort
MergeSort(): Esecuzione
33, 21, 7, 48, 28, 13, 65, 17
33, 21, 7, 48
21, 33
28, 13, 65, 17
7, 48
28, 13
28
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
13
65, 17
65
2016/10/18
17
46 / 49
Algoritmi di ordinamento
Merge Sort
MergeSort(): Esecuzione
33, 21, 7, 48, 28, 13, 65, 17
33, 21, 7, 48
28, 13, 65, 17
7, 21, 33, 48
21, 33
7, 48
28, 13
28
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
13
65, 17
65
2016/10/18
17
46 / 49
Algoritmi di ordinamento
Merge Sort
MergeSort(): Esecuzione
33, 21, 7, 48, 28, 13, 65, 17
33, 21, 7, 48
28, 13, 65, 17
7, 21, 33, 48
21, 33
7, 48
28, 13
28
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
13
65, 17
65
2016/10/18
17
46 / 49
Algoritmi di ordinamento
Merge Sort
MergeSort(): Esecuzione
33, 21, 7, 48, 28, 13, 65, 17
33, 21, 7, 48
28, 13, 65, 17
7, 21, 33, 48
21, 33
7, 48
28, 13
28
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
13
65, 17
65
2016/10/18
17
46 / 49
Algoritmi di ordinamento
Merge Sort
MergeSort(): Esecuzione
33, 21, 7, 48, 28, 13, 65, 17
33, 21, 7, 48
28, 13, 65, 17
7, 21, 33, 48
21, 33
7, 48
28, 13
28
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
13
65, 17
65
2016/10/18
17
46 / 49
Algoritmi di ordinamento
Merge Sort
MergeSort(): Esecuzione
33, 21, 7, 48, 28, 13, 65, 17
33, 21, 7, 48
28, 13, 65, 17
7, 21, 33, 48
21, 33
7, 48
28, 13
28
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
13
65, 17
65
2016/10/18
17
46 / 49
Algoritmi di ordinamento
Merge Sort
MergeSort(): Esecuzione
33, 21, 7, 48, 28, 13, 65, 17
7, 21, 33, 48
28, 13, 65, 17
28, 13
28
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
13
65, 17
65
2016/10/18
17
46 / 49
Algoritmi di ordinamento
Merge Sort
MergeSort(): Esecuzione
33, 21, 7, 48, 28, 13, 65, 17
7, 21, 33, 48
28, 13, 65, 17
28, 13
28
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
13
65, 17
65
2016/10/18
17
46 / 49
Algoritmi di ordinamento
Merge Sort
MergeSort(): Esecuzione
33, 21, 7, 48, 28, 13, 65, 17
7, 21, 33, 48
28, 13, 65, 17
28, 13
28
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
13
65, 17
65
2016/10/18
17
46 / 49
Algoritmi di ordinamento
Merge Sort
MergeSort(): Esecuzione
33, 21, 7, 48, 28, 13, 65, 17
7, 21, 33, 48
28, 13, 65, 17
28, 13
28
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
13
65, 17
65
2016/10/18
17
46 / 49
Algoritmi di ordinamento
Merge Sort
MergeSort(): Esecuzione
33, 21, 7, 48, 28, 13, 65, 17
7, 21, 33, 48
28, 13, 65, 17
28, 13
28
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
13
65, 17
65
2016/10/18
17
46 / 49
Algoritmi di ordinamento
Merge Sort
MergeSort(): Esecuzione
33, 21, 7, 48, 28, 13, 65, 17
7, 21, 33, 48
28, 13, 65, 17
28, 13
28
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
13
65, 17
65
2016/10/18
17
46 / 49
Algoritmi di ordinamento
Merge Sort
MergeSort(): Esecuzione
33, 21, 7, 48, 28, 13, 65, 17
7, 21, 33, 48
28, 13, 65, 17
28, 13
65, 17
13, 28
28
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
13
65
2016/10/18
17
46 / 49
Algoritmi di ordinamento
Merge Sort
MergeSort(): Esecuzione
33, 21, 7, 48, 28, 13, 65, 17
7, 21, 33, 48
28, 13, 65, 17
28, 13
65, 17
13, 28
28
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
13
65
2016/10/18
17
46 / 49
Algoritmi di ordinamento
Merge Sort
MergeSort(): Esecuzione
33, 21, 7, 48, 28, 13, 65, 17
7, 21, 33, 48
28, 13, 65, 17
13, 28
65, 17
65
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
2016/10/18
17
46 / 49
Algoritmi di ordinamento
Merge Sort
MergeSort(): Esecuzione
33, 21, 7, 48, 28, 13, 65, 17
7, 21, 33, 48
28, 13, 65, 17
13, 28
65, 17
65
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
2016/10/18
17
46 / 49
Algoritmi di ordinamento
Merge Sort
MergeSort(): Esecuzione
33, 21, 7, 48, 28, 13, 65, 17
7, 21, 33, 48
28, 13, 65, 17
13, 28
65, 17
65
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
2016/10/18
17
46 / 49
Algoritmi di ordinamento
Merge Sort
MergeSort(): Esecuzione
33, 21, 7, 48, 28, 13, 65, 17
7, 21, 33, 48
28, 13, 65, 17
13, 28
65, 17
65
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
2016/10/18
17
46 / 49
Algoritmi di ordinamento
Merge Sort
MergeSort(): Esecuzione
33, 21, 7, 48, 28, 13, 65, 17
7, 21, 33, 48
28, 13, 65, 17
13, 28
65, 17
65
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
2016/10/18
17
46 / 49
Algoritmi di ordinamento
Merge Sort
MergeSort(): Esecuzione
33, 21, 7, 48, 28, 13, 65, 17
7, 21, 33, 48
28, 13, 65, 17
13, 28
65, 17
17, 65
65
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
2016/10/18
17
46 / 49
Algoritmi di ordinamento
Merge Sort
MergeSort(): Esecuzione
33, 21, 7, 48, 28, 13, 65, 17
7, 21, 33, 48
28, 13, 65, 17
13, 28
65, 17
17, 65
65
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
2016/10/18
17
46 / 49
Algoritmi di ordinamento
Merge Sort
MergeSort(): Esecuzione
33, 21, 7, 48, 28, 13, 65, 17
7, 21, 33, 48
28, 13, 65, 17
13, 28
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
17, 65
2016/10/18
46 / 49
Algoritmi di ordinamento
Merge Sort
MergeSort(): Esecuzione
33, 21, 7, 48, 28, 13, 65, 17
7, 21, 33, 48
28, 13, 65, 17
13, 28
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
17, 65
2016/10/18
46 / 49
Algoritmi di ordinamento
Merge Sort
MergeSort(): Esecuzione
33, 21, 7, 48, 28, 13, 65, 17
7, 21, 33, 48
28, 13, 65, 17
13, 17, 28, 65
13, 28
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
17, 65
2016/10/18
46 / 49
Algoritmi di ordinamento
Merge Sort
MergeSort(): Esecuzione
33, 21, 7, 48, 28, 13, 65, 17
7, 21, 33, 48
28, 13, 65, 17
13, 17, 28, 65
13, 28
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
17, 65
2016/10/18
46 / 49
Algoritmi di ordinamento
Merge Sort
MergeSort(): Esecuzione
33, 21, 7, 48, 28, 13, 65, 17
7, 21, 33, 48
28, 13, 65, 17
13, 17, 28, 65
13, 28
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
17, 65
2016/10/18
46 / 49
Algoritmi di ordinamento
Merge Sort
MergeSort(): Esecuzione
33, 21, 7, 48, 28, 13, 65, 17
7, 21, 33, 48
28, 13, 65, 17
13, 17, 28, 65
13, 28
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
17, 65
2016/10/18
46 / 49
Algoritmi di ordinamento
Merge Sort
MergeSort(): Esecuzione
33, 21, 7, 48, 28, 13, 65, 17
7, 21, 33, 48
Alberto Montresor (UniTN)
13, 17, 28, 65
ASD - Analisi di algoritmi
2016/10/18
46 / 49
Algoritmi di ordinamento
Merge Sort
MergeSort(): Esecuzione
33, 21, 7, 48, 28, 13, 65, 17
7, 21, 33, 48
Alberto Montresor (UniTN)
13, 17, 28, 65
ASD - Analisi di algoritmi
2016/10/18
46 / 49
Algoritmi di ordinamento
Merge Sort
MergeSort(): Esecuzione
33, 21, 7, 48, 28, 13, 65, 17
7, 13, 17, 21, 28, 33, 48, 65
7, 21, 33, 48
Alberto Montresor (UniTN)
13, 17, 28, 65
ASD - Analisi di algoritmi
2016/10/18
46 / 49
Algoritmi di ordinamento
Merge Sort
MergeSort(): Esecuzione
33, 21, 7, 48, 28, 13, 65, 17
7, 13, 17, 21, 28, 33, 48, 65
7, 21, 33, 48
Alberto Montresor (UniTN)
13, 17, 28, 65
ASD - Analisi di algoritmi
2016/10/18
46 / 49
Algoritmi di ordinamento
Merge Sort
MergeSort(): Esecuzione
33, 21, 7, 48, 28, 13, 65, 17
7, 13, 17, 21, 28, 33, 48, 65
7, 21, 33, 48
Alberto Montresor (UniTN)
13, 17, 28, 65
ASD - Analisi di algoritmi
2016/10/18
46 / 49
Algoritmi di ordinamento
Merge Sort
MergeSort(): Esecuzione
33, 21, 7, 48, 28, 13, 65, 17
7, 13, 17, 21, 28, 33, 48, 65
7, 21, 33, 48
Alberto Montresor (UniTN)
13, 17, 28, 65
ASD - Analisi di algoritmi
2016/10/18
46 / 49
Algoritmi di ordinamento
Merge Sort
MergeSort(): Esecuzione
33, 21, 7, 48, 28, 13, 65, 17
7, 13, 17, 21, 28, 33, 48, 65
7, 21, 33, 48
Alberto Montresor (UniTN)
13, 17, 28, 65
ASD - Analisi di algoritmi
2016/10/18
46 / 49
Algoritmi di ordinamento
Merge Sort
MergeSort(): Esecuzione
33, 21, 7, 48, 28, 13, 65, 17
7, 13, 17, 21, 28, 33, 48, 65
7, 21, 33, 48
Alberto Montresor (UniTN)
13, 17, 28, 65
ASD - Analisi di algoritmi
2016/10/18
46 / 49
Algoritmi di ordinamento
Merge Sort
MergeSort(): Esecuzione
33, 21, 7, 48, 28, 13, 65, 17
7, 13, 17, 21, 28, 33, 48, 65
7, 21, 33, 48
Alberto Montresor (UniTN)
13, 17, 28, 65
ASD - Analisi di algoritmi
2016/10/18
46 / 49
Algoritmi di ordinamento
Merge Sort
MergeSort(): Esecuzione
33, 21, 7, 48, 28, 13, 65, 17
7, 13, 17, 21, 28, 33, 48, 65
7, 21, 33, 48
Alberto Montresor (UniTN)
13, 17, 28, 65
ASD - Analisi di algoritmi
2016/10/18
46 / 49
Algoritmi di ordinamento
Merge Sort
MergeSort(): Esecuzione
7, 13, 17, 21, 28, 33, 48, 65
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
2016/10/18
46 / 49
Algoritmi di ordinamento
Merge Sort
MergeSort(): Esecuzione
7, 13, 17, 21, 28, 33, 48, 65
7, 21, 33, 48
21,33
33
21
Alberto Montresor (UniTN)
13, 17, 28, 65
7,48
7
13,28
48
28
ASD - Analisi di algoritmi
17,65
13
65
2016/10/18
17
46 / 49
Algoritmi di ordinamento
Merge Sort
Analisi di MergeSort()
Un’assunzione semplificativa:
n = 2k , ovvero l’altezza dell’albero di suddivisioni è esattamente
k = log n;
Tutti i sottovettori hanno dimensioni che sono potenze esatte di 2
Costo computazionale: O(n log n)
(
c
n=1
T (n) =
2T (n/2) + dn n > 1
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
2016/10/18
47 / 49
Algoritmi di ordinamento
Merge Sort
Costo computazionale di Merge Sort
Domanda
Qual è il costo computazionale di MergeSort()?
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
2016/10/18
48 / 49
Algoritmi di ordinamento
Merge Sort
Costo computazionale di Merge Sort
Domanda
Qual è il costo computazionale di MergeSort()? ⇒ O(n log n)
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
2016/10/18
48 / 49
Algoritmi di ordinamento
Merge Sort
Costo computazionale di Merge Sort
Domanda
Qual è il costo computazionale di MergeSort()? ⇒ O(n log n)
0
n
1
n/2
2
n/2
n/4
n/4
n/4
n/4
......
log n - 1
log n
2
1
2
1
1
Alberto Montresor (UniTN)
2
1
1
2
1
1
2
1
1
2
1
1
ASD - Analisi di algoritmi
2
1
1
2
1
1
2
1
1
2
1
2016/10/18
1
1
48 / 49
Algoritmi di ordinamento
Merge Sort
Ricorsione
Alberto Montresor (UniTN)
ASD - Analisi di algoritmi
2016/10/18
49 / 49