Algoritmi e Strutture Dati (Elemeti Esercizi sulle ricorreze Proff. Paola Boizzoi / Giacarlo Mauri / Claudio Zadro Ao Accademico 00/003 Apputi scritti da Alberto Leporati e Rosalba Zizza Esercizio 1 Posti T(0 = 1 e T(1 = 1, risolvere la seguete equazioe di ricorreza utilizzado il metodo iterativo per determiare u limite asitotico superiore: T( = T( + 3 Facoltativo: determiare il limite asitotico stretto. Soluzioe. Applicado il metodo iterativo si ottiee: T( = T( + 3 = [ T( + 3] + 3 = T( + ( 3 + 3 = [ T( 6 + 3] + 3 + 3 = 3 T( 6 + 3 + 3 + 3 Proseguedo i questo modo, per k fissato avremo: T( = k T( k + k 1 3 + k 3 +... + 0 3 Se è pari raggiugiamo il valore T(0 per k = /. Se è dispari, raggiugiamo il valore T(1 per k = /. Possiamo quidi trascurare questa differeza, e assumere che sia pari. La ricorreza può allora essere scritta come segue: / T( = / T(0 + 3 = / + 3 (/ 1 i=0 i=1 i i 1 = / + 3 ( (/ 1+1 1 = / 3 1
U limite asitotico superiore (o stretto è T( = O. Per quato riguarda la parte facoltativa evideziamo che / Θ, poiché / Ω. Essedo però: / = Ω/ e / = O/ segue che il limite asitotico stretto è: T( = / 3 = Θ/ Esercizio Posti T(0 = 1 e T(1 = 1, risolvere la seguete equazioe di ricorreza utilizzado il metodo iterativo per determiare u limite asitotico superiore: T( = 3 T( + 5 Facoltativo: determiare il limite asitotico stretto. Soluzioe. Applicado il metodo iterativo si ottiee: T( = 3 T( + 5 = 3 [3 T( + 5] + 5 = 3 T( + (3 5 + 3 = 3 [3 T( 6 + 5] + 3 5 + 3 = 3 3 T( 6 + 3 5 + 3 5 + 3 Proseguedo i questo modo, per k fissato avremo: T( = 3 k T( k + 3 k 1 5 + 3 k 5 +... + 3 0 5 Se è pari raggiugiamo il valore T(0 per k = /. Se è dispari, raggiugiamo il valore T(1 per k = /. Possiamo quidi trascurare questa differeza, e assumere che sia pari. La ricorreza può allora essere scritta
come segue: / T( = 3 / T(0 + 5 = 3 / + 5 (/ 1 i=0 i=1 3 i 3 i 1 = 3 / + 5 3(/ 1+1 1 3 1 = 7 3/ 5 U limite asitotico superiore (o stretto è T( = O(3. Per quato riguarda la parte facoltativa evideziamo che 3 / Θ(3, poiché 3 / Ω(3. Essedo però: 3 / = Ω(3 / e 3 / = O(3 / segue che il limite asitotico stretto è: Esercizio 3 T( = 7 3/ 5 = Θ(3/ Risolvere esattamete la seguete equazioe di ricorreza, utilizzado il metodo iterativo. { se = 1 T( = 8 T + se > 1 Specificare poi u limite asitotico superiore. Suggerimeto: ricordiamo che a log b = log ba. 3
Soluzioe. Applicado il metodo iterativo si ottiee: T( = 8 T + [ = 8 8 T + ] + ( = 8 T + 8 + = 8 [8 T + ] + 8 3 + = 8 3 T + 8 3 + 8 + Proseguedo i questo modo, per k fissato avremo: k 1 T( = 8 k T + k i=0 ( i 8 Il valore T(1 viee raggiuto quado k = 1, ovvero quado k = log. La ricorreza può pertato essere scritta come: Esercizio T( = 8 log T(1 + = log 8 T(1 + i=0 (log 1 i=0 (log 1 i=0 ( i 8 ( i 8 (log 1 = 3 + i = 3 + log 1 3 = 3 + 3 (log 1 = 3 + 3 ( 1 = 3 + 3 3 3 = 73 3 3 = O(3 Determiare la forma esplicita (detta ache forma chiusa della seguete relazioe di ricorreza: { T( 1 1 se 1 T( = 1 se = 0
Soluzioe. Applicado il metodo iterativo si ottiee: T( = T( 1 1 = [ T( 1] 1 = T( 1 1 = [ T( 3 1] 1 1 = 3 T( 3 1 1 1 =... i 1 = i T( i 1 La codizioe base T(0 = 1 viee applicata quado i = 0, ovvero quado i =. Otteiamo quidi: Esercizio 5 k 1 T( = T(0 1 k = 1 1 1 1 = 1 7 ( 1 = 1 7 + 7 = 5 + 7 Risolvere la seguete ricorreza: { T T( = + log se Θ(1 se = 1 5
Soluzioe. Applicado il metodo iterativo si ottiee: T( = T + log = T + log + log = T + log + log = T + log 3 + log + log =... = T + log i +... + log i 1 i 1 = T + log i k + log La codizioe base si applica quado i = 1, ovvero quado i = log. Ricordado che log i = log log i = log i, otteiamo: T( = = = = log 1 log 1 log 1 log 1 log + T k i log k + Θ(1 (log k + Θ(1 log log 1 k + Θ(1 Ricordiamo che m k=1 k è la serie aritmetica, per la quale risulta m k=1 k = m(m + 1. Duque: 1 T( = (log (log (log 1 log = log 1 log + 1 log + Θ(1 = Θ(log + Θ(1 6
Esercizio 6 Dimostrare che T( = O(log, dove { T ( T( = + 1 se 1 se = 1 utilizzado sia il metodo iterativo che il metodo per sostituzioe. Soluzioe. Metodo iterativo. Per il mometo poiamo, per semplicità, = k. Si ottiee: T( = T + 1 = T + 1 + 1 ( = T + 1 + 1 + 1 3 =... = T + i i La codizioe base T(1 = 1 si applica quado i = 1, ovvero quado i = log. Si ottiee allora: T( = 1 + log = O(log Se ivece assumiamo k, poiché = log log, riapplicado lo stesso procedimeto otteiamo: T( = T( log T ( log = 1 + log ( log = 1 + log < + log = O(log Metodo per sostituzioe. Dimostriamo che vale T( = O(log per iduzioe su, co. Base dell iduzioe. Per = vale T( = O(log = O(1. Passo di iduzioe. Suppoiamo che l uguagliaza valga fio a 1, e dimostriamo che vale ache per. Vale: T( = T + 1 7
Per ipotesi iduttiva vale T ( = O(log ; per defiizioe, questo sigifica che esistoo c > 0 (reale e 0 N tali che, per ogi > 0, vale: T( = T + 1 c log + 1 Si tratta allora di dimostrare che esiste c > 0 tale che: c log + 1 c log Poiché vale: ( c log + 1 c log c log log 1 c (log 1 ( 1 c log 1 c ( 1 1 basta scegliere c 1. c 1 Similmete, se k, poiché vale = log log, riapplicado il medesimo procedimeto otteiamo: T( = T ( log T ( log c log log c log log +1 = c (log + 1 e si può facilmete dimostrare che esiste c > 0 tale che T( = O(log. Esercizio 7 Risolvere la seguete ricorreza: { T ( T( = + se 1 se = 1 8
Soluzioe. Applicado il metodo iterativo, otteiamo: ( T( = T + [ ( = T + + ( ] = T + + =... ( i 1 = i T + k i k La codizioe base si applica quado: i = 1 ovvero quado: cioè quado: ovvero quado: Allora otteiamo: Esercizio 8 T( = log + log 1 1 < i i < i+1 i = log k k log 1 ( log + k = ( log + log 1 1 ( log + ( log 1 = log + ( 1 = + = O( Risolvere la seguete equazioe di ricorreza co il metodo iterativo: { T( 1 + log T( = se Θ(1 se = 1 9
Soluzioe. T( = T( 1 + log = = T( + log ( 1 + log = =... i 1 = T( i + log ( k La codizioe base si applica quado i = 1, ovvero quado i = 1. Allora possiamo scrivere: T( = log ( k + Θ(1 Resta quidi da valutare la sommatoria. Osserviamo azitutto che, essedo il logaritmo ua fuzioe crescete, posso maggiorare la sommatoria come segue: log ( k ( 1 log e quidi T( = O( log. D altra parte, per determiare u limite iferiore al valore della sommatoria possiamo spezzarla i due parti e trascurare la secoda parte, come segue: log ( k = e quidi T( = Ω( log. log ( k + log ( k k= +1 ( log ( k log ( ( + = log 10
Esercizio 9 Risolvere la seguete equazioe di ricorreza co il metodo della sostituzioe: { T ( T( = + T ( + Θ( se 1 3 Θ(1 se = 0 Soluzioe. Dalla defiizioe di T( vediamo subito che vale sicuramete T( = Ω(. Dimostriamo che vale ache T( = O(, ovvero che esistoo c > 0 (reale e 0 N tali che, per ogi > 0, vale T( c. Azitutto osserviamo che il termie Θ( idica ua fuzioe g( per la quale esistoo ua costate reale d > 0 e u itero 1 N tali che per ogi > 1 vale g( d. Seza perdere i geeralità possiamo supporre che sia 1 < 0 ; ifatti, el caso i cui ciò o valga saremmo acora i grado di dimostrare che T( = O( poiché sarebbe T( c per ogi > 1, co c ed 1 fissati. La dimostrazioe procede per iduzioe su. Base dell iduzioe. Se = 0 l asserto è vero, poiché ua quatità che è Θ(1 è limitata superiormete da ua costate, e quidi è sicuramete O(. Passo di iduzioe. Suppoiamo che l asserto valga per ogi i <, e dimostriamo che vale ache per. Poiché 1, possiamo scrivere: ( ( T( = T + T + Θ( 3 Per ipotesi iduttiva, per ogi > 0 valgoo: ( T ( c e T ( c 3 ( 3 D altra parte, abbiamo visto che per ogi > 0 (> 1 il termie Θ( è maggiorabile co d. Quidi: ( ( T( c + c 3 c + c 9 + d + d 11
A questo puto impoiamo T( c e ricaviamo u vicolo sui possibili valori di c. Vale: c + c 9 + d c se e solo se se e solo se c 1 + c 9 + d c c 36 11 d Possiamo quidi cocludere che se c 36 11 d vale T( c per ogi > 0, cioè che T( = O(. Esercizio 10 Risolvere la seguete equazioe di ricorreza co il metodo della sostituzioe: { T ( T( = + T ( + Θ( se Θ(1 se = 1 Soluzioe. Dalla defiizioe di T( vediamo subito che vale sicuramete T( = Ω(. Proviamo ora a dimostrare che vale ache T( = O(, ovvero che esistoo c > 0 (reale e 0 N tali che, per ogi > 0, vale T( c. Azitutto osserviamo che il termie Θ( idica ua fuzioe g( per la quale esistoo ua costate reale d > 0 e u itero 1 N tali che per ogi > 1 vale g( d. Seza perdere i geeralità possiamo supporre che sia 1 < 0 ; ifatti, el caso i cui ciò o valga, siamo acora i grado di dimostrare che T( = O( poiché T( c per ogi > 1, co c ed 1 fissati. La dimostrazioe procede per iduzioe su. Base dell iduzioe. Se = 1 l asserto è vero, poiché ua quatità che è Θ(1 è limitata superiormete da ua costate, e quidi è sicuramete O(. Passo di iduzioe. Suppoiamo che l asserto valga per ogi i <, e dimostriamo che vale ache per. Poiché, possiamo scrivere: ( ( T( = T + T + Θ( 1
Per ipotesi iduttiva, per ogi > 0 valgoo: ( ( T c e T c D altra parte, abbiamo visto che per ogi > 0 (> 1 il termie Θ( è maggiorabile co d. Quidi: T( c + c + d c + c + d = c + d A questo puto, se impoiamo T( c otteiamo: c + d c se e solo se d 0 che è chiaramete impossibile. Duque risulta che T( O(. Proviamo allora a dimostrare che T( = O( log, ovvero che esistoo c > 0 (reale e 0 N tali che per ogi > 0 vale T( c. Come prima, siao d > 0 e 1 N ua costate reale e u itero tali che per ogi > 1 vale Θ( d. Ioltre, assumiamo acora che sia 1 < 0. La dimostrazioe procede per iduzioe su. Base dell iduzioe. Se = 1 l asserto è vero, poiché ua quatità che è Θ(1 è limitata superiormete da ua costate, e quidi è sicuramete O( log. Passo di iduzioe. Suppoiamo che l asserto valga per ogi i <, e dimostriamo che vale ache per. Poiché, possiamo scrivere: ( ( T( = T + T + Θ( Per ipotesi iduttiva, per ogi > 0 valgoo: ( ( T c log e T c log D altra parte, abbiamo visto che per ogi > 0 (> 1 vale Θ( d. Quidi: T( c log + c log + d c log + c log + d 13
Ora impoiamo T( c log e ricaviamo u vicolo sui possibili valori di c. Vale: c log + c log + d c log se e solo se: c 1 log + c 1 log + d c log se e solo se: c log + c log + d c log se e solo se: c (log 1 + c (log + d c log se e solo se: se e solo se: c c + d 0 c 3 d Possiamo quidi cocludere che se c d vale T( c log 3 per ogi > 0, cioè che T( = O( log. Purtroppo ciò o basta per cocludere che T( = Θ( log, dato che all iizio dell esercizio abbiamo dimostrato solamete che T( = Ω(. Mostriamo allora che T( = Ω( log. Poiché ell espressioe di T( compare u termie i, risulterà più comodo dimostrare che T( = Ω( log. Osserviamo che ciò equivale a dimostrare che T( = Ω( log, poiché: Ω( log = Ω ( log log = Ω( log ed essedo la otazioe Ω ivariate rispetto alla moltiplicazioe per costati possiamo cocludere che Ω( log = Ω( log. Per dimostrare che T( = Ω( log dobbiamo mostrare che esistoo ua costate reale c > 0 e u itero 0 tali che: > 0 T( c log Poiamo 0 = 1 e procediamo per iduzioe su. Base dell iduzioe. Se = 1 l asserto è vero, poiché T(1 = Θ(1 c 0 = 0. (T(1 o può essere egativo, dato che è il tempo impiegato da u certo algoritmo su u istaza di dimesioe 1. 1
Passo di iduzioe. Suppoiamo che la proposizioe sia vera per ogi i <, e dimostriamo che vale ache per. Cosideriamo due casi, a secoda che sia oppure o ua poteza di. Se = t (cioè è ua poteza di, allora la ricorreza diveta: T( = T + T + Θ( Assumiamo che d > 0 sia ua costate tale che, per ogi > 0, il termie Θ( è maggiorabile da d. Per ipotesi iduttiva, per ogi > 0 valgoo: T c log e T c log Quidi, T( c log + c log Impoedo T( c log otteiamo: se e solo se se e solo se se e solo se + d c log + c log + d c log c (log log + c (log 1 + d c log c log c + d 0 d c (log + 1 = c (log + log = c log 8 = 3 c log = 3 c 1 log = 3 c Pertato, se c 3 d vale T( c log. Se ivece t (cioè se o è ua poteza di, osserviamo che: = log log 15
Sfruttado il fatto che x > x 1, risulta: T( = T ( log T ( log (abbiamo ua poteza di log log log log 1 (log 1 = (log 1 Per grade possiamo trascurare il termie 1, e approssimare T( come: T( log che è chiaramete Θ( log, e quidi i particolare Ω( log. 16