Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Notazione asintotica
Relazioni di ricorrenza
M. Cecilia Verri
The video and all its contents are protected by copyright. They can be used, personally by those entitled, for the
exclusive teaching and research purposes; they cannot be marketed, disseminated, distributed, modified or used in
any other way that is not expressly authorized by the owners and / or holders of copyright. For the purposes of
compliance with data protection law, the use of videos is only allowed for personal use, while any further processing
operation is prohibited without the prior consent of the data subject. Please note that outside the strictly personal
use, for any further use the student will be considered Data Controller and subject to the legal obligations provided
for that figure. Any infringement will be punished according to the current legislation on copyright and on privacy
protection.
Valutare un algoritmo
Valutare un algoritmo
Valutare un algoritmo
Valutare un algoritmo
Valutare un algoritmo
Correttezza
Semplicità
Semplicità
La misura scelta:
deve consentire di confrontare due algoritmi per la soluzione
dello stesso problema
deve essere indipendente dalla macchina e dal linguaggio
utilizzati
deve essere indipendente dai dettagli di programmazione
La misura scelta:
deve consentire di confrontare due algoritmi per la soluzione
dello stesso problema
deve essere indipendente dalla macchina e dal linguaggio
utilizzati
deve essere indipendente dai dettagli di programmazione
Perciò è necessario:
individuare le operazioni fondamentali svolte dall’algoritmo
che ne caratterizzano la complessità
esprimere la variazione della complessità al variare della
dimensione dell’input
Parametri critici
Problema Dimensione
trovare un dato in una lista di dati numero di dati nella lista
moltiplicare due matrici dimensioni delle due matrici
ordinare una lista di dati numero di dati nella lista
risolvere un problema su un grafo numero di vertici e archi del grafo
Ricerca sequenziale
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
A B C D E F G H I L M N O P Q R S
Ricerca sequenziale
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
A B C D E F G H I L M N O P Q R S
Ricerca sequenziale
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
A B C D E F G H I L M N O P Q R S
Ricerca sequenziale
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
A B C D E F G H I L M N O P Q R S
Ricerca sequenziale
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
A B C D E F G H I L M N O P Q R S
Ricerca sequenziale
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
A B C D E F G H I L M N O P Q R S
Ricerca sequenziale
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
A B C D E F G H I L M N O P Q R S
Ricerca sequenziale
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
A B C D E F G H I L M N O P Q R S
Ricerca sequenziale
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
A B C D E F G H I L M N O P Q R S
Ricerca sequenziale
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
A B C D E F G H I L M N O P Q R S
Ricerca sequenziale
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
A B C D E F G H I L M N O P Q R S
Ricerca sequenziale
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
A B C D E F G H I L M N O P Q R S
Ricerca sequenziale
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
A B C D E F G H I L M N O P Q R S
Misure di complessità
Tempo di esecuzione?
Difficoltà di implementazione?
Misure di complessità
Tempo di esecuzione?
Difficoltà di implementazione?
Numero di operazioni fondamentali
Caso ottimo: v[0]=K
1 confronto
Misure di complessità
Tempo di esecuzione?
Difficoltà di implementazione?
Numero di operazioni fondamentali
Caso ottimo: v[0]=K
1 confronto
Caso pessimo: v[n-1]=K oppure K non esiste
n confronti
C (n) = n
Misure di complessità
Tempo di esecuzione?
Difficoltà di implementazione?
Numero di operazioni fondamentali
Caso ottimo: v[0]=K
1 confronto
Caso pessimo: v[n-1]=K oppure K non esiste
n confronti
C (n) = n
Caso medio (ogni elemento della lista ha la stessa probabilità
di essere ricercato)
1 1 1 1 1 + 2 + ··· + n n+1
1· + 2 · + 3 · + 4 · + ··· = =
n n n n n 2
n+1
C̄ (n) = 2
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
A B C D E F G H I L M N O P Q R S
12 confronti
Un altro metodo
Ricerca binaria
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
A B C D E F G H I L M N O P Q R S
Ricerca binaria
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
A B C D E F G H I L M N O P Q R S
Ricerca binaria
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
A B C D E F G H I L M N O P Q R S
Ricerca binaria
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
A B C D E F G H I L M N O P Q R S
Misura di complessità
Misura di complessità
C (n) = C (n/2) + 1, n ≥ 2
C (1) = 1
Misura di complessità
C (n) = C (n/2) + 1, n ≥ 2
C (1) = 1
C (n) = log2 n
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
A B C D E F G H I L M N O P Q R S
4 confronti
Confronto
log2 n n n log2 n n2 2n
n=2 1 2 2 4 4
n=10 3,322 10 33,22 100 1024
n=100 6,644 100 664,4 10.000 >> 1030
n=1.000 9,966 1.000 9.966 1.000.000 >> 10300
n=10.000 13,287 10.000 132.877 100.000.000 >> 103000
Tabella: Numero di operazioni fondamentali al variare della dimensione
del problema
log2 n n n log2 n n2 2n
n=2 1µs 2 µs 2 µs 4 µs 4 µs
n=10 3 µs 10µs 30 µs 100 µs 1ms
n=100 7 µs 100 µs 700 µs 10 ms 1016 anni
n=1.000 10 µs 1 ms 10 ms 1s very long
n=10.000 13µs 10 ms 130 ms 2 min very long
Tabella: Tempo di esecuzione (arrotondato) al variare della dimensione
del problema, per un processore che esegue un milione di operazioni
fondamentali al secondo
Complessità in spazio
Ottimalità
Notazione O grande
Notazione O grande
Notazione O grande
Notazione O grande
Esempio
n(n + 1)
C (n) = ∈ O(n2 )
2
Infatti la disequazione:
n(n + 1)
≤ c · n2
2
è soddisfatta con c=1 per ogni n ≥ 1
Problemi
Problemi
Trattabilità
Problemi trattabili
Problemi per i quali esiste un algoritmo con complessità minore o
uguale a O(np ) (complessità polinomiale)
Problemi intrattabili
Problemi per i quali un p del genere non esiste (complessità
esponenziale)
Decidibilità
Algoritmi decidibili
I problemi trattabili e intrattabili si dicono decidibili perché, a
prescindere dalla loro complessità è sempre possibile trovare un
algoritmo risolutivo.
Ricorrenze di base
Relazione 1
C (n) = C (n − 1) + n, n≥2
C (1) = 1
Relazione 1
C (n) = C (n − 1) + n, n≥2
C (1) = 1
C (n) = C (n − 1) + n = C (n − 2) + (n − 1) + n =
= C (n − 3) + (n − 2) + (n − 1) + n = · · · =
= C (1) + 2 + 3 + · · · + (n − 2) + (n − 1) + n =
n(n + 1)
= 1 + 2 + 3 + · · · + (n − 2) + (n − 1) + n =
2
Relazione 1
C (n) = C (n − 1) + n, n≥2
C (1) = 1
C (n) = C (n − 1) + n = C (n − 2) + (n − 1) + n =
= C (n − 3) + (n − 2) + (n − 1) + n = · · · =
= C (1) + 2 + 3 + · · · + (n − 2) + (n − 1) + n =
n(n + 1)
= 1 + 2 + 3 + · · · + (n − 2) + (n − 1) + n =
2
C (n) ∈ O(n2 )
Relazione 2
Relazione 2
n
C (n) = C ( ) + 1, n≥2
2
C (1) = 0
= C (2N−3 ) + 3 = · · · =
= C (20 ) + N = N = log2 n
Relazione 2
n
C (n) = C ( ) + 1, n≥2
2
C (1) = 0
= C (2N−3 ) + 3 = · · · =
= C (20 ) + N = N = log2 n
C (n) ∈ O(log2 n)
Relazione 3
Relazione 3
n
C (n) = C ( ) + n, n≥2
2
C (1) = 1
Relazione 3
n
C (n) = C ( ) + n, n≥2
2
C (1) = 1
C (n) ∈ O(n)
M.C. Verri Analisi di complessità degli algoritmi
Analisi di algoritmi
Notazione asintotica Esercizi
Relazioni di ricorrenza
Relazione 4
Relazione 4
n
C (n) = 2 · C ( ) + n, n≥2
2
C (1) = 0
C (2N ) = 2 · C (2N−1 ) + 2N
Relazione 4
n
C (n) = 2 · C ( ) + n, n≥2
2
C (1) = 0
Relazione 5
Relazione 5
n
C (n) = 2 · C ( ) + 1, n≥2
2
C (1) = 1
C (2N ) = 2 · 2N ⇒ C (n) = 2n
Relazione 5
n
C (n) = 2 · C ( ) + 1, n≥2
2
C (1) = 1
C (2N ) = 2 · 2N ⇒ C (n) = 2n
C (n) ∈ O(n)
M.C. Verri Analisi di complessità degli algoritmi
Analisi di algoritmi
Notazione asintotica Esercizi
Relazioni di ricorrenza
Esercizio 1
1: procedure AlgA(n)
2: s←0
3: for i = 1, . . . , n do
4: s ←s +i
5: end for
6: return s
7: end procedure
Esercizio 1
1: procedure AlgA(n)
2: s←0
3: for i = 1, . . . , n do
4: s ←s +i . operazione fondamentale
5: end for
6: return s
7: end procedure
Esercizio 1
1: procedure AlgA(n)
2: s←0
3: for i = 1, . . . , n do
4: s ←s +i . operazione fondamentale
5: end for
6: return s
7: end procedure
L’operazione fondamentale viene ripetuta n volte perciò la
complessità di AlgA è O(n)
Esercizio 2
1: procedure AlgB(n)
2: a←1
3: for i = 1, . . . , n do
4: for j = 1, . . . , n do
5: a ←a+i +j
6: end for
7: end for
8: return a
9: end procedure
Esercizio 2
1: procedure AlgB(n)
2: a←1
3: for i = 1, . . . , n do
4: for j = 1, . . . , n do
5: a ←a+i +j . operazione fondamentale
6: end for
7: end for
8: return a
9: end procedure
Esercizio 2
1: procedure AlgB(n)
2: a←1
3: for i = 1, . . . , n do
4: for j = 1, . . . , n do
5: a ←a+i +j . operazione fondamentale
6: end for
7: end for
8: return a
9: end procedure
L’operazione fondamentale viene ripetuta n × n volte perciò la
complessità di AlgB è O(n2 )
Esercizio 3
1: procedure AlgD(n)
2: if n = 1 then
3: return 1
4: else
5: return n+AlgD(n − 1)
6: end if
7: end procedure
Esercizio 3
1: procedure AlgD(n)
2: if n = 1 then
3: return 1 . caso base
4: else
5: return n+AlgD(n − 1) . chiamata ricorsiva
6: end if
7: end procedure
Esercizio 3
1: procedure AlgD(n)
2: if n = 1 then
3: return 1 . caso base
4: else
5: return n+AlgD(n − 1) . chiamata ricorsiva
6: end if
7: end procedure
La complessità di AlgD è descritta dalla relazione di ricorrenza
C (1) = 1
C (n) = 1 + C (n − 1)
perciò la complessità di AlgD è O(n)
Esercizio 4
Esercizio 4
C (1) = 1
C (n) = 1 + C (n − 1)
perciò la complessità di AlgF(n) è O(n)
Esercizio 4