Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Liliana Lo Presti
Algoritmi ricorsivi
• Descriviamo il tempo di esecuzione attraverso una relazione di
ricorrenza
• Il tempo speso dall’algoritmo è pari a: il tempo speso all’interno della
procedura + il tempo speso nelle chiamate ricorsive
• Per la ricercar binaria:
𝑇 𝑛 = 𝑂 1 + 𝑇 𝑛/2
• Il problema diventa quello di manipolare tale relazione per ottenere
un costo che sia funzione di n
Algoritmi ricorsivi – Metodi di analisi
• Metodo dell’iterazione: “Srotoliamo” la relazione
• Oppure
• Usiamo il teorema fondamentale delle ricorrenze
• Utile quando il problema è risolvibile con la tecnica del divide et impera
Tecnica del divide et impera
• Dato un problema di dimensione n, lo si divide in k sotto-problemi di
dimensione n/b (quindi di dimensione più piccola)
• Si risolvono i sotto-problemi ricorsivamente
𝑛
𝑇 𝑛 =𝑘%𝑇 + 𝑓(𝑛)
𝑏
f(n) è il costo necessario per dividere il problema in k sotto-problemi e combinarne le
soluzioni
Es.: Ricerca binaria
Algorithm 4 Search the value v among the n ordered elements of S
1: function binarySearch(S, v, first, last)
2: if first > last then
3: return 0
4: m b first+last
2 c
5: if S[m] = v then
6: return m
7: else if S[m] > v then
8: return binarySearch(S, v, first, m 1)
9: else
10: return binarySearch(S, v, m + 1, last)
K chiamate
Proprietà
• I sotto-problemi al livello i hanno dimensione !⁄"!
• In definitiva:
&'(" !
𝑛
𝑇 𝑛 = 4 𝑘#𝑓
𝑏#
#$%
Per il teorema che segue, è inoltre necessario
sapere che:
Se 𝒇𝟏 𝒏 = 𝑶(𝒈𝟏 𝒏 ) e 𝒇𝟐 𝒏 = 𝑶(𝒈𝟐 𝒏 ), allora
𝑓# 𝑛 + 𝑓$ 𝑛 = 𝑂(max 𝑔# 𝑛 ; 𝑔$ 𝑛 )
Dimostrazione
𝒇𝟏 𝒏 ≤ 𝒄𝟏 𝒈 𝟏 𝒏
𝒇𝟐 𝒏 ≤ 𝒄𝟐 𝒈 𝟐 𝒏
Sia 𝒈𝑴 (𝒏) = 𝒎𝒂𝒙{𝒈𝟏 𝒏 ; 𝒈𝟐 𝒏 }
allora
𝒇𝟏 𝒏 ≤ 𝒄𝟏 𝒈 𝑴 𝒏
𝒇𝟐 𝒏 ≤ 𝒄𝟐 𝒈 𝑴 𝒏
e sommando:
𝒇𝟏 𝒏 + 𝒇𝟐 𝒏 ≤ (𝒄𝟏 +𝒄𝟐 )𝒈𝑴 𝒏
Esempi
Se 𝒇𝟏 𝒏 = 𝑶(𝒏𝟐) e 𝒇𝟐 𝒏 = 𝑶(𝒏 𝒍𝒐𝒈 𝒏), allora
𝑓+ 𝑛 + 𝑓, 𝑛 = 𝑂(𝒏𝟐)
𝑓+ 𝑛 + 𝑓, 𝑛 = 𝑂(log 𝑛)
Teorema Master
Teorema Master
Teorema Master
Teorema Master
Il costo totale T(n) = Lc + Ic dove Ic è il costo dei nodi interni ed Lc il costo dei nodi foglia
Teorema Master
Il costo totale T(n) = Lc + Ic dove Ic è il costo dei nodi interni ed Lc il costo dei nodi foglia
Teorema Master Ic per livello
Teorema Master Ic per livello
Lc
T(n) =
Teorema Master
T(n) =
Ci sono 3 casi:
Teorema Master
T(n) =
Ci sono 3 casi:
1. Il costo cresce
geometricamente dalla radice
alle foglie
Lc cresce asintoticamente più di Il costo delle foglie predomina!
f(n) di un fattore polinomiale
nepsilon
Teorema Master
T(n) =
Ci sono 3 casi:
Ci sono 3 casi:
0(!)
𝑓 𝑛 > 𝑛&'(" / ≥ 𝑐𝑛3 = Ω(𝑛3 )
!#$%" &
Teorema fondamentale delle ricorrenze
(detto anche Teorema Master)
• La relazione di ricorrenza
𝑛
𝑘%𝑇 + 𝑓(𝑛) 𝑠𝑒 𝑛 > 1
𝑇 𝑛 =< 𝑏
1 𝑠𝑒 𝑛 = 1
Ha soluzione:
• La soluzione della ricorrenza è determinate dalla più grande tra le due funzioni:
• Caso 2: le due funzioni hanno la stessa dimensione, allora moltiplichiamo per un fattore
logaritmico 𝑇 𝑛 = 𝜃 𝑓(𝑛) log 𝑛 = 𝜃 𝑛&'(! ) log 𝑛
𝒏 Caso 1: 𝐟 𝒏 = 𝑶 𝒏𝒍𝒐𝒈𝒃 𝒌*𝝐 con 𝝐 > 𝟎 ⇒ 𝑻 𝒏 = 𝜽 𝒏𝒍𝒐𝒈𝒃 𝒌
𝒌7𝑻 + 𝒇(𝒏) 𝒏>𝟏
𝑻 𝒏 =6 𝒃 Caso 2: 𝐟 𝒏 = 𝜣 𝒏𝒍𝒐𝒈𝒃 𝒌 ⇒ 𝑻 𝒏 = 𝜽 𝒏𝒍𝒐𝒈𝒃 𝒌 𝒍𝒐𝒈 𝒏
𝟏 𝒏=𝟏
Caso 3: 𝐟 𝒏 = 𝜴 𝒏𝒍𝒐𝒈𝒃 𝒌,𝝐 , 𝝐 > 𝟎,
𝒏 ⇒ 𝑻 𝒏 = 𝜽 𝒇(𝒏)
𝒌𝒇 ≤ 𝒄𝒇 𝒏 , 𝒄 < 𝟏
𝒃
Esempi
Sia T(n) = 3T(n/9) + c
𝒏 Caso 1: 𝐟 𝒏 = 𝑶 𝒏𝒍𝒐𝒈𝒃 𝒌*𝝐 con 𝝐 > 𝟎 ⇒ 𝑻 𝒏 = 𝜽 𝒏𝒍𝒐𝒈𝒃 𝒌
𝒌7𝑻 + 𝒇(𝒏) 𝒏>𝟏
𝑻 𝒏 =6 𝒃 Caso 2: 𝐟 𝒏 = 𝜣 𝒏𝒍𝒐𝒈𝒃 𝒌 ⇒ 𝑻 𝒏 = 𝜽 𝒏𝒍𝒐𝒈𝒃 𝒌 𝒍𝒐𝒈 𝒏
𝟏 𝒏=𝟏
Caso 3: 𝐟 𝒏 = 𝜴 𝒏𝒍𝒐𝒈𝒃 𝒌,𝝐 , 𝝐 > 𝟎,
𝒏 ⇒ 𝑻 𝒏 = 𝜽 𝒇(𝒏)
𝒌𝒇 ≤ 𝒄𝒇 𝒏 , 𝒄 < 𝟏
𝒃
Esempi
Sia T(n) = 3T(n/9) + c
k=3, b=9, f(n)=c
𝒏 Caso 1: 𝐟 𝒏 = 𝑶 𝒏𝒍𝒐𝒈𝒃 𝒌*𝝐 con 𝝐 > 𝟎 ⇒ 𝑻 𝒏 = 𝜽 𝒏𝒍𝒐𝒈𝒃 𝒌
𝒌7𝑻 + 𝒇(𝒏) 𝒏>𝟏
𝑻 𝒏 =6 𝒃 Caso 2: 𝐟 𝒏 = 𝜣 𝒏𝒍𝒐𝒈𝒃 𝒌 ⇒ 𝑻 𝒏 = 𝜽 𝒏𝒍𝒐𝒈𝒃 𝒌 𝒍𝒐𝒈 𝒏
𝟏 𝒏=𝟏
Caso 3: 𝐟 𝒏 = 𝜴 𝒏𝒍𝒐𝒈𝒃 𝒌,𝝐 , 𝝐 > 𝟎,
𝒏 ⇒ 𝑻 𝒏 = 𝜽 𝒇(𝒏)
𝒌𝒇 ≤ 𝒄𝒇 𝒏 , 𝒄 < 𝟏
𝒃
Esempi
Sia T(n) = 3T(n/9) + c
k=3, b=9, f(n)=c
𝑐 = 𝑂 𝑛&'(( 893 = 𝑂 𝑛+/,93
𝒏 Caso 1: 𝐟 𝒏 = 𝑶 𝒏𝒍𝒐𝒈𝒃 𝒌*𝝐 con 𝝐 > 𝟎 ⇒ 𝑻 𝒏 = 𝜽 𝒏𝒍𝒐𝒈𝒃 𝒌
𝒌7𝑻 + 𝒇(𝒏) 𝒏>𝟏
𝑻 𝒏 =6 𝒃 Caso 2: 𝐟 𝒏 = 𝜣 𝒏𝒍𝒐𝒈𝒃 𝒌 ⇒ 𝑻 𝒏 = 𝜽 𝒏𝒍𝒐𝒈𝒃 𝒌 𝒍𝒐𝒈 𝒏
𝟏 𝒏=𝟏
Caso 3: 𝐟 𝒏 = 𝜴 𝒏𝒍𝒐𝒈𝒃 𝒌,𝝐 , 𝝐 > 𝟎,
𝒏 ⇒ 𝑻 𝒏 = 𝜽 𝒇(𝒏)
𝒌𝒇 ≤ 𝒄𝒇 𝒏 , 𝒄 < 𝟏
𝒃
Esempi
Sia T(n) = 3T(n/9) + c
k=3, b=9, f(n)=c
𝑐 = 𝑂 𝑛&'(( 893 = 𝑂 𝑛+/,93
siamo nel caso 1 del teorema (non valgono limitazioni inferiori)
𝑇 𝑛 = Θ( 𝑛)
𝒏 Caso 1: 𝐟 𝒏 = 𝑶 𝒏𝒍𝒐𝒈𝒃 𝒌*𝝐 con 𝝐 > 𝟎 ⇒ 𝑻 𝒏 = 𝜽 𝒏𝒍𝒐𝒈𝒃 𝒌
𝒌7𝑻 + 𝒇(𝒏) 𝒏>𝟏
𝑻 𝒏 =6 𝒃 Caso 2: 𝐟 𝒏 = 𝜣 𝒏𝒍𝒐𝒈𝒃 𝒌 ⇒ 𝑻 𝒏 = 𝜽 𝒏𝒍𝒐𝒈𝒃 𝒌 𝒍𝒐𝒈 𝒏
𝟏 𝒏=𝟏
Caso 3: 𝐟 𝒏 = 𝜴 𝒏𝒍𝒐𝒈𝒃 𝒌,𝝐 , 𝝐 > 𝟎,
𝒏 ⇒ 𝑻 𝒏 = 𝜽 𝒇(𝒏)
𝒌𝒇 ≤ 𝒄𝒇 𝒏 , 𝒄 < 𝟏
𝒃
Esempi
Sia T(n) = 3T(n/9) + n
k=3, b=9, f(n)=n à 𝑛&'(( 8 = 𝑛+/,
𝑛 ≥ 𝑛+/,
𝒏 Caso 1: 𝐟 𝒏 = 𝑶 𝒏𝒍𝒐𝒈𝒃 𝒌*𝝐 con 𝝐 > 𝟎 ⇒ 𝑻 𝒏 = 𝜽 𝒏𝒍𝒐𝒈𝒃 𝒌
𝒌7𝑻 + 𝒇(𝒏) 𝒏>𝟏
𝑻 𝒏 =6 𝒃 Caso 2: 𝐟 𝒏 = 𝜣 𝒏𝒍𝒐𝒈𝒃 𝒌 ⇒ 𝑻 𝒏 = 𝜽 𝒏𝒍𝒐𝒈𝒃 𝒌 𝒍𝒐𝒈 𝒏
𝟏 𝒏=𝟏
Caso 3: 𝐟 𝒏 = 𝜴 𝒏𝒍𝒐𝒈𝒃 𝒌,𝝐 , 𝝐 > 𝟎,
𝒏 ⇒ 𝑻 𝒏 = 𝜽 𝒇(𝒏)
𝒌𝒇 ≤ 𝒄𝒇 𝒏 , 𝒄 < 𝟏
𝒃
Esempi
Sia T(n) = 3T(n/9) + n
k=3, b=9, f(n)=n
)
;3
n= Ω 𝑛&'(( 8;3 =Ω 𝑛 * àpotremmo essere nel terzo caso
! +
3 < ≤ 𝑐𝑛 ogni 𝑐 > 8 . Poiché c<1, siamo nel caso 3
𝑇 𝑛 = Θ(𝑛)
𝒏 Caso 1: 𝐟 𝒏 = 𝑶 𝒏𝒍𝒐𝒈𝒃 𝒌*𝝐 con 𝝐 > 𝟎 ⇒ 𝑻 𝒏 = 𝜽 𝒏𝒍𝒐𝒈𝒃 𝒌
𝒌7𝑻 + 𝒇(𝒏) 𝒏>𝟏
𝑻 𝒏 =6 𝒃 Caso 2: 𝐟 𝒏 = 𝜣 𝒏𝒍𝒐𝒈𝒃 𝒌 ⇒ 𝑻 𝒏 = 𝜽 𝒏𝒍𝒐𝒈𝒃 𝒌 𝒍𝒐𝒈 𝒏
𝟏 𝒏=𝟏
Caso 3: 𝐟 𝒏 = 𝜴 𝒏𝒍𝒐𝒈𝒃 𝒌,𝝐 , 𝝐 > 𝟎,
𝒏 ⇒ 𝑻 𝒏 = 𝜽 𝒇(𝒏)
𝒌𝒇 ≤ 𝒄𝒇 𝒏 , 𝒄 < 𝟏
𝒃
Esempi
Sia T(n) = 2T(n/2) + n
k=2, b=2, f(n)=n à log , 2 = 1 à 𝒏𝒍𝒐𝒈𝒃 𝒌= 𝒏𝟏 = 𝒏
n= Θ(𝑛) à siamo nel caso 2
𝑇 𝑛 = Θ(𝑛 log 𝑛)
𝒏 Caso 1: 𝐟 𝒏 = 𝑶 𝒏𝒍𝒐𝒈𝒃 𝒌*𝝐 con 𝝐 > 𝟎 ⇒ 𝑻 𝒏 = 𝜽 𝒏𝒍𝒐𝒈𝒃 𝒌
𝒌7𝑻 + 𝒇(𝒏) 𝒏>𝟏
𝑻 𝒏 =6 𝒃 Caso 2: 𝐟 𝒏 = 𝜣 𝒏𝒍𝒐𝒈𝒃 𝒌 ⇒ 𝑻 𝒏 = 𝜽 𝒏𝒍𝒐𝒈𝒃 𝒌 𝒍𝒐𝒈 𝒏
Esercizi𝟏 𝒏=𝟏
Caso 3: 𝐟 𝒏 = 𝜴 𝒏𝒍𝒐𝒈𝒃 𝒌,𝝐 , 𝝐 > 𝟎,
𝒏 ⇒ 𝑻 𝒏 = 𝜽 𝒇(𝒏)
𝒌𝒇 ≤ 𝒄𝒇 𝒏 , 𝒄 < 𝟏
𝒃
!
1. 𝑇 𝑛 = 4𝑇 ,
+𝑛
!
2. 𝑇 𝑛 = 4𝑇 ,
+ 𝑛,
!
3. 𝑇 𝑛 = 4𝑇 ,
+ 𝑛8
!
4. 𝑇 𝑛 = 3𝑇 8
+𝑛
Soluzioni
1. 𝑇 𝑛 = Θ 𝑛,
2. 𝑇 𝑛 = Θ 𝑛, log 𝑛
3. 𝑇 𝑛 = Θ 𝑛8
4. 𝑇 𝑛 = Θ(𝑛 log 𝑛)
Quando posso applicare il Teorema?
!
• 𝑇 𝑛 =𝑎+𝑇 "
+𝑓 𝑛
• a>0
• b>1
• f(n) gode di condizioni di regolarità ovvero
a f(n/b) <= c f(n) con 0<c<1
Da cui
log 𝑛 = 𝑂(𝑛 ! ) ogni z>0
Posso usare il teorema master in questo
caso?
• T(n) = 2 T(n/2) + n log n
Posso usare il teorema master in questo
caso?
• T(n) = 2 T(n/2) + n log n
!@-. !
!
= log 𝑛 che è 𝑂(𝑛3 ) e non Omega!
")*+ "
= 𝑛-.%&'! ( log 𝑛 ≥ 𝑛-.%&'! ( = 𝑛/ 𝑐𝑜𝑛 𝜖 = 1 − log 0 3>0
""#$! %
𝑛# 𝑛
= .
𝑛 𝑙𝑜𝑔 𝑛 log 𝑛
$ $
Ricordando che log n < nz ogni z>0 allora ≥ !
%&'( (
( (
Quindi ≥ ≥ 𝑛$,- 𝑐ℎ𝑒, 𝑐𝑜𝑛 𝑢𝑛 0 < 𝑧 < 1, 𝑝𝑜𝑠𝑠𝑜 𝑖𝑛𝑡𝑒𝑟𝑝𝑟𝑒𝑡𝑎𝑟𝑒 𝑐𝑜𝑚𝑒 𝑛.
)*+ ( (!
Quindi f(n)=O(𝑛#,. ) e siamo nel caso 1 del TM. Quindi T(n) = Theta(n2)
𝑛 2𝑛
𝑇 𝑛 =𝑇 +𝑇 +𝒏
3 3
n Pe
rc
=n
ors
op
iù
lu n
go
n/3 2n/3 =n/3+2n/3=n
𝑛 2𝑛
𝑇 𝑛 =𝑇 +𝑇 +𝒏
3 3
n Ogni livello abbiamo un costo pari ad n
Il numero di livelli è log =/$ 𝑛
n/3 Quindi, un upper bound del tempo è
2n/3
O(n log n)
• Es.:
𝑇 𝑛 =𝑇 𝑛 + 𝑂(1)
𝑇 2B = 𝑇 2B/, + 𝑂(1)
Cambiamenti di variabile
𝑇 2B = 𝑇 2B/, + 𝑂(1)
• Ponendo 𝑅 𝑥 = 𝑇 2B , si ottiene
𝑥
𝑅 𝑥 =𝑅 + 𝑂(1)
2
Che può essere risolta con una delle tecniche già viste (per es. Ricade nel caso 2
del Teo. Master) ottenendo
• 𝑅 𝑥 = Θ(log 𝑥)
• 𝑇 𝑛 = Θ(log log 𝑛)
Analisi di Algoritmi Randomizzati
• Un algoritmo si dice randomizzato se il suo comportamento è
determinato non solo dal suo input ma anche da un generatore di
numeri casuali
• Gli algoritmi non randomizzati sono detti deterministici
Che differenza con analisi del caso medio per algoritmi deterministici
(riportate di seguito)?