Uiversità degli studi di Messia Facoltà di Igegeria Corso di Laurea i Igegeria Iformatica e delle Telecomuicazioi Fodameti di Iformatica II Prof. D. Brueo Complessità Computazioale
La Nozioe di Algoritmo Iformalmete, u algoritmo è u procedimeto formato da ua sequeza fiita di operazioi elemetari che trasforma uo o più valori di igresso iput i uo o più valori di uscita output Dato u algoritmo A, deoteremo co f A la fuzioe che associa a ogi igresso x di A la corrispodete uscita f A x Questa corrispodeza tra iput e output rappreseta il problema risolto dall algoritmo Fodameti di Iformatica II Prof. D. Brueo
Defiizioe di Problema Formalmete, u problema è ua fuzioe: f : D D I S defiita su u isieme D I di elemeti che chiameremo istaze, a valori su u isieme D S di soluzioi U problema verrà i geerale descritto usado la seguete rappresetazioe: Problema NOME Istaza: Soluzioe: x D I f x D S Fodameti di Iformatica II Prof. D. Brueo 3
Algoritmi e Problemi Diremo che u algoritmo A risolve u problema f se fx = f A x per ogi istaza x L esecuzioe di u algoritmo su u dato iput richiede il cosumo di ua certa quatità di risorse: tempo di computazioe spazio di memoria usato umero di dispositivi di calcolo utilizzato È i geerale importate saper valutare la quatità di risorse cosumate perché u cosumo eccessivo può pregiudicare le stesse possibilità di utilizzo di u algoritmo Noi faremo riferimeto a modelli di calcolo formati da u solo processore trattado, quidi, uicamete la teoria degli algoritmi sequeziali Fodameti di Iformatica II Prof. D. Brueo 4
Studio degli Algoritmi Possiamo raggruppare le problematiche riguardati lo studio degli algoritmi i tre ambiti pricipali: Sitesi: dato u problema f, costruire u algoritmo A per risolvere f, cioè tale che f = f A Aalisi : dato u algoritmo A ed u problema f, dimostrare che A risolve f, cioè che f = f A correttezza e valutare la quatità di risorse usate da A complessità cocreta Classificazioe: data ua quatità T di risorse, idividuare la classe di problemi risolubili da algoritmi che usao al più tale quatità Fodameti di Iformatica II Prof. D. Brueo 5
Complessità di u Algoritmo Due misure ragioevoli per sistemi di calcolo sequeziali soo i valori: T A x S A x tempo di calcolo spazio di memoria Valori richiesti da u algoritmo A su iput x Ua soluzioe che forisce buoe iformazioi su T A e su S A cosiste ell itrodurre il cocetto di dimesioe di u istaza Fodameti di Iformatica II Prof. D. Brueo 6
Tempo di Calcolo Dato u algoritmo A su u isieme di iput I, può accadere che due istaze x, x' I di eguale dimesioe, cioè tali che: x = x' diao luogo a tempi di esecuzioe diversi, ovvero: T A x T x' A Come defiire allora il tempo di calcolo di A i fuzioe di ua sola dimesioe? Fodameti di Iformatica II Prof. D. Brueo 7
Tempo di Calcolo cot. Ua possibile soluzioe è quella di cosiderare il tempo peggiore su tutti gli iput di dimesioe fissata. Ua secoda è quella di cosiderare il tempo medio. Avremo quidi: Complessità el caso peggiore Complessità el caso medio I questo modo la complessità diveta ua fuzioe T defiita sugli iteri positivi, co tutti i vataggi che la semplicità di questa otazioe comporta Risulta sigificativa la cosiddetta complessità asitotica, cioè il comportameto della fuzioe T per gradi valori di Quale delle due complessità forisce più iformazioe? Etrambe hao vataggi e svataggi. Ad esempio la complessità el caso peggiore forisce spesso ua valutazioe troppo pessimistica; viceversa, la complessità el caso medio assume ua distribuzioe uiforme sulle istaze, ipotesi discutibile i molte applicazioi Fodameti di Iformatica II Prof. D. Brueo 8
Esempio Ricerca Esaustiva it Ricerca_esaustiva it a[], it key; it { } it i; for i=; a[i]!=key && i!=; i++; retur a[i]==key? i :0; C C C3 Il tempo di esecuzioe si esprime come: T = C + αc + C3 dove α = se l elemeto o esiste i se l elemeto è i posizioe i Come fissare α? Assumedo ua distribuzioe uiforme, l elemeto si troverà mediamete i posizioe i= = i i i= = + + = coviee, però, prescidere da distribuzioe e ordiameto dei dati Fodameti di Iformatica II Prof. D. Brueo 9
Complessità i Tempo Ordii di Gradezza Il criterio pricipale solitamete usato per valutare il comportameto di u algoritmo è basato sull aalisi asitotica della sua complessità i tempo el caso peggiore o i quello medio. I particolare l ordie di gradezza di tale quatità, al tedere di a forisce ua valutazioe della rapidità di icremeto del tempo di calcolo al crescere delle dimesioi del problema Ua differeza ache piccola ell ordie di gradezza della complessità di due procedure può comportare eormi differeze elle prestazioi di due algoritmi Fodameti di Iformatica II Prof. D. Brueo 0
Tempi effettivi La seguete tabella forisce u idea più precisa del tempo effettivo corrispodete a fuzioi di complessità tipiche. Si è supposto di poter eseguire u operazioe elemetare i u microsecodo. Si soo cofrotati i tempi di calcolo richiesti su istaze di varie dimesioi da sei algoritmi di complessità i tempo differete. Complessità =0 =0 =50 =00 =0 3 =0 4 =0 5 =0 6 0μs 0μs 50μs 0,ms ms 0ms 0,s s log 33,μs 86,4μs 0,8ms 0,6ms 9,9ms 0,s,6s 9,9s 0,ms 0,4ms,5ms 0ms s 00s,7h,5g 3 ms 8ms 5ms s 6,6m,5g 3,7a 300c ms s 35,7a 0 4 c 3 59ms 58m 0 8 c μs = microsecodi ms = millisecodi s = secodi m = miuti h = ore a = ai c = secoli = periodo superiore al milleio Fodameti di Iformatica II Prof. D. Brueo
Cosiderazioi Dall aalisi della tabella precedete si possoo trarre le segueti cosiderazioi: Gli algoritmi dotati di ua complessità i tempo lieare o di poco superiore log soo utilizzabili i maiera efficiete ache per elevate dimesioi dell iput Gli algoritmi che hao ua complessità dell ordie di k co k soo applicabili solo quado la dimesioe dell igresso o è troppo elevata Gli algoritmi che hao ua complessità espoeziale ad esempio o 3 presetao tempi di calcolo proibitivi ache per dimesioi di iput limitate Fodameti di Iformatica II Prof. D. Brueo
Cosiderazioi cot. Si potrebbe pesare che le valutazioi geerali riportate precedetemete dipedao dall attuale livello tecologico e siao destiate ad essere superate co l avveto di ua tecologia più sofisticata che permetta di produrre strumeti di calcolo sesibilmete più veloci I realtà: algoritmi lieari o quasi lieari log traggoo pieo vataggio dal passaggio alla tecologia più potete algoritmi poliomiali traggoo u vataggio evidete ma smorzato algoritmi espoeziali o traggoo essu vataggio Fodameti di Iformatica II Prof. D. Brueo 3
Espressioi Asitotiche Il comportameto asitotico ci permette di valutare l efficieza quado le dimesioi tedoo all ifiito, cosiderado il caso peggiore tra quelli di pari dimesioe. I certi casi si valuta il caso medio, ma è più complicato Aalisi asitotica di u algoritmo Valutazioe comportameto asitotico di ua sequeza di iteri {T}. dove: N T : quatità di ua certa risorsa cosumata su u iput di dimesioe el caso peggiore o i quello medio Fodameti di Iformatica II Prof. D. Brueo 4
Relazioi tra sequeze umeriche Date due fuzioi f,g defiite su N a valori i R + si possoo defiire le segueti relazioi: f è o grade di g f = O g f è omega grade di g f = Ω g 3 f e g hao lo stesso ordie di gradezza f = Θ g Fodameti di Iformatica II Prof. D. Brueo 5
Relazioi tra sequeze umeriche cot. f = O g Si dice che f è o grade di g se: c > 0 0, 0 N : > f c g si dice ache che f ha ordie di gradezza miore o uguale a quello di g Esempi: 5 + = O 4 5 3 = O log = O Fodameti di Iformatica II Prof. D. Brueo 6
Relazioi tra sequeze umeriche cot. f = Ω g Si dice che f è omega grade di g se: c > 0 0, 0 N : > f c g si dice ache che f ha ordie di gradezza maggiore o uguale a quello di g Esempi: 0 log = Ω k e k = Ωlog = Ω per ogi itero k>0 Fodameti di Iformatica II Prof. D. Brueo 7
Relazioi tra sequeze umeriche cot. 3 f = Θ g Si dice che f e g hao lo stesso ordie di gradezza se: c, d > 0 0, 0 N : > c g f d g Esempi: 5 + = Θ 00log = Θ log log + = Θ Fodameti di Iformatica II Prof. D. Brueo 8
Proprietà Dalle defiizioi precedeti si deducoo le segueti proprietà: f = O g g = Ω f f = Θ g f = O g, f = Ω g Fodameti di Iformatica II Prof. D. Brueo 9
0 Fodameti di Iformatica II Prof. D. Brueo Regole 0, > = = c g O f c g O f ], max[ g g O f f g O f g O f = + = = Ω,Θ Dalla defiizioe di O grade discede che: Le stesse regole valgoo per I fattori costati o iteressao I termii di grado iferiore o iteressao 0, 0 k k k k k k O f a a a a a f = > + + + + = Vale la regola della somma
Fodameti di Iformatica II Prof. D. Brueo Dimostrazioe = = g O f g O f g b f g a f ], max[ g g b a bg ag f f + + + Al fie di dimostrare la regola della somma si cosideri: dalla defiizioe di o grade risulta: quidi: da cui deriva: ], max[ g g O f f = +
Cosiderazioi No è corretto cosiderare solo il caso migliore per valutare il comportameto asitotico di u algoritmo. Il fatto che u algoritmo el caso migliore abbia ua complessità lieare o basta per affermare che l algoritmo appartega a Θ oppure a O. Per lo stesso motivo o è corretto eppure affermare che l'algorimto appartiee a Θ solo perché el caso peggiore la complessità è quadratica. Viceversa, è corretto affermare che, el caso migliore, la complessità dell'algoritmo è Θ, che el caso medio e el caso peggiore la complessità è Θ e, più i geerale, che l'algoritmo è O ovvero è Ώ. U altra importate cosiderazioe fa riferimeto ai casi i cui o soo verificate le codizioi che soo alla base dell itroduzioe delle otazioi asitotiche. Ifatti, proprio perché le otazioi itrodotte soo asitotiche, vegoo trascurati i termii di ordie iferiore e le costati moltiplicative. Tuttavia, el caso i cui è ecessario cofrotare algoritmi aveti tempi di esecuzioe T il cui adameto al limite è uguale es. soo etrambe O, o è più possibile trascurare tali termii. I tal caso per stabilire quale algoritmo è più coveiete usare bisoga ecessariamete teer coto, i primo luogo delle costati moltiplicative e poi dei termii di ordie iferiore. Fodameti di Iformatica II Prof. D. Brueo
Tempo di esecuzioe: Operazioi semplici Le segueti operazioi hao u tempo di esecuzioe dell ordie di: operazioi aritmetiche +,*, operazioi logiche&&,,. cofroti <=, == operazioi di accesso a strutture dati semplici p.e.: ad elem. di array operazioi di assegazioi di valore p.e.: a=b seza chiamate di fuzioe operazioi di lettura e scrittura p.e.: pritf... operazioi di cotrollo p.e.: break,cotiue, retur T = O Spiegazioe ituitiva: soo operazioi che possoo essere realizzate co poche istruzioi i liguaggio macchia Fodameti di Iformatica II Prof. D. Brueo 3
Tempo di esecuzioe: Blocchi di comadi semplici U blocco composto da ua serie di comadi semplici ha u tempo di esecuzioe dell ordie di: T = O Ifatti, per la regola della somma, ogi somma di u umero costate di O restituisce come risultato O Fodameti di Iformatica II Prof. D. Brueo 4
Tempo di esecuzioe: ciclo for O ciclo for iizializza test O ed La complessità di u ciclo for è data dal prodotto della complessità del corpo del for stesso per il umero di volte che esso viee eseguito. T = Ok*f k volte corpo icremeto Of O Trattadosi di ciclo o predetermiato, sarà ecessario distiguere u caso migliore ed u caso peggiore. Dette k mi e k max il umero miimo e massimo di volte che viee iterato u geerico ciclo for si potrao otteere i tempi di esecuzioe T mi e T max Il caso del ciclo while risulta essere aalogo Fodameti di Iformatica II Prof. D. Brueo 5
Tempo di esecuzioe: costrutto if-the-else If-the-else O test parte if parte else La complessità di u istruzioe del tipo if <codizioe> the <istruzioi ramo the> else<istruzioi ramo else> è limitata superiormete dal ramo che ha la complessità maggiore. I realtà bisoga ache cosiderare il tempo impiegato a verificare la codizioe, che i geere ha complessità costate O. Of Og T = Omax[f,g] Ragioameti aaloghi valgoo el caso di u costrutto di tipo case. Fodameti di Iformatica II Prof. D. Brueo 6
Tempo di esecuzioe: chiamata di fuzioi La complessità di ua chiamata di fuzioe è data dalla somma di due termii: il costo, i termii di complessità computazioale, dell esecuzioe della fuzioe stessa ed il costo della chiamata. Quest ultimo è i geere trascurabile, ma o lo è se si effettuao chiamate per valore che hao l effetto di copiare sullo stack la struttura dati d la cui dimesioe è proprio quella da cui dipede la ostra fuzioe T di iteresse. Tuttavia, se la struttura dati è u vettore ed il liguaggio cosiderato è il C, poiché alla fuzioe viee passato di fatto il putatore al primo elemeto del vettore, il tempo di chiamata è idipedete da. T = Of fuzioe +f chiamata Passaggio dell itera struttura dati T = Of fuzioe Passaggio del putatore alla struttura dati Fodameti di Iformatica II Prof. D. Brueo 7
Tempo di esecuzioe: fuzioi ricorsive La complessità di ua fuzioe ricorsiva cioè di ua fuzioe che cotiee al suo itero ua chiamata a se stessa o può essere calcolata co le teciche precedeti. Ifatti, data ua geerica fuzioe ricorsiva R, la complessità della chiamata di u istaza ricorsiva di R, che compare el corpo di R stessa, dovrebbe essere data dalla somma del costo di chiamata e del costo dell esecuzioe dell istaza di R. Ma quest ultimo costo è proprio quello che stiamo cercado di calcolare, ed è quidi icogito. Per risolvere questo problema è ecessario esprimere il tempo icogito T dell esecuzioe di R, come somma di due cotributi: u tempo Of che deriva dall isieme di tutte le istruzioi che o cotegoo chiamate ricorsive, ed u tempo Tk che deriva dalle chiamate ricorsive, ivocate su di ua dimesioe del dato di igresso più piccola, cioè co k <. Otterremo quidi u equazioe, detta formula di ricorreza, del tipo: T=aT/b+Of Fodameti di Iformatica II Prof. D. Brueo 8
Tempo di esecuzioe: fuzioi ricorsive cot. Ad esempio, ell ambito del paradigma divide-et-impera, avremo ricorreze del tipo: T= O at/b+c+d per c per >c derivati dall aver diviso u certo problema padre i a sottoproblemi figlio di dimesioe /b, avedo idicato co C il costo derivate dalla combiazioe dei risultati e co D il costo relativo alla divisioe del problema padre ei problemi figlio ed essedo costate e quidi pari a O il tempo per la soluzioe dei problemi el caso baale, cioè quado <c. Per risolvere ua formula di ricorreza, e quidi giugere a determiare la complessità asitotica di T, è possibile adottare dei particolari metodi di soluzioe. Uo di questi detto metodo iterativo cosiste semplicemete ell iterare la ricorreza proposta, fiché o si riesce a trovare ua geeralizzazioe. A questo puto occorre trovare il valore per il quale si chiude la ricorreza, sostituirlo ella formula geerale e calcolare il risultato applicado le regole per limitare le sommatorie. Fodameti di Iformatica II Prof. D. Brueo 9
Esercizio Calcolare la complessità i fuzioe di 0 della seguete fuzioe: it g it { it a=; if <=500 for it i=; i<=; i++ for it j=; j<=;j++ a+=; else for it i=; i<=; i++ a+=; retur a; } Soluzioe: Istruzioe ricorrete: a+=; T= O per 500 istr. ricorrete i u doppio ciclo for ciascuo dei quali itera volte O per >500 istr. ricorrete i u ciclo for da ad. Complessità asitotica Fodameti di Iformatica II Prof. D. Brueo 30
Esercizio Dato il seguete frammeto di programma: i=; while i>= { for it j=; j<=;j++ a++; i=e; } calcolare la complessità asitotica i fuzioe di ei casi: a E=i-; b E=i-; c E=i/. Fodameti di Iformatica II Prof. D. Brueo 3
Esercizio : soluzioe Istruzioe ricorrete: a++; Tale istruzioe verrà eseguita almeo volte el for, resta da determiare la stima delle iterazioi el ciclo estero while i fuzioe di che adrao a moltiplicare le iterazioi del ciclo itero => T = OTwhile*. Il while itera per i che va da ad variado ei tre casi il passo di decremeto => i. Calcoliamo duque la complessità del while: a i=e=i-: il passo è lieare => il while itera volte => T = O* = O ; b i=e=i-: alla prima iterazioe i=, viee eseguito il for e duque ad i viee assegato i- => i=0 che o soddisfa la codizioe del while => ua sola iterazioe => T = O* = O; Fodameti di Iformatica II Prof. D. Brueo 3
Esercizio : soluzioe cot. c I=E=i/: suppoiamo sia k il umero di iterazioi del quale vogliamo stabilire ua stima della complessità i fuzioe di : iizialmete i=; passo K i=/; passo K- i=/4; passo K- i=/8; passo k-z i=/ z+ ; passo j i=/ k-j+ ; passo i=/ k =; Da cui possiamo stimare k: k = log Il che vuol dire che la complessità asitotica sarà: T = O*log Fodameti di Iformatica II Prof. D. Brueo 33
Esercizio 3 a Date le segueti dichiarazioi di fuzioe, calcolare la complessità i fuzioe di >0 della chiamata PF,y. it Fit { it b; it a=; for it i=; i<=; i++ for it j=; j<=;j++ a++; b= a/; retur *b; } void P it m, it &x { for it i=; i<=m*m; i++ x+=3; } Fodameti di Iformatica II Prof. D. Brueo 34
Esercizio 3 a: soluzioe L istruzioe ricorrete di F si trova all itero del doppio for, cioè: a++; Quella di P è ivece localizzata all itero del for: x+=3; La complessità di F risulta essere: T F = O essedo l istruzioe ricorrete iterata i u doppio for co i e step uitario, quella di P: T P m = Om i quato il ciclo itera per i tra ed m co icremeto uitario. Il valore restituito dalla fuzioe F che diveta il limite del ciclo i P il parametro m facedo u semplice calcolo risulta essere uguale ad, per cui ella stima della complessità possiamo sostituire ad m ; da cui la complessità totale si trova sommado le complessità delle due fuzioi, essedo la loro esecuzioe o sovrapposta e iterata: T = T F + T P = O + O = O Fodameti di Iformatica II Prof. D. Brueo 35
Esercizio 3 b Come ell esempio precedete ma co F defiita come segue: Soluzioe : it Fit { } it b; it a=; for it i=; i<=; i++ b= a; retur *b; for it j=; j<=;j++ a++; La complessità delle due fuzioi rimae ivariata rispetto al caso precedete, differisce ivece il valore restituito dalla fuzioe F, che sarà : T F = O ; T P m = Om T = T F + T P = O + O 4 = O 4 Fodameti di Iformatica II Prof. D. Brueo 36
Esercizio 4 Calcolare la complessità i fuzioe di >0 del seguete ciclo: for it j=; j<=f;j++ a+=; it f it { it a=0; for it j=; j<=;j++ a+=; retur a; } Soluzioe: umero di iterazioi = risultato[f]: somma volte => complessità di ua iterazioe: complessità della chiamata f: T F = O + O + O = O complessità del for: umero iterazioi * complessita di ua iterazioe: T for = O * = O 3 Fodameti di Iformatica II Prof. D. Brueo 37
Esercizio 5 Calcolare la complessità della fuzioe seguete ricerca biaria it bisearch it A [], it, it x { it i=0; it j= ; while i <= j { it k=i+j/; if x == A[k] retur ; if x < A[k] j= k ; else i= k+; } retur 0; } Fodameti di Iformatica II Prof. D. Brueo 38
Esercizio 5: soluzioe La fuzioe bisearch implemeta l algoritmo di ricerca dicotomica o biaria su vettori ordiati. È basato sul pricipio divide et impera: scelto come elemeto pivot quello co idice medio, si cofrota l elemeto i tale posizioe el vettore col valore ricercato, se il cofroto dà esito positivo si è ultimata la ricerca, altrimeti prosegue su ua parte del vettore, per vettori ordiati i ordie crescete, quella a destra del pivot se l elemeto ricercato è maggiore di quest ultimo, a siistra el caso opposto. Per calcolare la complessità utilizziamo ua variabile k che cota il umero di cicli effettuati: iizialmete passo K passo K- passo K- passo K-z... passo j passo i=0; i=/+; i=3/4+; i=7/8+; i=[ z+ -/ z+ ]+; i=[ k-j+ -/ k-j+ ]+; i=[ k -/ k ]+=-. Da cui possiamo stimare k: k = log [ + /] Il che vuol dire che la complessità asitotica sarà: Olog Fodameti di Iformatica II Prof. D. Brueo 39
Esercizio 6 Calcolare la complessità asitotica i fuzioe di della seguete fuzioe ricorsiva che calcola il fattoriale di u umero it fattorialeit { if == retur ; else retur *fattoriale-; } Fodameti di Iformatica II Prof. D. Brueo 40
Esercizio 6: soluzioe La formula di ricorreza è data i questo caso da: T= O per = T-+O per > quidi: T =T O = T O O = T 3 O O O geeralizzado: k T =T k O i= la ricorsioe si chiude quado T sarà pari ad quidi per k=-, quidi T =T i= O =O i= O = O =O i= Fodameti di Iformatica II Prof. D. Brueo 4