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 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 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 mn, nr 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 n0 torna a 2 4. Produci in uscita il valore di m Luglio 2004 Algoritmi in pseudocodice begin read m,n repeat mm+1 nn-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 mm+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 n0! Algoritmi 7 Algoritmi che usano altri algoritmi prodotto (x,y) INIZIO x,y z0 yy-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