Se un qualunque problema può essere ben definito, allora con “sufficiente sforzo” può essere determinata una sua soluzione, o per lo meno si può dimostrare che non esiste soluzione David Hilbert (1862-1943): definire un sistema matematico formale in cui ogni problema potesse essere formulato in termini di proposizioni vere o false nel 1930 molti ricercatori mostrarono che il problema di Hilbert è non calcolabile Fondamenti di informatica 1 A.A. 2005/’06 Prof. V. de Nitto Personè 1 Nel 1931 Kurt Gödel dimostrò il teorema di incompletezza: non esiste nessun algoritmo il cui input è una proposizione sugli interi e il cui output ci dice se la proposizione è vera oppure falsa Church Kleene Post Turing … problemi che non hanno soluzione algoritmica Fondamenti di informatica 1 A.A. 2005/’06 Prof. V. de Nitto Personè 2 problemi calcolabili Universo dei problemi Fondamenti di informatica 1 A.A. 2005/’06 Prof. V. de Nitto Personè 3 - lo studio della calcolabilità ci porta a stabilire quali problemi ammettono soluzione algoritmica e quali no - tra quelli che ammettono soluzione, è di interesse sapere quante “risorse” di calcolo richiede la loro esecuzione memoria e tempo - solo quegli algoritmi la cui esecuzione richiede una quantità di risorse “ragionevole” sono realmente utili teoria della complessità Fondamenti di informatica 1 A.A. 2005/’06 Prof. V. de Nitto Personè 4 problemi calcolabili problemi trattabili Universo dei problemi Fondamenti di informatica 1 A.A. 2005/’06 Prof. V. de Nitto Personè 5 Pr1: determinare il maggiore di n numeri interi 1 2 3 4 … Fondamenti di informatica 1 A.A. 2005/’06 Prof. V. de Nitto Personè n 6 Pr1: determinare il maggiore di n numeri interi … 1 2 3 4 P1. trovare il maggiore fra i primi 2 numeri; n P2. trovare il maggiore fra il terzo numero e il risultato del sottoproblema precedente; P3. trovare il maggiore fra il quarto numero e il risultato del sottoproblema precedente; P4. trovare il maggiore fra il quinto numero e il risultato del sottoproblema precedente; … Pn-1. trovare il maggiore fra l'ultimo numero e il risultato del sottoproblema precedente. Fondamenti di informatica 1 A.A. 2005/’06 Prof. V. de Nitto Personè 7 1. I passi sono eseguiti uno alla volta 2. Ogni passo è eseguito esattamente una volta: nessuno è ripetuto nessuno è omesso 3. L'ordine in cui i passi sono eseguiti è esattamente quello in cui sono scritti 4. La terminazione dell'ultimo passo implica la terminazione dell'algoritmo Fondamenti di informatica 1 A.A. 2005/’06 Prof. V. de Nitto Personè 8 SEQUENZA 1. I passi sono eseguiti uno alla volta 2. Ogni passo è eseguito esattamente una volta: nessuno è ripetuto nessuno è omesso 3. L'ordine in cui i passi sono eseguiti è esattamente quello in cui sono scritti 4. La terminazione dell'ultimo passo implica la terminazione dell'algoritmo Poco flessibile! Fondamenti di informatica 1 A.A. 2005/’06 Prof. V. de Nitto Personè 9 Pr1: determinare il maggiore di n numeri interi … 1 2 3 4 P1. trovare il maggiore fra i primi 2 numeri; n P2. trovare il maggiore fra il terzo numero e il risultato del sottoproblema precedente; P3. trovare il maggiore fra il quarto numero e il risultato del sottoproblema precedente; P4. trovare il maggiore fra il quinto numero e il risultato del sottoproblema precedente; Pi. … i+1-esimo e il risultato del sottoproblema precedente; … Pn-1. trovare il maggiore fra l'ultimo numero e il risultato del sottoproblema precedente. Fondamenti di informatica 1 A.A. 2005/’06 Prof. V. de Nitto Personè 10 P1. trovare il maggiore fra i primi 2 numeri; P 3. trovare il maggiore fra il nuovo numero da esaminare e il più grande trovato in precedenza. Fondamenti di informatica 1 A.A. 2005/’06 Prof. V. de Nitto Personè 11 P1. trovare il maggiore fra i primi 2 numeri; P2. finchè ci sono numeri da verificare ripetere il passo P3; P 3. trovare il maggiore fra il nuovo numero da esaminare e il più grande trovato in precedenza. ITERAZIONE . poter ripetere certi passi in un algoritmo un numero arbitrario di volte . per esprimere algoritmi la cui lunghezza varia in accordo alle “circostanze” Fondamenti di informatica 1 A.A. 2005/’06 Prof. V. de Nitto Personè 12 P1. trovare il maggiore fra i primi 2 numeri; P2. finchè ci sonoCONDIZIONE numeri da verificare ripetere il passo P3; AZIONE P 3. trovare il maggiore fra il nuovo numero da esaminare e il più grande trovato in precedenza. ITERAZIONE . poter ripetere certi passi in un algoritmo un numero arbitrario di volte . per esprimere algoritmi la cui lunghezza varia in accordo alle “circostanze” definita indefinita descrivere un processo di durata indeterminata mediante un algoritmo di lunghezza finita Fondamenti di informatica 1 A.A. 2005/’06 Prof. V. de Nitto Personè 13 Pr2: determinare il maggiore fra due numeri interi x e y P1. determinare la differenza δ fra x e y P2. se δ >0 allora la soluzione è x altrimenti la soluzione è y. Fondamenti di informatica 1 A.A. 2005/’06 Prof. V. de Nitto Personè 14 Pr2: determinare il maggiore fra due numeri interi x e y P1. determinare la differenza δ fra x e y P2. se δcondizione >0 allora la soluzione azione1 è x altrimenti la soluzione azione2 è y. SELEZIONE . poter selezionare tra diversi cammini in un algoritmo a seconda delle “circostanze” Fondamenti di informatica 1 A.A. 2005/’06 Prof. V. de Nitto Personè 15 problema Fondamenti di informatica 1 A.A. 2005/’06 Prof. V. de Nitto Personè analisi soluzione informale formalizzazione algoritmo programmazione programma (alto livello) esecutore del linguaggio alto livello soluzione esecutore del linguaggio macchina esecuzione (HW) traduzione programma (linguaggio macchina) 16 a Methodology for Algorihmic Problem Solving (MAPS) Passo 1. Analizzare il problema e sviluppare le specifiche Passo 2. Progettare una soluzione - decomposizione (progettazione top-down) - astrazioni Passo 3. codifica e documentazione Passo 4. testing (in parallelo a passo 3) Passo 5. validazione Fondamenti di informatica 1 A.A. 2005/’06 Prof. V. de Nitto Personè 17