ALGORITMI Luglio 2004 Luglio 2004 Algoritmi
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 mn, nr 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 matematica-mente e sono eseguibili in un tempo finito Luglio 2004 Algoritmi
CONOSCENZE SUL PROBLEMA NECESSARIE A COSTRUIRE l’ALGORITMO 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]: dividere m per n e chiamare r il resto E2. [è zero?]: se r=0 l’algoritmo termina e n è la risposta E3. [scambiare]: porre mn, nr e tornare indietro al passo E1 Luglio 2004 Algoritmi
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
Diverse rappresentazioni di uno stesso algoritmo Flowchart INIZIO input m,n m m+1 n n - 1 n=0 vero output m in italiano in pseudocodice 1. Acquisisci in ingresso begin i valori di m,n read m,n 2. Incrementa m di 1 repeat e decrementa n di 1 mm+1 3. Se n0 torna a 2 nn-1 4. Produci in uscita il until n=0 valore di m write m end falso FINE Luglio 2004 Algoritmi
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
Esecuzione e terminazione somma (m,n) INIZIO m,n n=0 m n n=0 m n n=0 inizio 3 2 inizio 3 -1 1o giro 4 1 falso 1o giro 4 -2 falso 2o giro 5 0 vero 2o giro 5 -3 falso ……… … …. n-esimo falso giro non termina per n0! mm+1 n n-1 falso vero FINE Luglio 2004 Algoritmi
Algoritmi che usano altri algoritmi prodotto (x,y) INIZIO x,y yy-1 z somma(z,x) y=0 vero FINE x y z somma (z,x) y=0 inizio 3 2 0 1o giro 3 1 3 somma (0,3) falso 2o giro 3 0 6 somma (3,3) vero z0 falso Luglio 2004 Algoritmi
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
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
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
Agente segreto 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
Le istruzioni di lettura di scrittura di assegnamento di controllo sono presenti in tutti i linguaggi per esprimere algoritmi Luglio 2004 Algoritmi
Istruzioni di lettura LEGGI a, b, c Assegna alle variabili di nome a, b, c i valori forniti dall’esterno, nell’ordine LEGGI I VALORI DI a, b, c 11 a b c 3 2 11 a 2 b 3 c 11 3 2 Luglio 2004 Algoritmi
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
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
Esempio di assegnamento X X + 1 prima della esecuzione dopo l’esecuzione X 2 X 3 Luglio 2004 Algoritmi