Algoritmi e Strutture Dati - PowerPoint PPT Presentation

bluma
algoritmi e strutture dati n.
Skip this Video
Loading SlideShow in 5 Seconds..
Algoritmi e Strutture Dati PowerPoint Presentation
Download Presentation
Algoritmi e Strutture Dati

play fullscreen
1 / 46
Download Presentation
Algoritmi e Strutture Dati
129 Views
Download Presentation

Algoritmi e Strutture Dati

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

  1. Algoritmi e StruttureDati LucianoGualà guala@mat.uniroma2.it www.mat.uniroma2.it/~guala

  2. riassuntopuntateprecedenti Abbiamo un problema a cui sono associate diverse (infinite) istanzedidiversadimensione. Vogliamorisolvere (automaticamente) ilproblemaprogettando un algoritmo. L’algoritmosaràeseguitosu un modellodicalcoloe devedescrivere in modo non ambiguo (utilizzandoappositicostrutti) la sequenzadioperazionisulmodellocherisolvonounagenericaistanza. La velocitàdell’algoritmo è misurata come numerodioperazionieseguitesulmodello e dipendedalladimensione e dall’istanzastessa. Analizzare la complessitàcomputazionaledi un algoritmovuol dire stimareil tempo diesecuzionedell’algoritmonelcasopeggiore in funzionedelladimensionedell’istanza. Sappiamoprogettare un algoritmoveloce? Fin dove possiamospingerci con la velocità? A volte sipuòdimostrarematematicamentecheoltreunacertasogliadivelocitànon sipuòandare.

  3. modellidicalcolo

  4. Un modellostorico: la macchinadi Turing - troppodibasso livello: somigliatroppopocoaicalcolatorirealisu cui giranoiprogrammi - utile per parlaredicalcolabilità ma meno utile per parlarediefficienza

  5. un modellopiùrealistico • Macchina a registri (RAM: random access machine) • un programmafinito • un nastrodiingresso e unodiuscita • unamemoriastrutturata come un array • ognicellapuòcontenere un qualunquevaloreintero/reale • due registrispeciali: PC e ACC • la RAM è un’astrazionedell’architetturadi von Neumann

  6. Macchina a registriRAM: random access machine nastrodiInput nastrodiOutput memoria (come un grosso array) CPU PC ACC PC: program counter prossimaistruzione daeseguire programma finito ACC: mantiene operandi istruzionecorrente

  7. Modellodicalcolo: cosaposso fare • L’analisidellacomplessitàdi un algoritmo è basatasulconcettodipassoelementare • passielementarisuunaRAM • istruzioneingresso/uscita (lettura o stampa) • operazionearitmetico/logica • accesso/modifica del contenutodellamemoria

  8. Criteridicosto: quanto mi costa • Criteriodicostouniforme: • tutte le operazionihanno lo stessocosto • complessitàtemporalemisurata come numerodipassielementarieseguiti • Criteriodicostologaritmico • Il costo di una operazione dipende dalla dimensione degli operandi dell’istruzione • Un’operazione su un operando di valore x ha costo log x • È un criterio di costo che modella meglio la complessità di algoritmi “numerici” criteriodicostogeneralmente usato è quellouniforme

  9. Caso peggiore, migliore e medio • Misureremo il tempo di esecuzione di un algoritmo in funzione della dimensione n delle istanze • Istanze diverse, a parità di dimensione, potrebbero però richiedere tempo diverso • Distinguiamo quindi ulteriormente tra analisi nel caso peggiore, migliore e medio

  10. Caso peggiore • Sia tempo(I) il tempo di esecuzione di un algoritmo sull’istanza I Tworst(n) = maxistanze I di dimensione n {tempo(I)} • Intuitivamente, Tworst(n) è il tempo di esecuzione sulle istanze di ingresso che comportano più lavoro per l’algoritmo • rappresenta una garanzia sul tempo di esecuzione di ogni istanza

  11. Caso migliore • Sia tempo(I) il tempo di esecuzione di un algoritmo sull’istanza I Tbest(n) = min istanze I di dimensione n {tempo(I)} • Intuitivamente, Tbest(n) è il tempo di esecuzione sulle istanze di ingresso che comportano meno lavoro per l’algoritmo • significa davvero qualcosa? (mah…)

  12. Caso medio • Sia P(I) la probabilità di occorrenza dell’istanza I Tavg(n) = ∑ istanze I di dimensione n {P(I) tempo(I) } • Intuitivamente, Tavg(n) è il tempo di esecuzione nel caso medio, ovvero sulle istanze di ingresso “tipiche” per il problema • Come faccio a conoscere la distribuzione di probabilità sulle istanze? • Semplice: (di solito) non posso conoscerla • -> faccio un’assunzione. • spesso è difficile fare assunzioni realistiche

  13. Esercizio Analizzare la complessitànelcasomiglioredeiquattroalgoritmidipesaturapresentatinella prima lezione. Esercizio Analizzare la complessitànelcasomedio del primo algoritmodipesatura (Alg1) presentatonella prima lezione. Rispettoalladistribuzionediprobabilitàsulleistanze, siassumache la monetafalsapossatrovarsi in modoequiprobabile in unaqualsiasidellenposizioni.

  14. Unagrande idea: notazioneasintotica

  15. Notazioneasintotica: intuizioni complessitàcomputazionaledi un algoritmoespressa con unafunzioneT(n) T(n): # passielementarieseguitisuunaRAMnelcasopeggiore suun’istanzadidimensionen Idea: descrivere T(n) in modoqualitativo. Ovvero: perdere un po’ in precisione (senzaperderel’essenziale) e guadagnare in semplicità

  16. Notazioneasintotica: intuizioni T(n): # passielementarieseguitisuunaRAMnelcasopeggiore suun’istanzadidimensionen un esempio: 71 n2+ 100 n/4 + 7 se n è pari T(n)= 70 n2+ 150 (n+1)/4 + 5 se n è dispari scriveremo: T(n)= (n2) intuitivamentevuol dire: T(n) è proporzionale a n2 • cioèignoro: • costantimoltiplicative • termini diordineinferiore • (checresconopiù lentamente) Nota: l’assunzioneimplicita è cheguardo come sicomportal’algoritmosuistanzegrandi

  17. …unavecchiatabella: numeroasintoticodipesate assunzione:ognipesatarichiede un minuto TABELLA (n) pesate (log n) pesate

  18. Un’altratabella: dallabilancia al computer Tempi diesecuzionedidifferentialgorimi per istanzedidimensionecrescentesu un processorechesaeseguireun milionediistruzionidi alto livelloal secondo. L’indicazionevery longindicacheil tempo dicalcolosupera 1025anni.

  19. Notazione asintotica O f(n) = O(g(n)) se  due costanti c>0 e n0≥0 tali che 0f(n) ≤ c g(n) per ogni n ≥n0

  20. Esempi: Sia f(n) = 2n2 + 3n, allora • f(n)=O(n3) (c=1, n0=3) • f(n)=O(n2) (c=3, n0=3) • f(n)  O(n)

  21. Notazioneasintotica O O( g(n) )={f(n) |  c>0 e n0≥0 tali che 0  f(n) ≤ c g(n) per ogni n ≥n0} • La scrittura: 2n2+4=O(n3) • è un abusodinotazine per: 2n2+4  O(n3)

  22. Notare:

  23. Notazione asintotica  f(n) = (g(n)) se  due costanti c>0 e n0≥0 tali che f(n) ≥ c g(n) ≥ 0 per ogni n ≥n0 f(n) f(n) = (g(n)) cg(n) n0 n

  24. Esempi: Sia f(n) = 2n2 – 3n, allora • f(n)= (n) (c=1, n0=2) • f(n)=(n2) (c=1, n0=3) • f(n)  (n3)

  25. Notazioneasintotica (g(n))={f(n) |  c>0 e n0≥0 tali che 0  c g(n) ≤ f(n) per ogni n ≥n0} • La scrittura: 2n2+4= (n) • è un abusodinotazine per: 2n2+4 (n)

  26. Notare:

  27. Notazione asintotica  f(n) = ( g(n) ) se  tre costanti c1,c2>0 e n0≥0 tali che c1 g(n) ≤ f(n) ≤ c2 g(n) per ogni n ≥n0 c2g(n) f(n) = Q(g(n)) f(n) c1g(n) n0 n

  28. Esempi: Sia f(n) = 2n2 – 3n, allora • f(n)= (n2) (c1=1, c2=2, n0=3) • f(n)(n) • f(n)  (n3)

  29. Notazioneasintotica (g(n))={f(n) |  c1,c2>0 e n0≥0 tali che c1g(n) ≤ f(n)  c2 f(n) per ogni n≥n0} • La scrittura: 2n2+4= (n2) • è un abusodinotazine per: 2n2+4 (n2)

  30. Notare che:

  31. Notazione asintotica o Data una funzione g(n): N  R, si denota con o(g(n)) l’ insieme delle funzioni f(n): N R: o(g(n)) = {f(n) :  c> 0,  n0 tale che  n  n0 0  f(n) < cg(n) } Notare:

  32. Notazione asintotica  Data una funzione g(n): N  R, si denota con (g(n)) l’ insieme delle funzioni f(n): (g(n)) = {f(n) :  c> 0,  n0 tale che  n  n0 0  c g(n) < f(n) } Notare:

  33. Riassumendo ……

  34. Analogie O Q o  = < >

  35. Proprietà della notazione asintotica Transitività Riflessività Simmetria Simmetria trasposta

  36. Ancora una convenzione Un insieme in una formula rappresenta un’anonima funzione dell’insieme. Esempio 1: f(n)=n3 + O(n2) sta per: c’è una funzione h(n) O(n2) tale che f(n)=n3 + h(n) Esempio 2: n2 + O(n) = O(n2) sta per: per ogni funzione f(n)O(n), c’è una funzione h(n) O(n2) tale che n2 +f(n)= h(n)

  37. …una semplice ma utile proprietà per capire la velocità di una funzione Se lim f(n)/g(n)= c >0 n allora f(n)=(g(n)) Infatti: c/2 < f(n)/g(n) < 2c per nsuff. grande

  38. Esempio: • Se T(n) = adnd + ad-1 nd-1 + … + a0è un polinomio di grado d (con ad>0), allora T(n) = (nd) • Infatti: • T(n) / nd = ad + ad-1 n-1 + … + a0n-d che tende a ad quando n :

  39. Polinomi …… P(n) = (nd) P(n) = O(nd) P(n) = (nd) P(n) = ad nd + ad-1 nd-1 + … + a0 ad > 0 Esponenziali …… f(n) = an a >1 an = (nd) an = (nd) Logaritmi …… f(n) = logb(n) b>1 [logb(n)]c = o(nd) [logb(n)]c = O(nd) Fattoriali …… f(n) = n! = n*(n-1)*……*2*1 n! = o(nn) n! =  (an)

  40. velocitàasintoticadifunzionicomposte

  41. Velocitàdellefunzionicomposte date f(n) e g(n), la velocità ad andare a infintodellafunzione f(n)+g(n) è la velocitàdellapiùvelocefra f(n) e g(n) Esempi: n3+n=(n3) n+log10n=(n) infatti: per ognin max{f(n),g(n)}  f(n)+g(n)  max{f(n),g(n)}+ max{f(n),g(n)} = 2 max{f(n),g(n)}

  42. Velocitàdellefunzionicomposte date f(n) e g(n), la velocità ad andare a infinitodellafunzione f(n) g(n) e la velocitàdi f(n) “più” la velocitàdi g(n) la velocità ad andare a infinitodellafunzione f(n)/g(n) e la velocitàdi f(n) “meno” la velocitàdi g(n) Esempio: n3log n + nlog3 n = (n log n) n2 + 1

  43. Usare la notazioneasintoticanelleanalisi

  44. Analisicomplessitàfibonacci3: un Upper Bound algoritmofibonacci3(intero n)  intero sia Fib un array di n interi Fib[1]  Fib[2]  1 fori = 3 to n do Fib[i]  Fib[i-1] + Fib[i-2] returnFib[n] 1 2 3 4 5 T(n): complessitàcomputazionalenelcasopeggiore con input n cj: #passielementarieseguitisuuna RAM quando è esguita la lineadicodicej - linea1, 2 e 5eseguiteunavota • linee3 e 4: eseguite al piùn volte T(n)  c1+c2+c5 +(c4+c5)n =(n) T(n)=O(n)

  45. Analisicomplessitàfibonacci3: un Lower Bound Nota: poichéogniistruzionedi alto livelloesegue un #costantedipassielementaripossocontare # diistruzioni algoritmofibonacci3(intero n)  intero sia Fib un array di n interi Fib[1]  Fib[2]  1 fori = 3 to n do Fib[i]  Fib[i-1] + Fib[i-2] returnFib[n] 1 2 3 4 5 T(n): complessitàcomputazionalenelcasopeggiore con input n cj: #passielementarieseguitisuuna RAM quando è esguita la lineadicodicej la linea4 è eseguitaalmeno n-3 volte T(n)  c4(n-3)= c4n -3c4 =(n) T(n)=(n) T(n)=(n)

  46. Notazioneasintotica: perché è unagrande idea • misuraindipendentedall’implementazionedell’algoritmo e dallamacchinarealesu cui è eseguito • il “dettagli” nascosti (costantimoltiplicative e termini diordineinferiore) sonopocorilevantiquandon è grande per funzioniasintoticamente diverse (guardatabella) • analisidettagliatadel numerodipassirealmenteeseguitisarebbedifficile, noiosa e non direbbe molto dipiù(come sipossonoconoscere per esempioicostirealidiun’istruzionedi alto livello?) • si è vistochedescrivebenein pratica la velocitàdeglialgoritmi