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
Informazioni utili
• Orario lezioni
– Lunedì: 12,00 – 14,00
– mercoledì: 9,00 – 11,00
• Orario ricevimento
– mercoledì: 11,15 – 12,45
– Ufficio: dip. di matematica, piano 0, corridoio B0,
stanza 206
2
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
3
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Prerequisiti del corso
Cosa è necessario sapere…
–
–
–
–
4
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
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/
5
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
…altri testi utili…
P. Crescenzi, G. Gambosi, R. Grossi, G. Rossi
Strutture di dati e algoritmi
Pearson
T.H. Cormen, C.E. Leiserson, R.L. Rivest, C. Stein
Introduzione agli algortimi e strutture dati
McGraw-Hill
A. Bertossi, A. Montresor
Algoritmi e strutture di dati
Città Studi
J. Kleinberg, E. Tardos
Algorithm Design
Addison Wesley
6
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Qualche consiglio:
• Lavorare sui problemi assegnati in gruppo
• Scrivere/formalizzare la soluzione
individualmente
7
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
8
Copyright © 2004 - The McGraw - Hill Companies, srl
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;
9
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
10
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
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
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
12
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 alKhwarizmi, che descrisse delle
procedure per i calcoli
matematici
13
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Algoritmo vs Problema
Sequenza di passi ben definita che risolve un
problema computazionale
La definizione del problema specifica in termini
generali la relazione di input/output desiderata
14
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.
15
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”
16
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
un esempio
MCCXIV *
XXI =
??????

1214 *
21 =
1214
2428
25494
!!!!!!!

17
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”?
– Producano correttamente il risultato
desiderato (correttezza)
– Siano efficienti in termini di tempo di
esecuzione ed occupazione di memoria
(efficienza)
18
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Analisi di algoritmi
Studio teorico del comportamento, delle proprietà e
dell’uso delle risorse di un algoritmo.
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)
19
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Cosa è (più) importante oltre l’efficienza?
•
•
•
•
•
•
•
•
Correttezza
Semplicità
Mantenibilità
Stabilità
Modularità
Sicurezza
User-friendliness
…
20
Allora perché tanta enfasi
sull’efficienza?
• Veloce è bello
• A volte: o veloce o non funzionale
• Legato alla User-friendliness
• Efficienza può essere usata per
“pagare” altre caratteristiche
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Altri motivi per studiare gli algoritmi
"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
21
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Altri motivi per studiare gli algoritmi
“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 ua
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.
22
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Altri motivi per studiare gli algoritmi
“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
23
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Altri motivi per studiare gli algoritmi
Potenzia le capacità di:
• Critical Thinking:
– un modo di decidere se un certo
enunciato è sempre vero, vero a volte,
parzialmente vero, o falso
• Problem Solving:
– insieme dei processi atti ad analizzare,
affrontare e risolvere positivamente
problemi
24
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?
25
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
26
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à?
27
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.
28
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
29
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
30
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)
31
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Trovare il cammino più breve
32
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Una possibile formalizzazione:
cammino minimo su un grafo pesato
sorgente
10
2
3
9
s
18
6
6
2
6
30
15
11
5
8
16
20
7
44
19
4
6
t
Grafo pesato
nodi: incroci
archi: strade e distanze
destinazione
Trovare un cammino (diretto) da s a t che minimizza la somma dei
pesi degli archi
33
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Formalizzazione: un altro esempio
• Due robot telecomandabili R1 e
R2 sono posizionati sui nodi s1 e
s2 di un grafo G
• Vogliamo spostare R1 e R2 in t1
e t2, rispettivamente
• Possiamo spostarli uno alla volta
seguendo gli archi di G
• Vincolo: i due robot non devono
mai essere a distanza (minimo
numero di archi che li separa) ≤ r
(per evitare interferenze di
segnale)
• Goal: trovare una sequenza
minima di mosse valida
34
t2
r=1
s1
s2
t1
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Formalizzazione: un altro esempio
• Idea: costruire un grafo delle
“configurazioni” su cui cercare la
sequenza di mosse
• Costruiamo un nuovo grafo H
• Nodi di H: coppie {i,j} di nodi di G
tali che i e j sono a distanza > r
• Archi di G: c’è un arco fra {i,j} e
{k,j} se c’è un arco in G fra i e k
• Trova un cammino minimo in H da
{s1,s2} a {t1,t2}
35
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Un problema da $ 1,000,000
Trovare un algoritmo efficiente per il seguente problema:
Dato un grafo G (non diretto e non pesato) e due nodi s e t,
trovare il cammino (semplice) più lungo fra s e t
s
36
s
t
t
Copyright © 2004 - The McGraw - Hill Companies, srl
Algoritmi e strutture dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano
Buon inizio anno
37
Copyright © 2004 - The McGraw - Hill Companies, srl