1 / 61

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati. Luciano Gualà guala@mat.uniroma2.it www.mat.uniroma2.it/~guala. Informazioni utili. Orario lezioni Lunedì : 11,00 – 13,00 mercoledì : 9,00 – 11,00 Orario ricevimento mercoledì : 11,15 – 12,45 (o su appuntamento )

xarles
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. Informazioniutili • Orariolezioni • Lunedì: 11,00 – 13,00 • mercoledì: 9,00 – 11,00 • Orarioricevimento • mercoledì: 11,15 – 12,45 (o suappuntamento) • Ufficio: dip. dimatematica, piano 0, corridoio B0, stanza 206

  3. Struttura del corso • Corso strutturato in due moduli • Modulo I (vecchio Elementi di Algoritmi e Strutture Dati) • 6 CFU • Ottobre – Gennaio • Modulo II (vecchio Algoritmi e Strutture dati con Laboratorio) • 6 CFU • Marzo – Giugno

  4. Prerequisiti del corso Cosa è necessariosapere… • programmazionedi base • strutturedatielementari • concettodiricorsione • dimostrazione per induzione e calcoloinfinitesimale Propedeuticità • programmazione • analisimatematica • matematicadiscreta

  5. Slide e materialedidattico Libriditesto http://www.mat.uniroma2.it/~guala/ C. Demetrescu, I. Finocchi, G. Italiano Algoritmi e Strutture dati (sec. ed.) McGraw-Hill S. Dasgupta, C. Papadimitriou, U. Vazirani Algorithms , McGraw-Hill P. Crescenzi, G. Gambosi, R. Grossi, G. Rossi Strutturedidati e algoritmi Pearson T.H. Cormen, C.E. Leiserson, R.L. Rivest, C. Stein Introduzioneaglialgortimi e strutturedati McGraw-Hill J. Kleinberg, E. Tardos Algorithm Design Addison Wesley A. Bertossi, A. Montresor Algoritmi e strutturedidati CittàStudi

  6. Modalitàd’esame • L’esameconsiste in unaprovascrittae unaprovaorale • Quattro appelli • 2 giugno/luglio • 1 settembre • 1 gennaio/febbraio • Provaparziale a febbraio • Per sostenerel’esame è obbligatorioprenotarsi online (unasettimana prima) su delphi.uniroma2.it

  7. Qualcheconsiglio: • Lavorare sui problemi assegnati in gruppo • Scrivere/formalizzare la soluzione individualmente

  8. Algoritmo Procedimentochedescriveunasequenzadipassibendefinitifinalizzato a risolvere un datoproblema (computazionale).

  9. etimologia Il termineAlgoritmoderivadaAlgorismus, traslitterazionelatina del nomedi un matematicopersiano del IX secolo, Muhammad al-Khwarizmi, chedescrissedelle procedure per icalcolimatematici

  10. Algoritmi e programmi • Un algoritmo può essere visto come l’essenza computazionale di un programma, nel senso che fornisce il procedimento per giungere alla soluzione di un dato problema di calcolo • Algoritmo diverso da programma • programma è la codifica (in un linguaggio di programmazione) di un algoritmo • un algoritmo può essere visto come un programma distillato da dettagli riguardanti il linguaggio di programmazione, ambiente di sviluppo, sistema operativo • Algoritmo è un concetto autonomo da quello di programma

  11. Cosastudieremo? …ad analizzare e progettare “buoni” algoritmi …cheintendiamo per “buoni”? • Corretti:producono correttamente il risultato desiderato • Efficienti: usano poche risorse di calcolo, come tempo e memoria. algoritmi veloci!

  12. Cosa è (più) importanteoltrel’efficienza? • Alloraperchétantaenfasisull’efficienza? • Veloce è bello • A volte: o veloce o non funzionale • Legato alla User-friendliness • Efficienzapuòessereusata per “pagare” altrecaratteristiche • Correttezza • Semplicità • Mantenibilità • Stabilità • Modularità • Sicurezza • User-friendliness • …

  13. Altrimotivi per studiareglialgoritmi “L’algoritmica è l’anima dell’informatica." David Harel Le idee algoritmiche non solo trovano soluzioni a problemi ben posti, quanto costituiscono il linguaggio che porta ad esprimere chiaramente il problema soggiacente

  14. Altri motivi per studiare gli algoritmi importanzateorica “Se è vero che un problema non si capisce a fondo finché non lo si deve insegnare a qualcuno altro, a maggior ragione nulla è compreso in modo più approfondito di ciò che si deve insegnare ad una macchina, ovvero di ciò che va espresso tramite un algoritmo." Donald Knuth • In ogni algoritmo è possibile individuare due componenti fondamentali: • l’identificazione della appropriata tecnica di progetto algoritmico (basato sulla struttura del problema); • la chiara individuazione del nucleo matematico del problema stesso.

  15. Altri motivi per studiare gli algoritmi importanzapratica "There is a saying: If you want to be a good programmer, you just program every day for two years, you will be an excellent programmer. If you want to be a world-class programmer, you can program every day for ten years. Or you can program every day for two years and take an algorithms class." Charles E. Leiserson

  16. Altrimotivi per studiareglialgoritmi Potenzia le capacitàdi: • Critical Thinking: • un mododidecidere se un certoenunciato è semprevero, vero a volte, parzialmentevero, o falso • Problem Solving: • insieme dei processi atti ad analizzare, affrontare e risolvere positivamente problemi

  17. complessitàcomputazionale alcuniconcettidi cui non è sempre facile parlare algoritmo efficienza istanza modellodicalcolo problema dimensionedell’istanza casopeggiore correttezza

  18. un puzzle puòaiutare; ecconeunofamoso nmonetetutteidentiched’aspetto unadellemonete è falsa e pesa leggermentepiùdellealtre ho a disposizione solo una bilancia a due piatti obiettivo: individuare la monetafalsa (facendopochepesate)

  19. tornandoaiconcettifondamentali problema: individuareunamonetafalsafra n monete istanza: n specifichemonete; quellafalsa è unadiqueste; puòessere la “prima”, la “seconda”, ecc. dimensionedell’istanza: ilvaloren bilancia a due piatti. specificaquellochesipuò fare modellodicalcolo: algoritmo: strategiadipesatura. La descrizionedeveessere “comprensibile” e “compatta”. Devedescrivere la sequenzadioperazionisulmodellodicalcoloeseguite per unagenericaistanza correttezzadell’algoritmo: la strategiadipesaturadevefunzionare (individuare la monetafalsa) per unagenericaistanza, ovveroindipendentementedaquantemonetesono, e se la monetafalsa è la “prima”, la “seconda”, ecc.

  20. tornandoaiconcettifondamentali complessitàtemporale (dell’algoritmo): # dipesatecheesegue prima diindividuare la monetafalsa. Dipendedalladimensionedell’istanza e dall’istanzastessa. complessitàtemporalenelcasopeggiore: # massimodipesatecheeseguesuunaistanzadiunacertadimensione. E’ unadelimitazionesuperiore a quanto mi “costa” risolvereunagenericaistanza. Espressa come funzionedelladimensionedell’istanza. l’algoritmodeve fare pochepesate, deveesserecioèveloce. Ma velocerispetto a che? quandosipuò dire che un algoritmo è veloce? efficienza (dell’algoritmo):

  21. Alg1uso la prima moneta e la confronto con le altre n=7 3 2 6 4 5 7 1

  22. Alg1uso la prima moneta e la confronto con le altre n=7 3 2 6 4 5 7 1

  23. Alg1uso la prima moneta e la confronto con le altre n=7 3 2 6 4 5 7 1

  24. Alg1uso la prima moneta e la confronto con le altre n=7 3 2 6 4 5 7 1

  25. Alg1uso la prima moneta e la confronto con le altre n=7 3 2 6 4 5 7 1

  26. Alg1uso la prima moneta e la confronto con le altre trovata! n=7 3 2 6 4 5 7 1

  27. Alg1uso la prima moneta e la confronto con le altre n=7 3 2 6 4 5 7 1

  28. Alg1uso la prima moneta e la confronto con le altre trovata! n=7 3 2 6 4 5 7 1

  29. due parole sui costrutti: sequenziamento, condizionale, ciclo • Alg1 (X={x1, x2, …, xn}) • for i=2 to n do • if peso(x1) > peso(xi) then return x1 • if peso(x1) < peso(xi) then return xi Corretto? # pesate? sì! dipende! nelcasopeggiore? n-1 efficiente? …boh?! posso fare meglio? Oss: l’ultimapesata non serve n-2 pesate …mah!

  30. Alg2peso le monete a coppie n=7 3 2 6 4 5 7 1

  31. Alg2peso le monete a coppie n=7 3 2 6 4 5 7 1

  32. Alg2peso le monete a coppie n=7 3 2 6 4 5 7 1

  33. Alg2peso le monete a coppie trovata! n=7 3 2 6 4 5 7 1

  34. Alg2peso le monete a coppie n=7 3 2 6 4 5 7 1

  35. Alg2peso le monete a coppie n=7 3 2 6 4 5 7 1

  36. Alg2peso le monete a coppie n=7 3 2 6 4 5 7 1

  37. Alg2peso le monete a coppie trovata! n=7 3 2 6 4 5 7 1

  38. Alg2 (X={x1, x2, …, xn}) • k= n/2 • for i=1 to k do • if peso(x2i-1) > peso(x2i) then return x2i-1 • if peso(x2i-1) < peso(x2i) then return x2i • //ancora non ho trovato la monetafalsa; n è dispari //e mancaunamonetareturn xn Corretto? # pesate? sì! dipende! nelcasopeggiore? n/2 efficiente? …boh?! peròmeglio diAlg1  posso fare meglio?

  39. Alg3peso le monetedividendoleogni volte in due gruppi n=7 3 2 6 4 5 7 1

  40. Alg3peso le monetedividendoleogni volte in due gruppi n=7 3 2 6 4 5 7 1

  41. Alg3peso le monetedividendoleogni volte in due gruppi trovata! n=7 3 2 6 4 5 7 1

  42. Alg3peso le monetedividendoleogni volte in due gruppi n=10 3 2 6 9 4 5 7 8 10 1

  43. Alg3peso le monetedividendoleogni volte in due gruppi n=10 3 2 6 9 4 5 7 8 10 1

  44. Alg3peso le monetedividendoleogni volte in due gruppi n=10 3 2 6 9 4 5 7 8 10 1

  45. Alg3peso le monetedividendoleogni volte in due gruppi trovata! n=10 3 2 6 9 4 5 7 8 10 1

  46. Alg3(X) • if (|X|=1) then return unicamoneta in X • dividi X in due gruppi X1 e X2di (uguale) dimensione k = |X|/2 e se |X| è dispariunaulterioremoneta y • if peso(X1) = peso(X2) then return y • if peso(X1) > peso(X2) then return Alg3(X1) else return Alg3(X2) Corretto? sì! # pesatenelcasopeggiore? log2 n (daargomentare) efficiente? …boh?! peròmeglio diAlg2 

  47. Alg3: analisidellacomplessità P(n): # pesatecheAlg3eseguenelcasopeggioresuun’istanza didimensionen P(n)= P( n/2 ) + 1 P(1)=0 Oss.: P(x) è unafunzione non decrescente in x Oss.: vale (1/2)n/2   (1/2) n/2  n/4 P(n) = P(n/2) + 1 = P((1/2)n/2) + 2  P(n/4) + 2  P(n/8) + 3 quandon/2i  = 1?  P(n/2i ) + i per i= log2n   P(1) + log2n  = log2n 

  48. Unadomanda: quanto è piùveloceAlg3rispettoaglialtri? assunzione:ognipesatarichiede un minuto TABELLA posso fare megliodi Alg3?

  49. Alg4possodividere in tregruppiinvecedi due n=7 3 2 6 4 5 7 1

  50. Alg4possodividere in tregruppiinvecedi due n=7 3 2 6 4 5 7 1

More Related