View
16
Download
0
Category
Preview:
Citation preview
Divide et ImperaRicorrenze
Corso di PerfezionamentoDivide et Impera, Algoritmi Ricorsivi e Ricorrenze
Maria Rita Di Berardini1
1Dipartimento di Matematica e InformaticaUniversita di Camerino
17 febbraio 2009
Maria Rita Di Berardini Corso di Perfezionamento
Divide et ImperaRicorrenze
Outline
1 Divide et Impera
2 RicorrenzeMetodo iterativoMetodo degli alberi di ricorsioneMetodo della sostituzioneMetodo dell’esperto
Maria Rita Di Berardini Corso di Perfezionamento
Divide et ImperaRicorrenze
Tecniche di Programmazione
Tecniche di progettazione di algoritmi:
1 Divide et Impera2 Programmazione Dinamica (PD for short)3 Algoritmi golosi
Le ultime due tecniche sono piu sofisticate rispetto al Divide etImpera, ma consento di risolve in maniera efficiente moltiproblemi computazionali
Vedremo come queste tecniche di programmazione vengonousate per risolvere problemi di ottimizzazione
Maria Rita Di Berardini Corso di Perfezionamento
Divide et ImperaRicorrenze
Approccio Divide et Impera
L’approccio seguito da questa tecnica di progettazione consistenel suddividere il problema in input in un certo numero disottoproblemi di dimensione inferiore
Una volta risolti ricorsivamente i sottoproblemi cosı generati, sicombinano le loro soluzioni per creare la soluzione al problemadato
Distinguiamo tre fasi principali: Divide, Impera e Combina
Maria Rita Di Berardini Corso di Perfezionamento
Divide et ImperaRicorrenze
Determinazione del massimo
Definizione del problema: determinazione del massimo in unasequenza di n elementi
Approccio Divide et Impera:
Divide: gli n elementi della sequenza vengono divisi in duesottosequenze di ≈ n/2 elementi ciascuna
Impera: si determina il massimo m1 della prima sequenza edil massimo m2 della seconda
Combina: ottiene il massimo della sequenza in input comemaxm1,m2
Maria Rita Di Berardini Corso di Perfezionamento
Divide et ImperaRicorrenze
Algoritmo per la determinazione del massimo
Max(A, i , j)if i < j
then m← b(i + j)/2creturn maxMax(A, i , m), Max(A, m + 1, j)
Complessita di Max(A, 1, n) e descritta dalla ricorrenza
T (n) =
2T (n/2) + 1 se n > 1
1 se n > 1
Maria Rita Di Berardini Corso di Perfezionamento
Divide et ImperaRicorrenze
Algoritmo di ordinamento MergeSort
Le tre fasi possono essere cosı descritte
Divide: gli n elementi della sequenza da ordinare vengono indue sottosequenze di ≈ n/2 elementi ciascuna
Impera: ordina, usando ricorsivamente il merge sort, le duesottosequenze
Combina: fonde le due sottosequenze per produrre comerisposta la sequenza ordinata
Maria Rita Di Berardini Corso di Perfezionamento
Divide et ImperaRicorrenze
Algoritmo di ordinamento MergeSort
Il processo di suddivisione si ferma quando la sequenza da ordinareha lunghezza 1
Il passo combina fonde le due sequenze utilizzando una proceduraausiliaria di fusione merge(A, p, q, r), dove: A e un array e p, q, rsono indici di elementi dell’array tali che p < q < r
merge(A, p, q, r) assume che A[p, ..., q] e A[q + 1, ..., r ] sianoordinati e genera A[p, ..., r ] ordinato
Maria Rita Di Berardini Corso di Perfezionamento
Divide et ImperaRicorrenze
Algoritmo di ordinamento MergeSort
MergeSort(A, left, right)if left < right
then mid = b(left + right)/2cMergeSort(A, left, mid)MergeSort(A, mid + 1, right)Merge(A, left, mid , right)
Maria Rita Di Berardini Corso di Perfezionamento
Divide et ImperaRicorrenze
A = 8, 5, 4, 6, 1, 3, 7
8 5 4 6 1 3 7
fusione
8 5 4 6 1 3 7
8 5 4 6 1 3 7
5 4 6 1 3 4
4 5
4 5 8
1 6 3 7
1 3 6 7
1 3 4 5 6 7 8
divisione
Maria Rita Di Berardini Corso di Perfezionamento
Divide et ImperaRicorrenze
Fusione di due sottosequenze ordinate
Merge(A, left,mid , right)m1 ← mid − left + 1 . dim di A[left, ...,mid ]m2 ← right −mid . dim di A[mid + 1, ..., right]B[1, . . . ,m1]← A[left, ...,mid ]C [1, . . . ,m2]← A[mid + 1, ..., right]i , j ← 1, k ← leftwhile i ≤ m1 and j ≤ m2
do if B[i ] ≤ C [j ]then A[k]← B[i ]
i ← i + 1else A[k]← C [j ]
j ← j + 1k ← k + 1
if i ≤ m1
then A[k, . . . , right]← B[i , ...,m1]else A[k, . . . , right]← C [j , ...,m2]
Maria Rita Di Berardini Corso di Perfezionamento
Divide et ImperaRicorrenze
Analisi della complessita del MergeSort
Il costo dell’algoritmo mergeSort e descritto dalla ricorrenza:
T (n) =
2T (n/2) + f (n) se n > 1
1 se n = 1
dove con f (n) = n e il costo della procedura di fusione
Maria Rita Di Berardini Corso di Perfezionamento
Divide et ImperaRicorrenze
Metodo iterativoMetodo degli alberi di ricorsioneMetodo della sostituzioneMetodo dell’esperto
Cosa e una relazione di ricorrenza
Una relazione di ricorrenza – o piu semplicemente ricorrenza – euna equazione che descrive una funzione in termini del suo valorecon input piu piccoli
Esistono tre grandi metodi per risolvere le ricorrenze, ossia perottenere dei limiti asintotici Θ o O
Il metodo iterativo, o metodo della albero di ricorsione
Il metodo della sostituzione
Il metodo dell’esperto che consente di risolvere ricorrenze dellaforma T (n) = aT (n/b) + f (n) dove a ≥ 1, b > 0 ed f (n) euna funzione data
Maria Rita Di Berardini Corso di Perfezionamento
Divide et ImperaRicorrenze
Metodo iterativoMetodo degli alberi di ricorsioneMetodo della sostituzioneMetodo dell’esperto
Metodo iterativo
“Srotoliamo” la ricorsione fino ad ottenere una sommatoriadipendente da n — Esempio:
T (n) =
1 + T (n/2) se n > 1
1 se n = 1
T (n) = 1 + T (n/2)= 1 + 1 + T (n/4)= 1 + 1 + 1 + T (n/8)= 1 + 1 + 1 + 1 + T (n/16)= · · ·= k + T (n/2k)
Maria Rita Di Berardini Corso di Perfezionamento
Divide et ImperaRicorrenze
Metodo iterativoMetodo degli alberi di ricorsioneMetodo della sostituzioneMetodo dell’esperto
Metodo iterativo
T (n) = 1 + T (n/2)= 1 + 1 + T (n/4)= 1 + 1 + 1 + T (n/8)= 1 + 1 + 1 + 1 + T (n/16)= · · ·= k + T (n/2k)
Continuiamo a srotolare la ricorsione fin quando n/2k = 1, i.e.quando k = log2 n. Allora:
T (n) = log2 n + 1 = O(log2 n)
Maria Rita Di Berardini Corso di Perfezionamento
Divide et ImperaRicorrenze
Metodo iterativoMetodo degli alberi di ricorsioneMetodo della sostituzioneMetodo dell’esperto
Metodo iterativo: un altro esempio (meno semplice)
T (n) =
n + T (n/2) se n > 1
1 se n = 1
T (n) = n + T (n/2)= n + n/2 + T (n/4)= n + n/2 + n/4 + T (n/8)= n + n/2 + n/4 + n/8 + T (n/16)
= n/20 + n/21 + n/22 + n/23 + T (n/24)= · · ·
=k−1∑i=0
n/2i + T (n/2k)
Maria Rita Di Berardini Corso di Perfezionamento
Divide et ImperaRicorrenze
Metodo iterativoMetodo degli alberi di ricorsioneMetodo della sostituzioneMetodo dell’esperto
Metodo iterativo: un altro esempio (meno semplice)
T (n) =
n + T (n/2) se n > 1
1 se n = 1
T (n) = n + T (n/2)= n + n/2 + T (n/4)= n + n/2 + n/4 + T (n/8)= n + n/2 + n/4 + n/8 + T (n/16)
= n/20 + n/21 + n/22 + n/23 + T (n/24)= · · ·
=k−1∑i=0
n/2i + T (n/2k)
Maria Rita Di Berardini Corso di Perfezionamento
Divide et ImperaRicorrenze
Metodo iterativoMetodo degli alberi di ricorsioneMetodo della sostituzioneMetodo dell’esperto
Metodo iterativo: un altro esempio (meno semplice)
T (n) =k−1∑i=0
n/2i + T (n/2k) = nk−1∑i=0
(1/2)i + T (n/2k)
Di nuovo, ci fermiamo quando k = log n — quindi:
T (n) = nlog n−1∑
i=0
(1/2)i + 1
= n 1−(1/2)log n
1−(1/2)+ 1
= 2n(1− 12log n ) + 1
= 2n(1− 1n) + 1 = 2n − 1 = Θ(n)
Maria Rita Di Berardini Corso di Perfezionamento
Divide et ImperaRicorrenze
Metodo iterativoMetodo degli alberi di ricorsioneMetodo della sostituzioneMetodo dell’esperto
Metodo degli alberi di ricorsione
E una variante del metodo iterativo in cui usiamo degli alberiper rappresentare i costi delle varie chiamate ricorsive
Esempio
T (n) =
n + 2T (n/2) se n > 1
1 se n = 1
Maria Rita Di Berardini Corso di Perfezionamento
Divide et ImperaRicorrenze
Metodo iterativoMetodo degli alberi di ricorsioneMetodo della sostituzioneMetodo dell’esperto
Alberi di ricorsione: un esempio
n
T(n/2) T(n/2)
n
n/2 n/2
T(n/4) T(n/4) T(n/4) T(n/4)
T(n)
(b)(a)
(c)
Maria Rita Di Berardini Corso di Perfezionamento
Divide et ImperaRicorrenze
Metodo iterativoMetodo degli alberi di ricorsioneMetodo della sostituzioneMetodo dell’esperto
Alberi di ricorsione
n
n/2 n/2
n/4 n/4 n/4 n/4
(d)
T(n/8) T(n/8) T(n/8) T(n/8) T(n/8) T(n/8) T(n/8) T(n/8)
Maria Rita Di Berardini Corso di Perfezionamento
Divide et ImperaRicorrenze
Metodo iterativoMetodo degli alberi di ricorsioneMetodo della sostituzioneMetodo dell’esperto
Alberi di ricorsione
n
n/4
n/2
n/4
n/8 n/8 n/8 n/8
n/4
n/2
n/4
n/8 n/8 n/8 n/8
0
1
2
3
T(1) T(1) T(1) T(1) T(1) T(1) T(1) T(1) T(1) T(1) T(1) T(1)T(1)T(1) T(1) T(1)k
Maria Rita Di Berardini Corso di Perfezionamento
Divide et ImperaRicorrenze
Metodo iterativoMetodo degli alberi di ricorsioneMetodo della sostituzioneMetodo dell’esperto
Alberi di ricorsione
Sia i un generico livello dell’albero di ricorsione — i = 0, . . . , k
Il livello i-esimo ha 2i nodi(al livello 0 abbiamo 1 = 20 nodi, ed ogni livello il doppio deinodi del precedente)
Ciascun nodo al livello i ha un costo pari a n/2i
(il nodo al livello 0 ha un costo pari a n = n/1 = n/20, e ognivolta che scendiamo di livello il costo dei nodi si dimezza)
il costo complessivo dei nodi al livello i e
2i × n/2i = n
Maria Rita Di Berardini Corso di Perfezionamento
Divide et ImperaRicorrenze
Metodo iterativoMetodo degli alberi di ricorsioneMetodo della sostituzioneMetodo dell’esperto
Alberi di ricorsione
Quale e il costo complessivo della chiamata T (n)?
T (n) =k∑
i=0
costo livello(i) =k∑
i=0
n = n · (k + 1)
Ci rimane da determinare il valore di k
L’ultimo livello corrisponde ad una serie di chiamate di T (1) (cifermiamo quando la dimensione del problema e 1)
k e tale che n/2k = 1, e quindi k = log n
Ricapitolando
T (n) = n · (k + 1) = n(log n + 1) = Θ(n log n)
Maria Rita Di Berardini Corso di Perfezionamento
Divide et ImperaRicorrenze
Metodo iterativoMetodo degli alberi di ricorsioneMetodo della sostituzioneMetodo dell’esperto
Metodo della sostituzione
Metodo della sostituzione: “indovinare” una possibile soluzioneed usare l’induzione matematica per dimostrare che la soluzione ecorretta
Consideriamo di nuovo la ricorrenza
T (n) =
n + T (n/2) se n > 1
1 se n = 1
e dimostriamo, applicando il metodo della sostituzione, che
T (n) = O(n)
Maria Rita Di Berardini Corso di Perfezionamento
Divide et ImperaRicorrenze
Metodo iterativoMetodo degli alberi di ricorsioneMetodo della sostituzioneMetodo dell’esperto
Metodo della sostituzione
Dobbiamo dimostrare che che esistono delle costanti positive c edn0 tali che 0 ≤ T (n) ≤ cn per ogni n ≥ n0
Caso base n = 1: T (1) = 1 ≤ c1 = c per ogni costante c ≥ 1(positiva)
Passo induttivo: assumiamo T (n′) ≤ cn′ per ogni n′ < n. Allora
T (n) = n + T (n/2)≤ n + cn/2= n(1 + c/2) se scegliamo c ≥ 21
≤ cn
1Infatti se c ≥ 2, allora 1 ≤ c/2 e 1 + c/2 ≤ c/2 + c/2 = c
Maria Rita Di Berardini Corso di Perfezionamento
Divide et ImperaRicorrenze
Metodo iterativoMetodo degli alberi di ricorsioneMetodo della sostituzioneMetodo dell’esperto
Teorema dell’esperto – Teorema Master
Permette di analizzare algoritmi basati sulla tecnica del Divide etImpera:
dividi il problema (di dimensione n) in a sotto-problemi didimensione n/b
risolvi i sotto-problemi ricorsivamente
ricombina le soluzioni
Sia f (n) il tempo per dividere e ricombinare istanze di dimensionen. La relazione di ricorrenza e data da:
T (n) =
aT (n/b) + f (n) se n > 1
1 se n = 1
Maria Rita Di Berardini Corso di Perfezionamento
Divide et ImperaRicorrenze
Metodo iterativoMetodo degli alberi di ricorsioneMetodo della sostituzioneMetodo dell’esperto
Teorema dell’esperto – Teorema Master
Si consideri la ricorrenza
T (n) =
aT (n/b) + f (n) se n > 1
1 se n = 1
Distinguiamo tre casi:
1 f (n) = O(nlogb a−ε) per qualche costante ε > 0allora: T (n) = Θ(nlogb a)
2 f (n) = Θ(nlogb a),allora: T (n) = Θ(nlogb a log2 n)
3 f (n) = Ω(nlogb a+ε) per qualche costante ε > 0 eaf (n/b) ≤ cf (n), per qualche costante c < 1allora: T (n) = Θ(f (n))
Maria Rita Di Berardini Corso di Perfezionamento
Divide et ImperaRicorrenze
Metodo iterativoMetodo degli alberi di ricorsioneMetodo della sostituzioneMetodo dell’esperto
Applicazioni del teorema dell’esperto
T (n) = n + 2T (n/2)
a = b = 2, logb a = 1f (n) = Θ(n) = Θ(nlogb a)
(caso 2 del teorema master)
⇓T (n) = Θ(nlogb a log2 n) = Θ(n log2 n)
Maria Rita Di Berardini Corso di Perfezionamento
Divide et ImperaRicorrenze
Metodo iterativoMetodo degli alberi di ricorsioneMetodo della sostituzioneMetodo dell’esperto
Applicazioni del teorema dell’esperto
T (n) = c + 9T (n/3)
a = 9, b = 3, logb a = log3 9 = 2f (n) = c = O(n) = O(nlogb a−ε) = O(n2−ε) con ε = 1
(caso 1 del teorema master)
⇓T (n) = Θ(nlogb a) = Θ(n2)
Maria Rita Di Berardini Corso di Perfezionamento
Divide et ImperaRicorrenze
Metodo iterativoMetodo degli alberi di ricorsioneMetodo della sostituzioneMetodo dell’esperto
Applicazioni del teorema dell’esperto
T (n) = n + 3T (n/9)
a = 3, b = 9, logb a = log9 3 = 1/2 (3 =√
9 = 91/2)f (n) = n = Ω(n) = Ω(nlog9 3+ε) con ε = 1/2
inoltre,af (n/b) = 3f (n/9) = 3(n/9) = 1/3n ≤ cf (n), per c = 1/3
(caso 3 del teorema master)
⇓T (n) = Θ(f (n)) = Θ(n)
Maria Rita Di Berardini Corso di Perfezionamento
Recommended