1 / 46

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati. Luciano Gualà guala@mat.uniroma2.it www.mat.uniroma2.it/~guala. riassunto puntate precedenti.

bluma
Télécharger la présentation

Algoritmi e Strutture Dati

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

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

More Related