ALGORITMI
Luglio 2004
Luglio 2004
Algoritmi
1
L’algoritmo più antico
Algoritmo di Euclide
[Elementi, libro VII, proposizioni I e II, 330-320 a.C.]
Dati due interi positivi m e n, trovare il loro massimo
comune divisore, cioè il massimo intero positivo che
divide senza resto sia m che n
E1. [trovare il resto]:
dividere m per n e chiamare
r il resto
E2. [è zero?]:
se r=0 l’algoritmo termina e
n è la risposta
E3. [scambiare]:
porre mn, nr e tornare
indietro al passo E1
(1) m e n sono dati d’ingresso, presi dall’insieme degli
interi positivi
(2) n, dato d’uscita, è il massimo comune divisore dei
dati d’ingresso
(3) r decresce dopo ogni applicazione del passo E1, e
una sequenza decrescente di interi positivi deve
necessariamente finire con 0
(4)-(5) la divisione e il resto sono definiti matematicamente e sono eseguibili in un tempo finito
Luglio 2004
Algoritmi
2
Proprietà del MCD
(1) MCD(m,n) = MCD(n,m)
(2) se m = n allora MCD(m,n) = n = m
(3) se m > n e n = 0 allora MCD(m,0) = m
(4) se m > n e n > 0 allora
MCD(m,n) = MCD(m-n,n) = MCD(m-2*n,n) =
….. = MCD(m-q*n,n) = MCD(r,n) = MCD(n,r)
CONOSCENZE SUL PROBLEMA NECESSARIE A
COSTRUIRE l’ALGORITMO
E1. [trovare il resto]:
E2. [è zero?]:
E3. [scambiare]:
Luglio 2004
dividere m per n e chiamare
r il resto
se r=0 l’algoritmo termina e
n è la risposta
porre mn, nr e tornare
indietro al passo E1
Algoritmi
3
Il concetto di algoritmo
[Da Al-Kowarizmi, matematico arabo del IX
secolo]
• Algoritmo: metodo generale, astratto ed
effettivo di risoluzione di
problemi formulati
esplicitamente
• Generale: sommare 3+4 (particolare)
sommare x+y (generale, per
ogni coppia x,y)
• Astratto: indipendente dal metodo di
rappresentazione
• Effettivo: soddisfa condizioni di
definitezza ed eseguibilità
Formulazione esplicita/implicita di problemi
Luglio 2004
Algoritmi
4
Diverse rappresentazioni di uno
stesso algoritmo
Flowchart
INIZIO
input m,n
m m+1
n n - 1
falso n=0
vero
output m
in italiano
FINE
1. Acquisisci in ingresso
i valori di m,n
2. Incrementa m di 1
e decrementa n di 1
3. Se n0 torna a 2
4. Produci in uscita il
valore di m
Luglio 2004
Algoritmi
in pseudocodice
begin
read m,n
repeat
mm+1
nn-1
until n=0
write m
end
5
Effettività
Condizioni di definitezza ed eseguibilità di un
algoritmo:
(1) ha zero o più dati in ingresso
(quantità assegnate prima dell’inizio)
(2) ha uno o più dati d’uscita
(quantità ottenute alla fine, che hanno una
relazione specificata con gli ingressi)
(3) deve poter terminare dopo un numero
finito e discreto di passi
(4) ogni passo deve essere definito in modo
preciso e non ambiguo per ogni caso
possibile
(5) le azioni (operazioni) devono potere essere
eseguite da un esecutore, che le sa
interpretare, in una quantità finita di tempo
[una ricetta di cucina non è un algoritmo]
Luglio 2004
Algoritmi
6
Esecuzione e terminazione
somma (m,n)
INIZIO
m,n
mm+1
n n-1
n=0
falso
vero
m
inizio 3
1o giro 4
2o giro 5
Luglio 2004
n n=0
2
1 falso
0 vero
FINE
m n n=0
inizio
3 -1
1o giro 4 -2 falso
2o giro 5 -3 falso
……… … ….
n-esimo
falso
giro
non termina per n0!
Algoritmi
7
Algoritmi che usano altri algoritmi
prodotto (x,y)
INIZIO
x,y
z0
yy-1
z somma(z,x)
falso
y=0
vero
FINE
inizio
1o giro
2o giro
Luglio 2004
x y z
3 2 0
3 1 3
3 0 6
Algoritmi
somma (z,x)
y=0
somma (0,3)
somma (3,3)
falso
vero
8
Soluzione di problemi formulati
implicitamente
A deve determinare l'età dei tre figli di B
(1) B dice ad A che il prodotto delle età dei figli è 36
A chiede un altro dato
(2) B dice ad A la somma delle età dei figli
A chiede ancora un altro dato
(3) B dice ad A che il figlio maggiore suona il pianoforte
A dice a B l'età dei tre figli
Che età hanno i tre figli?
Ragionamento:
(1) triple il cui prodotto è 36
<1,1,36>
<1,4,9>
<2,3,6>
<1,2,18>
<1,6,6>
<3,3,4>
<1,3,12>
<2,2,9>
(2) somma delle triple precedenti
1+1+36=38
1+4+9=14
2+3+6=11
1+2+18=21
1+6+6=13
3+3+4=10
1+3+12=16
2+2+9=13
Poiché A chiede un altro dato, la somma è 13, in quanto ci
sono 2 triple con quella somma
(3) il pianoforte è irrilevante, l’informazione è che uno dei
3 figli è il maggiore: in 1+6+6 non c’è un maggiore,
mentre c’è in 2+2+9, che è la soluzione
Luglio 2004
Algoritmi
9
STORIA DEGLI ALGORITMI
Donald E. Knuth (1970) americano
“La teoria degli algoritmi… si occupa
principalmente della esistenza o non esistenza di
algoritmi effettivi per calcolare particolari
quantità… L’analisi degli algoritmi… è invece
intesa a significare la teoria delle proprietà di
particolari algoritmi per calcolatori.”
Edsger W. Dijkstra (1976) olandese
“Un algoritmo definito in modo formale consente
di farne oggetto di studio matematico e di poterlo
eseguire in modo automatico”
Niklaus Wirth (1977) svizzero
Algoritmi trattati con sistemi multiprocessore.
Luglio 2004
Algoritmi
10
Agente segreto
L’agente segreto 89 sta cercando di scoprire tra quanti giorni
un certo leader mondiale sarà assassinato.
Il suo contatto gli dice che questa informazione si trova
disseminata in una serie di 10 scatole dell’ufficio postale,
per evitare che altri ne vengano a conoscenza, e gli dà 10
chiavi, con le seguenti istruzioni:
1. l’informazione in ogni scatola è scritta in codice;
2. aprire prima la scatola 1 ed eseguire l’istruzione che vi
si trova;
3. continuare attraverso le altre scatole in sequenza, a
meno che le istruzioni non indichino diversamente;
4. una delle scatole è predisposta per esplodere se aperta .
L’agente 89 prende le 10 chiavi e va all’ufficio postale, con il
libro del codice in mano.
Luglio 2004
Algoritmi
11
Agente segreto
1) Somma il numero contenuto
nella scatola 9) al tuo numero di
agente segreto
3) Sottrai il numero contenuto nella
scatola 8)
5) Sottrai 13 dal risultato
precedente
7)
9)
BOMBA!!!!!!
11
2) Dividi il risultato precedente per il
numero contenuto della scatola 10)
4) Se il risultato precedente non è
uguale a 30, passa alla scatola 7),
altrimenti continua con la prossima
scatola
6) STOP – ora hai la risposta
8)
20
10)
2
• Scatole postali : memoria,
contenente istruzioni- scatole da 1) a 6)
e dati - scatole da 8) a 10)
• I numeri delle scatole sono indirizzi di memoria
• Nelle scatole da 1) a 6) ci sono tre classi di istruzioni;
in 1), 2), 3) e 5) istruzioni che riguardano operazioni
aritmetiche
in 4) un’istruzione di decisione, che dipende dal
risultato della precedente istruzione
aritmetica
in 6) istruzione di controllo (STOP) che non richiede
dati nè rimanda ad altri indirizzi
Luglio 2004
Algoritmi
12
Le istruzioni
• di lettura
• di scrittura
• di assegnamento
• di controllo
sono presenti in tutti i linguaggi
per esprimere algoritmi
Luglio 2004
Algoritmi
13
Istruzioni di lettura
LEGGI a, b, c
Assegna alle variabili di nome a, b, c
i valori forniti dall’esterno, nell’ordine
11
a
b
3
c
2
LEGGI I VALORI DI a, b, c
2
a
3
b
11
11
3
c
2
Luglio 2004
Algoritmi
14
Istruzioni di scrittura
STAMPA x1, x2
Stampa i valori delle variabili
di nome x1 e x2
STAMPA “nessuna soluzione”
Stampa (senza alcuna elaborazione)
la sequenza di caratteri
contenuta tra virgolette
Luglio 2004
Algoritmi
15
Variabili e assegnamenti
Una variabile:
• ha un nome
• denota un valore
Istruzione di Assegnamento
Esempio:
A  B + C
calcola il valore dell’espressione B + C
(sommando il valore della variabile B
con il valore della variabile C)
e lo assegna come (nuovo) valore
della variabile A
•
il valore di A viene modificato
•
i valori di B e C sono usati,
ma non modificati
Luglio 2004
Algoritmi
16
Esempio di assegnamento
X  X+1
prima della esecuzione
2
X
dopo l’esecuzione
3
X
Luglio 2004
Algoritmi
17