Sei sulla pagina 1di 6

Dati e Algoritmi I (Pietracaprina)

Esercizi sugli Strumenti di Analisi

Dati e Algoritmi I (Pietracaprina): Esercizi

Problema 1 Sia T una stringa arbitraria di lunghezza n 1 su un alfabeto . E sempre possibile scrivere T come concatenazione di n/m copie di una stringa P (ovvero T = P P P n/m volte) dove P ha lunghezza m n ed n/m ` intero. La periodicit` di T ` il minimo e a e valore m per cui tale scrittura di T ` possibile. Ad esempio, T = abcd ha periodicit` 4 e a mentre T = abababab ha periodicit` 2. Denire come problema computazionale il problema a di trovare la periodicit` di una stringa T specicando linsieme delle istanze I, linsieme delle a soluzioni S e il sottoinsieme di I S che rappresenta il problema. Soluzione. Si usi + per denotare le stringhe sullalfabeto di lunghezza maggiore o uguale a 1, e Z + per denotare linsieme degli interi positivi. Il problema dato pu` essere formalmente o specicato cos` : I = + ; S = Z +; I S = {(T, m) : m ` il min intero t.c. T = P P P, n/m volte, con P = T [0 . . . m 1]} e 2 Problema 2 Sia A una matrice n n di interi, con n 2. a. Scrivere un algoritmo iterativo che calcola la trasposta di A. Lalgoritmo deve essere in place (cio` usare spazio costante in aggiunta a quello occupato dalla matrice di input) e e deve contenere un solo ciclo. b. Provare la correttezza dellalgoritmo sviluppato al punto precedente, scrivendo un opportuno invariante per il ciclo su cui esso si basa. Soluzione. a. Supponiamo di numerare righe e colonne da 1 a n. Lalgoritmo ` il seguente: e

Algoritmo Transpose(A) input Matrice A n n output Matrice A trasposta i 1; j 2; while (i n) do { temp A[i, j]; A[i, j] A[j, i]; A[j, i] temp; if (j = n) then { i i + 1; j i + 1 } else j j + 1 } return A b. Si consideri unarbitraria iterazione del ciclo while, e si indichi con A la matrice A alla ne di tale iterazione e con A la matrice nel suo stato originale. Sia Q la propriet` a che stabilisce che la matrice alla ne del while ` la trasposta della matrice di input. e

Dati e Algoritmi I (Pietracaprina): Esercizi

Per provare la validit` di Q, ovvero la correttezza dellalgoritmo, deniamo il seguente a invariante Ii,j che deve valere alla ne di ogni iterazione, dove con i e j denotiamo i valori delle due variabili alla ne del ciclo. (In particolare, I1,2 deve valere allinizio del ciclo). Ii,j : i<j Si ha A [h, k] = A[k, h] e A [k, h] = A[h, k] per ogni coppia h, k tale che h < i oppure (h = i) (k < j). Negli altri casi, A [h, k] = A[h, k]. E facile vedere che I1,2 vale allinizio del ciclo. Supponiamo che Ii,j valga alla ne di una generica iterazione. Per esercizio si lascia al lettore la dimostrazione che linvariante vale anche alla ne delliterazione successiva (si noti che tale invariante sar` Ii,j+1 , se a j < n, altrimenti sar` Ii+1,i+1 . Alla ne dellultima iterazione i = n + 1, e linvariante a implica che A [h, k] = A[k, h], per ogni 1 h, k n, e quindi la propriet` Q ` vericata. a e 2 Problema 3 Si consideri la seguente relazione di ricorrenza denita per n = 2d , con d 0. T (n) = 0 per n = 1 2T (n/2) + n log2 n per n > 1

a. Risolvere in modo esatto la relazione di ricorrenza usando il metodo iterativo. b. Vericare che la soluzione trovata ` in accordo con la stima asintotica data dal Master e Theorem. Soluzione. a. Sia n = d con d > 0 abbastanza grande. Applicando ripetutamente la denizione di T (n) otteniamo: T (n) = 2T (n/2) + n log2 n = 4T (n/4) + n(log2 n 1) + n log2 n = 8T (n/8) + n(log2 n 2) + n(log2 n 1) + n log2 n = ...
i1

= 2i T (n/2i ) +
j=0

n(log2 n j), con i d

Ponendo i = d = log2 n otteniamo


d1 d

T (n) = 2d T (1) +
j=0

n(log2 n j) = n
j=1

j = n log2 n(log2 n + 1)/2 n log2 n

Dati e Algoritmi I (Pietracaprina): Esercizi


b. Siamo nel secondo caso del master theorem con a = b = 2 e k = 1. Si ha quindi T (n) nlogb a log2 n = n log2 n , che ` in accordo con la soluzione trovata al punto precedente. e

2 Problema 4 Si consideri la seguente relazione di ricorrenza: T (n) = n per n = 0, 1 2T ( n/4 ) + 3n per n > 1

a. Applicando il Master Theorem dire quali delle seguenti relazioni ` vera per unopportuna e 2 ; (ii) T (n) cn; (iii) T (n) = cn log n. costante c e per ogni n 0: (i) T (n) cn 2 b. Ponendo c = 6, vericare per induzione la relazione trovata al punto precedente. Soluzione. a. Siamo nel terzo caso del Master Theorem poich` a = 2, b = 4 e f (n) = 3n = e logb a+ , con n costante. Inoltre af (n/b) = (1/2)f (n). Quindi T (n) (n) e lunica relazione che pu` essere vera per ogni n 0 ` la (ii). o e b. Dimostriamo per induzione che T (n) 6n per ogni n 0. Per linduzione scegliamo n0 = 0 e h = 1. Base: Per n = 0, 1 la relazione ` banalmente vericata. e Passo induttivo: Sia n > 1 = n0 + h e assumiamo T (m) 6m per ogni 0 m < n. Si ha che: T (n) = 2T ( n/4 ) + 3n 2(6 n/4 ) + 3n (per hp induttiva) 2(6n/4) + 3n = 6n. 2 Problema 5 Si consideri la seguente relazione di ricorrenza denita per n = 2d , con d 0. T (n) = 1 per n = 1 4T (n/2) + 1 per n > 1

a. Applicare il Master Theorem per avere una stima asintotica di T (n). b. Risolvere in modo esatto la relazione di ricorrenza usando il metodo iterativo. c. Vericare per induzione la soluzione trovata al punto precedente. Soluzione.

Dati e Algoritmi I (Pietracaprina): Esercizi

a. Siamo nel primo caso del Master Theorem poich` a = 4, b = 2 e f (n) = 1 = e logb a , con costante. Quindi T (n) nlog2 4 , ovvero T (n) n2 . n b. Sia n = 2d con d abbastanza grande. Dalla denizione di T (n) abbiamo che: T (n) = 4T (n/2) + 1 = 16T (n/4) + 4 + 1 = 64T (n/8) + 16 + 4 + 1 =
i1

= 4i T (n/2i ) +
k=0

4k .
d k k=0 4

Ponendo i = d = log2 n e poich` T (1) = 1, si ha che T (n) = e (4n2 1)/3, che ` in accordo con il Master Theorem. e

= (4d+1 1)/3 =

c. Dimostriamo che T (n) = (4n2 1)/3 per ogni n = 2d con d 0. Facciamo linduzione su d partendo con d0 = 0 e h = 0 Base: Per n = 2d0 = 1 la relazione ` banalmente vericata. e Passo induttivo: Sia d > 0 = d0 + h e assumiamo T (m) = (4m2 1)/3 per ogni m = 2d , con 0 d < d. Si ha che: T (n) = 4T (n/2) + 1 4(n/2)2 1 = 4 +1 3 4n2 1 = . 3

(per hp induttiva)

2 Problema 6 Usando il metodo iterativo, trovare la soluzione esatta della seguente relazione di ricorrenza denita per n pari, e la si esprima con la formula pi` sintetica possibile. u T (n) = 1 per n = 0 T (n 2) + log2 n per n = 2d e d > 0 Applicando ripetutamente la

Soluzione. Sia n = 2d con d > 0 abbastanza grande. denizione di T (n) otteniamo: T (n) = T (n 2) + log2 n = T (n 4) + log2 (n 2) + log2 n

= T (n 6) + log2 (n 4) + log2 (n 2) + log2 n = ...


i1

= T (n 2i) +
j=0

log2 (n 2j), con i d

Dati e Algoritmi I (Pietracaprina): Esercizi


Ponendo i = d otteniamo
d1 d d

T (n) = T (0) +
j=0

log2 (n 2j) = 1 +
j=1

log2 (2j) = 1 + d log2 2 +


j=1

log2 j = 1 + d + log2 (d!) 2

Problema 7 Si consideri la seguente relazione di ricorrenza.


1

G(n) =

per n = 0 2 per n = 1 G(n 1) + 2G(n 2) per n > 1

a. Trovare i valori di G(n), per n = 2, 3, 4, 5. b. Dal punto precedente, intuire la soluzione esatta di G(n) e provarla per induzione. c. Dato un intero n, ` possibile calcolare G(n) in tempo lineare nella taglia dellinput? e Soluzione. a. Applicando la denizione otteniamo G(2) = G(1) + 2G(0) = 4 G(3) = G(2) + 2G(1) = 8 G(4) = G(3) + 2G(2) = 16 G(5) = G(4) + 2G(3) = 32 b. Lintuizione suggerisce G(n) = 2n . Dimostriamo per induzione che G(n) = 2n per ogni n 0. Per linduzione scegliamo n0 = 0 e h = 1. Base: Per n = 0, 1 la relazione ` banalmente vericata dalla denizione di G. e Passo induttivo: Sia n > 1 = n0 + h e assumiamo G(m) = 2m per ogni 0 m < n. Si ha che: G(n) = G(n 1) + 2G(n 2) = 2 = 2
n1 n

(per denizione)

+22

n2

(per hp. induttiva)

c. E ragionevole prendere come taglia di input log n, ovvero il numero di bit necessari per la rappresentazione dellintero n. Poich` loutput 2n richiede n bit per la sua rappree sentazione, il tempo di esecuzione non pu` essere lineare nella taglia dellinput. o 2