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

Loading in 2 Seconds...

play fullscreen
1 / 61

Algoritmi e Strutture Dati - PowerPoint PPT Presentation


  • 146 Views
  • Uploaded on

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 )

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Algoritmi e Strutture Dati' - xarles


Download Now 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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
algoritmi e strutture dati

Algoritmi e StruttureDati

LucianoGualà

guala@mat.uniroma2.it

www.mat.uniroma2.it/~guala

informazioni utili
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
struttura del corso
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
prerequisiti del corso
Prerequisiti del corso

Cosa è necessariosapere…

  • programmazionedi base
  • strutturedatielementari
  • concettodiricorsione
  • dimostrazione per induzione e calcoloinfinitesimale

Propedeuticità

  • programmazione
  • analisimatematica
  • matematicadiscreta
libri di testo

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

modalit d esame
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
qualche consiglio
Qualcheconsiglio:
  • Lavorare sui problemi assegnati in gruppo
  • Scrivere/formalizzare la soluzione individualmente
algoritmo
Algoritmo

Procedimentochedescriveunasequenzadipassibendefinitifinalizzato a risolvere un datoproblema (computazionale).

etimologia
etimologia

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

slide10

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
cosa studieremo
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!

cosa pi importante oltre l efficienza
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
altri motivi per studiare gli algoritmi
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

importanza teorica

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.
slide15

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

altri motivi per studiare gli algoritmi1
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
alcuni concetti di cui non sempre facile parlare

complessitàcomputazionale

alcuniconcettidi cui non è sempre facile parlare

algoritmo

efficienza

istanza

modellodicalcolo

problema

dimensionedell’istanza

casopeggiore

correttezza

un puzzle pu aiutare eccone uno famoso
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)

tornando ai concetti fondamentali
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.

tornando ai concetti fondamentali1
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):

slide29

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!

slide33

Alg2peso le monete a coppie

trovata!

n=7

3

2

6

4

5

7

1

slide37

Alg2peso le monete a coppie

trovata!

n=7

3

2

6

4

5

7

1

slide38

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?

slide46

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

alg3 analisi della complessit
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 

slide48

Unadomanda: quanto è piùveloceAlg3rispettoaglialtri?

assunzione:ognipesatarichiede un minuto

TABELLA

posso fare megliodi Alg3?

slide55

Alg4 (X)

  • if (|X|=1) then return unicamoneta in X
  • dividi X in tregruppi X1, X2, X3didimensionebilanciatasiano X1 e X2igruppichehanno la stessadimensione (cisonosempre)
  • if peso(X1) = peso(X2) then return Alg4(X3)
  • if peso(X1) > peso(X2) then return Alg4(X1) else return Alg4(X2)

Corretto?

sì!

# pesatenelcasopeggiore?

log3 n

(daargomentare)

efficiente?

…boh?!

peròmeglio

diAlg3

alg4 analisi della complessit
Alg4: analisidellacomplessità

P(n): # pesatecheAlg4eseguenelcasopeggioresuun’istanza

didimensionen

P(n)= P( n/3 ) + 1 P(1)=0

Oss.: P(x) è unafunzione non decrescente in x

siakilpiù piccolo intero tale che 3knn’=3k

k intero

k log3nk=log3n

P(n)  P(n’)

=k=log3n

P(n’)

= P(n’/3) + 1

= P(n’/9) + 2

= P(n’/3i) + i

per i=k

= P(1) + k =k

slide57

…torniamoallatabella: quanto è piùveloce Alg4 rispettoaglialtri?

assunzione:ognipesatarichiede un minuto

TABELLA

posso fare megliodi Alg4?

slide59

Teorema

Un qualsiasialgoritmochecorrettamenteindividua la monetafalsafranmonetedeveeffettuarenelcasopeggiorealmenolog3npesate.

la dimostrazioneusaargomentazionimatematiche per mostrareche un genericoalgoritmo se è correttodeveaverealmenounacertacomplessitàtemporalenelcasopeggiore.

dimostrazioneelegante e non banalecheusa la tecnicadell’alberodidecisionedi un problema (chevedremoduranteilcorso)

Corollario

Alg4 è un algoritmoottimo per ilproblema.

slide60

Esercizio

Si devonocuocerenfrittelle. Si ha a disposizioneunapadellacheriesce a contenere due frittelleallavolta. Ognifrittellava cotta sututte e due ilati e ognilatorichiede un minuto.

Progettare un algoritmochefrigge le frittellenelminor tempo possibile. Si argomenti, se possibile, sullaottimalitàdell’algoritmoproposto.