Download as pdf
Download as pdf
You are on page 1of 16
Prof. L. Margara 13 Giugno 2007 Algoritmi e Strutture Dati Esercizio 1.[11 punti] Un grafo & 2-colorabile se @ possibile assegnare ad ogsi nodo il colore rosso 9 nero in modo tale che tutte le copie di nodi adiacenti non abbiano lo atesso colore. Trovare un algoritmo efficiente per dire se un grafo @ 2-colorabile oppure no. Disoutere il costo computazionale dell’algoritmo fornito. (suggerimento: usare una BFS modificata) Esercizio 2.[11 punti] Dati ae numeri interi calcolare a usando un algoritmo (FUNZIONE) ricorsivo divide et impere che abbia un costo computazionale O(log(n)). Argomentare Ja correttezza dell’algoritmo proposto ¢ calcolare il suo costo computazionale nel caso pessimo, ottimo e medio Esercizio 3.[11 punti] Sia dato un array A dim numeri interi, Progettare un algoritmo divide et impera in grado di calcolare il massimo ¢ il minimo di A in tempo lineare. Esercitazioni di Algoritmi e Strutture Dati* Marco Vassura. 11 marzo 2004 1 Ordini di Grandezza’ Gli esercizi sugli ordini di grandezea mirano a yerificare la capacita dello studente di usare le notazioni O, 2, ©, 0, w per deserivere il comportamento asintotico® di funzioni. Riportiamo un sermplice esempio rimandando ai testi consigliati* per una trattazione completa ¢ dettagliata: Qn? —n+4 2 O(n?) poichd esistono tre constanti ¢= 3, ¢ = 1 ¢ ng = 2 tali che on? > on? —n 44> en? per ogni n maggiore di no. Per confrontare il comportamento asintotico di due funzioni f(a) ¢ g(2) ne confrontiamo il limite per « -+ +00. In particolare se costante allora f(x} = O(g{z)) fa) lim 4S sabe gle +00 allora f(x) = w(9(z)) @ alloraf(«) = o(g(2)) “Gorse del Prof. Margara, eserciei presi dai compiti di ‘TAMC del 6/2001 Aesione del 3/4/2002 e 11/3/2008 2eio0 per n che tende a +00 In particolare “Introduction to Algorithms” €i Cormen, Leiserson, Rivest: ¢ “Leziont di Algoritmi e strutture dati” di Margara ¢ Maniezz0 1 E inoltre ovvio che se Arq: (x) < g(x) per ogni x > 24 si ha f(x) = o(g(z)). Por fare i limiti ricordiamo uno det, teoremi di de "Hopital che ei dice che, i questo caso, s¢ esiste il lims++o. 5} allora esiste anche il due limiti sono ugnali: $2) img LO) lim = L ste g(x) erie @(2) ® Conftontiamo ad esempio le potenze din con quelle del log naturale: lim in 2 er (1) sotto loge 2th Hot ‘ lim oe Flog a tim 22 iterando (1) Va, 8>0 2) Ricordiamo inoltre alcune proprieta utili per questo tipo di esercizi: Jog,e = log, b- log, ¢ (3) logab = loga+logb (a) loga’ = bloga (5) ab = dlbwe Esercizio 1. Ordinare le seguenti fanzioni in modo erescente rispetto alla loro crescita asintotica (i logaritmi sono in base 2): 1. nlog?n 2. (sje “azando il Togartimo in base 2 si ottengono, per (3), costanti moltiplicative che non rodificano il risultato asintotico. 3, glee 4, nloetnionn 5. log 6. n/logn Te 8 nds Soluzione. La soluzione dell’esercizio é 35 8 6 1 427. Lo dimostriamo® mostrando come ogni funzione sia o della successiva nell’ordinamento (quindi, per transitivita, o di tutte le successive). Notiamo subito che 2!” — logn poiché i logaritmi sono in base 2. Si ha logn < log?n per ogni a > 1 (essendo n tendente a +00 € quindi anaggiore di 2) percid logn é o(log” n). Per (2) abbiamo log" n = o(n¥/8), Dimostriamo (n*/*) = o(n/logn): nl > logn per (2) nil : ign? dividendo per logn. Ts yale moltiplicando per n°/5 @ ha n/logn = o(n) e a maggior ragione si avra n/logn & o(nlog*n). Per (6) ni2sieeiogn g giosmiesleeioan cost possiamo dimostrare che nlog?n & tale dimostrazione non @ ri risolvero esercii sh esta nellesercizio ma la facciamo per capire come o(nentoe torn) 2EM1OEIE Sp log? Jog n - log log log n > log(nlog*n) logn- log loglogn > logn + 2loglogn facendo il log per (4) € (5) logloglogn > 14 Heeler dividendo per logn 00 >1 per (2) facendo il lim-+4s0 Dimostriamo che nlsleslos — 9((1.5)"/1) (1.5% > aloemeen fats 5 pleantostelsn usando (6) pes 5 > logn-logloglogn facendo il log o> loglogl tividendo per logn e ponendo 281-5 Teen > 28l0g}ogn per log e ponendo “S co end er (7) logn et > logn per (2) > logloglogn Ora dimostrare Pultima relazione risulia semplice: 2 > (Ls) Fs gles og. 10 n> usando (6) log 1.5 essendo <1 Esercizio 2. Insetire negli spaai contrassegnati dai punti O oppure 9. riloge(n) @ eee. (nt) (login)y" esses (a2) : (log(n))® 8 eso (as) Soluzione. Sfruttando quanto detto in precedenza vediamo subito che n log,(n) = O(n!) dato che per (2) loge(n) = a(n) Dimostriamo che (log(n))" = Q(n*) per ogni a: (log(n))* > n® questa é la tesi (8) grlaslogn > gatogn usando (6) nloglogn > alogn facendo il log nloglogn > alognioglogn per (2) >alogn essendo asintoticamente loglogn > 1 Quindi (log(n))" = O(n), Per Pultimo confrontando le due funzioni troviamo che (log(n))" = 2(n!96" (login})" > (nl) tesi grloricen > p(losm osm) — per (6) nlogtogn > log? n facendo il log nloglogn > n essendo asintoticamente loglogn > 1 > log?n per (2) 2 Funzioni di ricorrenza® In genere esercizi di questo tipo richiedono di indicare l’ordine di grandez- 2a (possibilmente ©) di una. funzione di ricorrenza o di serivere un semplice “lezione del 4/4/2002 algoritmo ricorsivo ¢ calcolame la complessita. Sono stati spiegati a levione fondamentalmente 3 metodi per risolvere equazioni di ricorrenza: iterativo?, sostituzione e “Master Method”. Qui ci timitiamo a ricordame brevemente il funzionamento, rimandando nuo- vamente ai libri consigliati® per una trattazione pid completa. ’ Il metodo iterativo cerca di risolvere la ricorrenza esplicitandola, sviluppando cio® le chiamate ricorsive cercando di trovare un’espressione matematica per calcolarle. Il metodo di sostituzione procede dimostrando per induzione che la funzione di ricorrenza appartiene ad un certo ordine di grandezza. Tale ordine di srandezza deve essere “indovinato”: si procede spesso per approssimazioni successive fino a trovare Pordine di grandezza pitt vicino possibile al valore della funzione. 1 “Master Method” & applicabile solo se la funzione di ricorrenza é del tipo T(n) = aT (n/0) + f(n) a>1,b>1, fla) >0 ©, posto x ogy a, ci si trova in uno dei seguenti tre casi: 1. f(n) = O(n?) cone >0 in questo caso T(n) = @(n®) 2. f(n) = O(n") in questo caso T(n) = @(n* logn) { f(r) = O(n") cone >0 af(nfi) m conc < i} ee caso T(n) = O(f(n)) Prima di passare agli esercizi ricordiamo che > po mnt) © eche Ta2e (10) = “speaio al usa un albero di ricorsione per rappresentare pit chiaramente i vari passaggi "vedi nota 3 Esercizio 3. Risolvere le seguenti equazioni di ricorrenza: 1 Tn) =27(n/2) +n TA) 2T(n)=Tin-1+m;, TA)= Soluzione. Risolviamo la prima equazione con ognuno dei tre metodi. Usando il metodo iterativo si ha: T(n) = 27 (3) +n? prima iterazione seconda iterazione terza iterazione iesima iterazione (ognj—1 eeeeee ae eeeae Cotte (log n)-esims iterazione f mo fegr-tg m a a (3) - x eon perché uso il logy fog) 2 =nT()+n? Yo = Uoen)-t cat) essendo T(1) =1 = (degn)=t =nent So per (10) ’ =n+2n(n—1) essendo n > 0 che & ©(n?) ‘Come si pud notare V’idea del metodo iterativo é quella di trovare un’espres- sione matematica che permetta di calcolare il costo di ‘T(n) sapendo il numero di iterazioni (chiamate ricorsive di T per una certa dimensione di input). Nel calcolo procedente abbiamo indicato tale espressione con “‘-esima iterazione”. Il numero di iterazioni deve poi essere dedotto da come la dimensione delI'in- put eala ad ogni paso: in questo caso la dimensione viene dimezzata, il nu- mero di iterazioni & quindi logaritmico (in base 2) nella dimensione dell’input, ile (“ (log n)-esima iterazione”) Passiamo ora al “Master Method”: vediamo che la funzione di ricorvenza si trova nella forma richiesta con a= 2, b= 2e f(n) =n? Poniamo 2 se ci troviamo in uno ¢ casi applic 11 primo e il secondo caso richiederebbero rispettivamente che f(n) = O(n") i Ofna!) ¢ f(n) = O(n*) cio’ n* = O(n) che non sono veri perché 1? = w(n*) con a <2. Questo soddisfa perd il primo requisito per il terzo caso: f(n) = 2(n!**) cio’ n? = Q(n"**) se € <1. Vediamo allora se il secondo requisito per il terzo caso @ verifieato: af(n/b) < ef{n) 2(n/2)* < ofr}? tre San 2 1 2 3 cn? per ogni tt > np, Assumendo per ipotesi induttiva che T(n/2) < e(n/2)* dimosiriamo che T(n) < on? T(n) or (5) +n? per fpotesi induttiva Son? se (§+1) Seciove>2 Rimane da dimostrare che questo vale anche per Ia condizione iniziale T(1) = 1 Si ha T(1) =1 < on? = c che @ vero prendendo ¢ > 2 >1 Abbiamo dimostrato che T(n) < en? e quindi che T(n) = O(n) passiamo ora alla dimostrazione di T(n) > en’. Assumendo per ipotesi industiva che T(nf2) > e(n/2)*: T(n) =27 (3) +n? per ipotesi induttiva 3 oe se (§+1) >ediode<2 Per la condizione iniziale si ha T(1) = 1 > on? = ¢ percid basta che sia <1. Avendo cosi dimostrato anche che T(n) = 2(n*) si pud concludere che T(n) = O(n?) La seconda equazione di ricorrenza. T(n) = T(n—1)-+n non pud essere risolta col “Master Method” perché non é del tipo giusto. La risolviamo con gli altri cue metodi Col metodo iterative: Tn) =P - 1) + prima iterazione =P(n—2)+(n-Yn seconda iterazione =T(n—3)+(n—2)+(n—1) +n. terza iterazione =T(n-i)+D(n-5) ‘-osima iterazione = (1 =T(n-(n-Y)+ YO (2-9) (n—1}-esimna iterazione essendo T(1) per le proprieté della somma per (9) 10 wn 2 che 6 G(n”) Per rislverla col metodo di sostituzione ipotizaiamo T(n) sia O(n?) e proyi- amo a dimostrarlo assumendo sia vero per T(n— 1) < o(n~ 1)? Tn) =T(n- +n 1 Son? senze Come per 'esercizio precedente rimane la condizione iniziale @T(1) = 1e si ha T(1) = 1 < en? =e percid basta prendere ¢ > 1. Proviamo ora a dimostrare T(n) = 0(n?). Il caso induttivo: Tn) =T(n-3) 2e(n-1)+n per ipotesi indu en? —2en-+e+n en? + (1—2c)n +e pen®tnte see< 1/2 2 en? Per la condizione iniziale si ha T(1) = 1 > en® = ¢ pereid basta prendere esl Avenido dimostrato T(n) = O(n?) e T(n) = 2(n*) otteniamo T(n) come ¢i si aspettava O(n’) Esercizio 4. Numeri di Fibonacci: serivere una procedura ricorsiva per calcolare F definita come segue. Oo sen roy {t sen Fn-1)+F(n—2) sen>1. Impostare Pequazione ricorsiva la cui soluzione rappresenta il tempo di ese- cuzione della procedura fornita ¢ risolverla. n Soluzione. Scriviamo la procedura ricorsiva che caleola F: Fib(n) if n= 0 then return 0 else . if a= 1 then return 1 else return (Fib(n-1) + Fib(n-2)) Tl tempo di eseeuzione di tale procedura @ dato dal tempo di esecuzione dei due conftonti pit il tempo di esecuzione della procedura stessa su input n—1 piv il tempo di esecuzione della somma pia il tempo di eseeuzione della procedura per input m— 2. L'equazione ricorsiva che ne ealeola il tempo di esecuzione sara quindi T(n) = 2e +T(n— 1) +e’ + 7(n — 2) con condizioni iniziali T(0) = ce T(1) = 2c. Siamo perd interessati al comportamento asintotico, possiamo quindi considerare ¢ = 2c = 2c +c = k costante ed abbiamo Tn) =T(n-1)+TR-2Q+k TO)=TW=k Notiamo subito che non é possibile applicare il “Master Method” e, dopo qualche tentativo, vediamo che anche il metodo iterativo é difficile da appli- care direttamente.Si pud perd notare che W(n-2)+k (2k) c= PT) +k ye POT) +k 2k + KO” = 2h k ko" k nm 7 J resima iterazione per (10) essendo T(0) =k che @ O(V2") prima iterazione seconda iterazione seconda iterazione terza iterazione terza iterazione iesima iterazione (n= 1}-esima iterazione per (10) essendo T(1 che 8 6(2") Otteniamo cosi @(V2") < T(n) < @(2") ¢ possiamo quindi concludere che T(n) ha complessita esponenziale in n, cio’ che T(n) = G(I") dove i 2 una 1B costante! compresa tra V2 e 2. a Lo stesso risultato si pud ottenere col metodo di sdstituzione pensando di dimostrare che la. complessita 8 esponenziale"” ciot T(n) = Q(t") con t > 0 si ha if T(n) =T(n 1) + T(n—2) +k Set! pct 2 4k {t+ 1 +k S2ct™"1 per n grande se t > 1 2 con condizione iniziale k = T(1) < et che @ verificata per ¢ > k/t. Con qualche calcolo matematico in pitt si riesce a dimostrare anche la disuguaglianza inversa, rimane comunque pid semplice lavorare su 7’ e T". Esercizio 5. Si supponga di disporre di un ipotetico algoritmo di “quasi” ordinamento QuasiSort che, preso in ingresso un vettore A di n elemen« 4i, ne ordina n/2 elementi arbitrari eollocandoli quindi nella meta sinistra AjL..n/2]. Si consider il seguente algoritmo ricorsivo, dove n é una potenza di program AlgRic(A(1..n}): QuasiSort(A/1..nj); AlgRio(Al(n/2+-1).-n)); Merge(A[t..n/2,A[(n/2+1)..n)}. La provedura Merge & quella standard impiegata per la fusione di due se quenze ordinate. Utilizzando Palgoritmo AlgRic, dimostrare che QuasiSort ha una complessita asintotica superiore a O(n) confront, Soluzione. Proviamo acalcolare la complessita di AlgRic: T(n) = QS(n)-+ T(n/2)+ M(n) dove QS ¢ la complessita di QuasiSort eM quella del Merge. Ul Merge ordinato classico ha complessita lineare quindi, avendo in input n/2+n/2 =n clementi, M(n) = n. Ipotiaziamo che QS(n) = O(n) Sceattamente t= 72; ma per | nostal scopl basta dare un'approssimazione *lo si pud dedurre immediatamente se si nota che T(n) > F(n) e ef si ricarda che i ‘numeri i Fibonacci erescouo in modo esponenzale “4 cerchiamo di ottenere un assurdo. La complessita di AlgRic sarebbe quindi data da T(n) = QS(n) +T(n/2) + M(n) = O(n) + T(n/2) +n. Poiché n= O(n) si tratta di risolvere Pequazione di ricorrenza, T(n) = T(n{2) + O(n). Possiamo applicare il “Master Method” con a= 1, b= e f(n) = O(n). Siamo nel terzo caso dato che O(n) = O(n"), se € < 1, ed esiste sicuramenge c <1 per cui O(n/2) < cO(n). Otteniamo quindi T(n) = O(f(n)) = ©(O(n)) = O(n) confronti"!. Questo é assurdo poiché sappiamo”? che nessun algoritmo di ordinamento basato sui confronti pud avere complessita inferiove a Qnlogn). ip stesso risultato si pud ottenere col metodo iterativo 0 con quello di sostituzione mostrando che la complessita é data da una costante k moltiplicata per O(n) "2g rimanda come al solito ai libri (nota 8) ed alle ezioni del corso 15

You might also like