Algoritmi e Strutture dati - Dipartimento di Matematica Tor Vergata

Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Algoritmi e Strutture Dati con
Laboratorio
(Modulo I)
Luciano Gualà
[email protected]
http://www.mat.uniroma2.it/~guala/
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
int InC(int a[], int n){
public static int InJava (int[] a){
int i, max;
int max=a[0];
max = a[0];
for (int i = 1; i < a.length; i++)
for (i = 1; i < n; i++)
if (a[i] > max) max = a[i];
if (a[i] > max) {
return max;
max = a[i];
}
return max;
function InPascal(var A: array[1…Nmax] of integer): integer;
}
var k, max: integer;
begin
max:=A[1];
for k:= 2 to n do
begin
if A[k]>max then max:=A[k];
end;
InPascal:=max;
end;
2
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
…un possibile pseudo-codice…
Input: Sequenza di n numeri: <a1,a2,…, an>
Output: valore massimo della sequenza
max=a1
per ogni i=2,…, n
se (ai > max) allora aggiorna max= ai
restituisci max
3
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Algoritmi e programmi
• Un algoritmo è 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 è un programma distillato da dettagli riguardanti il
linguaggio di programmazione, ambiente di sviluppo, sistema
operativo
4
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Definizione informale di algoritmo
Insieme di istruzioni, definite passo per passo, in
modo da poter essere eseguite meccanicamente e
tali da produrre un determinato risultato
5
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
etimologia
Il termine Algoritmo deriva da Algorismus,
traslitterazione latina del nome di un
matematico persiano del IX secolo,
Muhammad al-Khwarizmi, che descrisse
delle procedure per i calcoli matematici
6
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Definizione di algoritmo
Sequenza di passi ben definita che risolve un
problema computazionale
La definizione del problema specifica in termini
generali la relazione di input/output desiderata
7
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Problema: ricerca del minimo fra n numeri
• Input: una sequenza di n numeri A=<a1,a2,…,an>
• Output: un numero ai tale che ai  aj j=1,…,n
(stabilisce una relazione tra input e outut)
Algoritmo (descrive procedura computazionale per
realizzare tale relazione)
Minimo (A)
1.
min= a1
2.
for j=2 to n do
3.
4.
8
if (aj < min) then min=aj
return min
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Strutture dati
– Concetto di algoritmo è inscindibile da quello di dato
– Un algoritmo è una procedura che prende dei dati
(input) e, dopo averli elaborati, li restituisce (output)
– I dati devo essere organizzati e strutturati in modo tale
che la procedura che li elabora sia “efficiente”
9
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Cosa impareremo?
…ad analizzare e progettare “buoni” algoritmi
…che intendiamo per “buoni”?
10
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Due concetti fondamentali:
Correttezza ed efficienza
Vogliamo progettare algoritmi che:
– Producano correttamente il risultato
desiderato
– Siano efficienti in termini di tempo di
esecuzione ed occupazione di memoria
11
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Analisi di algoritmi
Correttezza:
– dimostrare formalmente che un algoritmo è corretto
– non è sempre facile
– Un algoritmo può essere complesso e/o non intuitivo
(ai fini dell’efficienza)
Complessità:
– Stimare la quantità di risorse (tempo e memoria)
necessarie all’algoritmo
– Misurata in complessità asintotica
– Non sempre è facile campire quale è la complessità di
un algoritmo (es: algoritmi ricorsivi)
12
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Analisi della complessità
– stimare tempo e memoria necessari
– stimare il più grande input gestibile in
tempi ragionevoli
– confrontare due algoritmi diversi
– ottimizzare le parti “critiche”
13
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Un’altra cosa che impareremo
a fare (un po’):
…analizzare problemi (computazionali)
…cosa intendiamo con analizzare un problema?
14
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Formalizzazione di un problema
• Trovare un modello formale/matematico che
descrive in modo non ambiguo il problema e renda
esplicita la relazione fra input ed output
• Qualche volta piuttosto difficile
• Perché formalizzare?
– aiuta a comprendere meglio il problema
– una formalizzazione può suggerire un approccio
risolutivo (possibilmente efficiente) per il problema
15
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Formalizzazione: un esempio
• Vogliamo progettare un algoritmo che aiuti
la segretaria di dipartimento ad assegnare i
corsi ai docenti (lei quando lo fa a mano
impiega troppo tempo).
• C’è un insieme di docenti, a ognuno dei
quali deve essere assegnato un solo corso
(magari!). Un docente sa insegnare solo
alcuni corsi.
16
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Una possibile formalizzazione:
matching su grafi bipartiti
docenti
d1
d2
d3
d4
d5
Grafo bipartito
nodi: docenti + corsi
archi: (di,cj) se
di sa insegnare cj
c1
c2
c3
corsi
c4
c5
Trovare insieme di archi che “coprono” tutti i corsi tale che
due archi non incidono su uno stesso nodo
17
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Formalizzazione: un altro esempio
• Vogliamo progettare un algoritmo per un
correttore ortografico di testi che, data una
parola, controlla se essa è scritta bene e in
caso di errore suggerisce una possibile
correzione
18
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Una possibile formalizzazione
•
•
•
•
•
Manteniamo un insieme D di parole dove
D è il nostro dizionario (di parole corrette)
Una parola x è corretta se x  D
Definiamo un concetto di distanza tra parole
Se x non è in D, cerco una parola y in D che
minimizza la distanza da x
• Osservazioni:
– Distanza fra due parole x e y deve essere piccola
quando x e y sono “simili”
– Distanza fra due parole deve poter essere calcolata
(efficientemente)
19
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Analisi di un problema: scoprire
proprietà utili
• Scoprire proprietà strutturali di un problema
in modo da trarne vantaggio nella
progettazione di un algoritmo efficiente
20
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Ragionare sulla complessità di un
problema
• Ho progettato un algoritmo per un dato
problema che usa una certa quantità di
risorse di tempo e spazio
• Posso fare meglio?
• Quanto posso sperare di abbassare la mia
complessità?
21
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Prerequisiti del corso
Cosa è necessario sapere…
–
–
–
–
22
programmazione di base
strutture dati elementari
concetto di ricorsione
dimostrazione per induzione e calcolo
infinitesimale
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
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
23
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Argomenti (Modulo I)
•
•
•
•
•
•
•
•
•
•
24
Introduzione informale agli algoritmi
Modelli di calcolo e metodoligie di analisi
Strutture dati elementari
Algoritmi di ordinamento
Algortmi di vistita di alberi
Algoritmi su stringhe
Alberi binari di ricerca
Alberi bilanciati (AVL)
Code con priorità
…???...
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Informazioni utili
• Orario lezioni
– Martedì: 15,00 – 17,00
– Giovedì: 11,00 – 13,00
• Orario ricevimento
– Martedì: 11,15 – 12,45
– Ufficio: dip. di matematica, piano 0, corridoio B0,
stanza 206
25
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Libro di testo
C. Demetrescu, I. Finocchi, G. Italiano
Algoritmi e Strutture dati (sec. ed.)
McGraw-Hill
Slide e materiale didattico
http://www.mat.uniroma2.it/~guala/
26
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
…altri testi utili…
T.H. Cormen, C.E. Leiserson, R.L. Rivest, C. Stein
Introduzione agli algortimi e strutture dati
McGraw-Hill
P. Crescenzi, G. Gambosi, R. Grossi
Strutture di dati e algoritmi
Addison-Wesley
A. Bertossi, A. Montresor
Algoritmi e strutture di dati
Città Studi
27
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Modalità d’esame
• L’esame consiste in una prova scritta e una prova
orale
• Quattro appelli
– 2 giugno/luglio
– 1 settembre
– 1 gennaio/febbraio
• Prova parziale a febbraio
• Per sostenere l’esame è obbligatorio prenotarsi
online (una settimana prima) su delphi.uniroma2.it
28
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Buon inizio anno
29
Copyright © 2004 - The McGraw - Hill Companies, srl