27 novembre 2013 23. Computabilità Scaletta Cenni di computabilità Stefano Mizzaro Dipartimento di matematica e informatica Università di Udine http://www.dimi.uniud.it/mizzaro/ [email protected] Programmazione, lezione 23 27 novembre 2013 Problemi, domande, risposte Algoritmi, programmi, linguaggi di programmazione Algoritmi che calcolano funzioni Funzioni computabili e non Stefano Mizzaro - Computabilità Cosa fa un programma? Qual è la radice quadrata di 2345? Qual è il massimo comun divisore di 234 e 36? Problema = insieme di domande omogenee Esempi: Fornisce risposte a una classe di domande Definizioni (1/2) Fornisce risposte a domande Programma per calcolare la radice quadrata di un numero Esempi: 3 sqrt(36) P2 (mcd(X,Y)) mcd(12,4) mcd(36,5) P3 (…) Stefano Mizzaro - Computabilità Stefano Mizzaro 4 Definizioni (2/2) Tutti i problemi sqrt(12) I1 = Quanto vale sqrt(341)? I2 = Quanto vale mcd(48,36)? Stefano Mizzaro - Computabilità Problemi e domande P1 (sqrt(N)) P1 = Calcolare sqrt(n) P2 = Calcolare mcd(x,y) Domanda (“istanza di un problema”) Risolve problemi Stefano Mizzaro - Computabilità 2 5 Risposta (a una domanda) = “soluzione di un’istanza” Soluzione di un problema = metodo generale che permette di fornire in modo uniforme la risposta a tutte le istanze di un problema = Algoritmo risolvente Stefano Mizzaro - Computabilità 6 1 27 novembre 2013 23. Computabilità Algoritmi e programmi Algoritmo Problemi e algoritmi Tutti i problemi P1 (sqrt(N)) sqrt(12) P2 (mcd(X,Y)) sqrt(36) mcd(12,4) mcd(36,5) P3 (…) “Metodo”, “procedimento”, “sequenza di passi” Astratto Non si può toccare/vedere Programma Tutti gli algoritmi Rappresentazione precisa di un algoritmo in un certo linguaggio di programmazione Per eseguire/comunicare un algoritmo bisogna rappresentarlo!! Stefano Mizzaro - Computabilità a11 7 8 Problemi, algoritmi, programmi A2 (alg. per P2) … Tutti i programmi Progr. per a12 A3 (…) Progr. per a22 a22 a21 A2 (alg. per P2) mcd(36,5) Tutti gli algoritmi a12 a11 Progr. per a22 A1 (alg. per P1) Tutti i programmi Progr. per a12 P3 (…) Tutti i problemi A3 (…) P2 (mcd(X,Y)) a22 mcd(12,4) a21 sqrt(36) a12 sqrt(12) a11 a22 a21 Stefano Mizzaro - Computabilità Tutti gli algoritmi A1 (alg. per P1) A2 (alg. per P2) a12 A3 (…) P1 (sqrt(N)) Algoritmi e programmi A1 (alg. per P1) … Stefano Mizzaro - Computabilità 9 Il calcolatore Stefano Mizzaro - Computabilità 10 Calcolatore, programma e dati Problema È un: Esecutore di algoritmi rappresentati da programmi mediante un linguaggio di programmazione Algoritmo Istanza Esecutore universale di algoritmi Un algoritmo va eseguito su dati Programma Es.: calcola sqrt(897) Dati Stefano Mizzaro - Computabilità Stefano Mizzaro 11 Stefano Mizzaro - Computabilità Calcolatore Risultati 12 2 27 novembre 2013 23. Computabilità Finitezza, univocità, effettività Curiosità legittime… Un programma/algoritmo deve essere: Finito (# finito di istruzioni) if (x == 0) return 1; else if (x == 1) return else if (x == 2) return else if (x == 3) return else if (x == 4) return ... 2; 3; 4; 5; Univoco, non ambiguo (x = x + “un po’”) Effettivo: deve esistere un calcolatore in grado di eseguire le istruzioni Ma con gli algoritmi si può fare tutto? E se no, che cos’è che si può fare? prossimaVincitaAlLotto() Stefano Mizzaro - Computabilità 13 Per quali problemi esiste un algoritmo risolvente? E quello che si può fare dipende dal linguaggio di programmazione scelto? A queste domande risponde la teoria della computabilità (calcolabilità) Approccio formale, matematico, preciso Domande ancora poco precise, servono un paio di altre definizioni Stefano Mizzaro - Computabilità Funzioni 4• f f • •9 • • d dominio c• • 64 5• f b• Domini e codomini 3• Funzione = legge che associa a un elemento di un insieme (dominio) un elemento di un insieme (codominio) a• 14 3• 2• codominio • e • 5 • 1• codominio dominio Stefano Mizzaro - Computabilità 15 Stefano Mizzaro - Computabilità Algoritmi calcolano funzioni Quali funzioni? Algoritmo per calcolare la radice quadrata calcola la funzione che associa a un numero la sua radice quadrata Algoritmo di Euclide calcola la funzione che dati 2 numeri restituisce il loro MCD Sembra riduttivo, ma Stefano Mizzaro Funzioni f: R → R: analisi matematica La teoria della computabilità si occupa delle funzioni f: N → N Parziali Ad esempio programma con un ciclo infinito che non dà nessun output Funzione “non definita” … codifica… Stefano Mizzaro - Computabilità 16 17 Stefano Mizzaro - Computabilità 18 3 27 novembre 2013 23. Computabilità Le funzioni f: N → N Curiosità legittime… f: N → N f1 • f3 • f2 f4 • • Def.: Funzione calcolabile (computabile) = funzione per cui esiste un algoritmo che la calcola Ora, finalmente, possiamo porci una domanda precisa: Le funzioni f: N → N sono tutte calcolabili? Data una qualsiasi funzione, esiste sempre un algoritmo che la calcola? Stefano Mizzaro - Computabilità 19 Stefano Mizzaro - Computabilità No! Funzioni calcolabili e non Il problema della terminazione (Halting problem) Funzioni calcolabili f2 • f3 • f4 • 21 Dati di ingresso D Calcolatore Termina / Non termina Stefano Mizzaro - Computabilità Stefano Mizzaro 23 22 Una soluzione? Descrizione di un algoritmo Ai CiaoATutti termina while(true) non termina Stefano Mizzaro - Computabilità Il problema della terminazione Algoritmo A? Trovare un algoritmo A in grado di dirci se un qualsiasi algoritmo Ai su dati D termina. (un algoritmo potrebbe non terminare perché entra in un ciclo infinito) Funzioni non calcolabili Stefano Mizzaro - Computabilità 20 No? Voglio un esempio… f: N → N f1 • MCD: ok. Somma: ok. Radice quadrata:…ok. Ma in generale? Beh, potrei far eseguire Ai sui dati e attendere Se termina so che termina Se dopo 2 ore non ha terminato… so che non ha terminato in due ore… ma quanto devo aspettare?! Non va! Teorema: A non esiste Stefano Mizzaro - Computabilità 24 4 27 novembre 2013 23. Computabilità Funzioni calcolabili f3 [...] ... f2 [mcd(X,Y)] f2 (21,63) f2 (135,207) Stefano Mizzaro - Computabilità Programmi per l'algoritmo di Euclide … Tutti i programmi Progr. per a12 A3 (…) Progr. per a22 a22 a21 a12 Tutti gli algoritmi Ufficio / Calcolatore Impiegato / Processore Diagramma di flusso / Programma Programmi per l'algoritmo a11 ... 27 Stefano Mizzaro - Computabilità 28 Riassunto del corso Introduzione alla programmazione Programmazione strutturata Accento sulla qualità Stefano Mizzaro mcd(36,5) http://www.dimi.uniud.it/mizzaro/research/ papers/algoritmo.pdf Capp. 3 e 4 Sostituite: Programmi per l'algoritmo a12 ... Tutti i programmi Problemi, domande, risposte Algoritmi, programmi, linguaggi di programmazione Algoritmi che calcolano funzioni Funzioni computabili e non Stefano Mizzaro - Computabilità 26 Riferimenti Riassunto mcd(12,4) Stefano Mizzaro - Computabilità ... a11 Tutti gli algoritmi A1: gli algoritmi per P1 a12 144 A3: gli ... algoritmi per P3 A2: gli algoritmi per P2 (Euclide) f1 (144) f1 [ N ] f1 (27) ... mcd(135,207) 27 P2(mcd(X,Y)) mcd(21,63) Problemi, algoritmi e programmi 2 P3(...) 5 P1( N ) 25 f1 (5) Funzioni calcolabili f: N → N Stefano Mizzaro - Computabilità Tutti i problemi f4 Funzioni non calcolabili Problemi risolubili Tutti i problemi risolubili f3 a11 f2 A1 (alg. per P1) f1 Problemi non risolubili P3 (…) f: N --> N sqrt(36) P4 sqrt(12) P2 Tutti i problemi P3 P1 P1 (sqrt(N)) Problemi A2 (alg. per P2) Problemi, algoritmi, programmi P2 (mcd(X,Y)) Funzioni non calcolabili e problemi non risolubili 29 Con il linguaggio Java Non variabili inutili, lunghezza del codice, programmi leggibili, non cicli inutili, … TDA, OO, API Cenni computabilità Stefano Mizzaro - Computabilità 30 5 27 novembre 2013 23. Computabilità 1. La programmazione strutturata (22h) L’ABC della programmazione: 2. Tipi di dati astratti, occultamento delle informazioni (4h) Espressioni Strutture di controllo Sviluppo incrementale Array Metodi Ricorsione Presenti in ogni linguaggio di programmazione Stefano Mizzaro - Computabilità 31 Come fare programmi più grandi e complicati… …e comunque modificabili, estendibili, comprensibili, … Tipi di dati astratti, occultamento delle informazioni Concetti e realizzazione in Java Verso l’OO (“Object Oriented”) Stefano Mizzaro - Computabilità 3. I fondamenti della programmazione OO (10h) 4. Le API del Java (10h) Evoluzione dai TDA: oggetti, classi, istanze, scambio messaggi Eredità Polimorfismo La programmazione OO in Java Classi astratte Interfacce Package Stefano Mizzaro - Computabilità 32 Application Programming Interface “Librerie” Il programmatore di oggi deve conoscere anche le API Introduzione, cenni: 33 File, stringhe, utilità, … Interfacce utente grafiche Applet Stefano Mizzaro - Computabilità 34 5. Teorie della computabilità e della complessità (cenni, 2h) Teoria matematiche (teoremi!) Computabilità Cos’è un programma? “Cosa può fare un programma”? È possibile scrivere un programma che …? Ci sono linguaggi di programmazione più “potenti” di altri? Cosa vuol dire “più potente”? Complessità Dato un problema, ci sono programmi più efficienti di altri per risolverlo? (più veloci, che usano meno risorse, …) Stefano Mizzaro - Computabilità Stefano Mizzaro 35 6