Complessità computazionale •  Obie:vo principale: Analisi della complessità degli algoritmi –  Confrontare algoritmi corretti che
risolvono lo stesso problema, allo scopo di
scegliere quello migliore in relazione a
uno o più parametri di valutazione.
A. Ferrari Valutazione con un parametro •  Se si ha a disposizione un solo
parametro per valutare un algoritmo,
per esempio il tempo d’esecuzione, è
semplice la scelta:
il più veloce.
•  Ogni altra caratteristica non viene
considerata.
Valutazione con più parametri •  Nel caso di due parametri
normalmente si considera
–  il tempo.
•  numero di passi (istruzioni) che occorrono per
produrre il risultato finale.
•  Passi e non secondi o millisecondi perché il
tempo varia al variare delle potenzialità del
calcolatore.
–  lo spazio
•  occupazione di memoria Durata delle istruzioni Efficienza •  Le istruzioni non hanno tutte lo stesso tempo
di esecuzione.
•  Il tempo di esecuzione di un algoritmo è una
somma pesata delle istruzioni:
•  L’approssimazione di una funzione
con una funzione asintotica è molto
utile per semplificare i calcoli
•  La notazione asintotica di una funzione
descrive il comportamento in modo
semplificato, ignorando dettagli della
formula.
•  Esempio: per valori sufficientemente
alti di x il comportamento della
funzione f(x) = x2 – 3x + 1 è
approssimabile con la funzione f(x) =
x2.
Ttotale=(i0*t0*n0)+(i1*t1*n1)+…+(im*tm*nm)
–  ij è l’istruzione,
–  tj è il costo dell’istruzione, il tempo di esecuzione
–  nj è il numero di volte che viene eseguita.
1 Misura dell’efficienza •  Per un algoritmo con un input di
dimensione n, possiamo definirne
l’efficienza dicendo che
–  “l’algoritmo per calcolare il risultato finale
impiega al più f(n) passi”
–  “l’algoritmo ha complessità f(n)”.
Terminologia (1) •  O (O grande) equivale al simbolo <=.
–  Corrisponde a “al più come”.
–  “la complessità dell’algoritmo è O(f(n))” equivale a “il
tempo d’esecuzione dell’algoritmo è <= a f(n)”.
•  o (o piccolo) equivale al simbolo <.
–  “la complessità dell’algoritmo è o(f(n))” equivale a “il
tempo d’esecuzione dell’algoritmo è strettamente < a
f(n)”.
•  Θ (teta) corrispondente al simbolo =.
–  “la complessità dell’algoritmo è Θ(f(n))” equivale a “il
tempo d’esecuzione dell’algoritmo è = a f(n)”
Terminologia (2) •  Ω (omega grande) equivale al
simbolo >=.
–  “la complessità dell’algoritmo è Ω(f(n))” equivale a dire
“il tempo d’esecuzione dell’algoritmo è >= a f(n)”.
•  ω (omega piccolo)
equivale al simbolo >.
–  “la complessità dell’algoritmo è ω(f(n))” equivale a
dire“il tempo d’esecuzione dell’algoritmo è strettamente >
di f(n)”
Complessità computazionale •  La complessità computazionale di un
algoritmo è la quantità di tempo
necessaria per produrre il risultato finale.
•  La complessità si esprime sotto forma di
una funzione matematica che mette in
relazione il tempo di esecuzione di un
algoritmo con la dimensione dei dati di
input.
•  Il caso peggiore per un algoritmo è il
caso in cui questo, per generare il
risultato, impiega più tempo.
Complessità •  In molti casi la complessità è legata al tipo o
al numero dei dati di input
–  Ad esempio la ricerca di un valore in un vettore
ordinato dipende dalla dimensione del vettore
•  La complessità può dipendere anche dalla
disposizione e dal tipo di dati
–  Sempre nell’algoritmo di ricerca in un vettore
ordinato avremo il caso:
•  Ottimo
•  Pessimo
•  Medio
Tipi di complessità • 
• 
• 
• 
• 
lineare
logaritmica
quadratica
esponenziale
fattoriale
2 Lineare •  l’algoritmo ha
complessità O(n)
•  Esempio:
–  algoritmo di
ricerca sequenziale
di un elemento in
un array
QuadraKca •  Un esempio è
l’algoritmo di
ordinamento
bubblesort
eseguito su un
array di elementi
•  l’algoritmo ha
complessità O(n2)
Torre di Hanoi
Logaritmica •  Esempio ricerca
dicotomica in un
array
•  La ricerca
dicotomica ha
complessità
O(log2(n))
Esponenziale
•  l’algoritmo della Torre di Hanoi
ha complessità Ω(2n),
•  La Torre di Hanoi è un
rompicapo matematico
composto da tre paletti e un
certo numero di dischi di
grandezza decrescente, che
possono essere infilati in uno
qualsiasi dei paletti.
•  Il gioco inizia con tutti i dischi
incolonnati su un paletto in
ordine decrescente, in modo
da formare un cono.
•  Lo scopo è portare tutti dischi
sull’ultimo paletto, potendo
spostare solo un disco alla volta
e potendo mettere un disco
solo su uno più grande, mai su
uno più piccolo
Fa2oriale
•  E’ quella che
cresce più
velocemente
rispetto a tutte le
precedenti.
•  Esempio: algoritmo
che calcola tutti gli
anagrammi di una
parola di n lettere
distinte.
•  la complessità di un
tale algoritmo è
Θ(n!)
3 logaritmica < lineare < quadratica < esponenziale < fa2oriale
Confronto 4