Algoritmi e Complessità Università di Camerino Corso di Laurea in Informatica (tecnologie informatiche) III periodo didattico Docente: Emanuela Merelli Email:[email protected] Lezione 1 Teoria della computabilità Argomento: Il concetto di algoritmo nel contesto della Teoria della Computabilità Obiettivo conoscitivo: saper identificare i requisiti di ogni definizione di algoritmo, consapevolezza della non-esistenza di algoritmi per tutte le funzioni Teoria della computabilità • La teoria della computabilità tratta della definizione formale del concetto di calcolo meccanico. • Alcuni importanti formalismi che hanno storicamente condizionato la teoria e l’applicazione dei calcolatori sono: – Le macchine di Turing – Gli schemi ricorsivi di Kleene e McCarthy – I sistemi di Post a.a. 2002-03 e.merelli 3 Teoria della computabilità cont. • Uno dei principali risultati della teoria della computabilità è la completa identità delle classi di problemi risolubili nei diversi formalismi. • Oggi si ritiene che ogni procedimento di calcolo, purché completamente specificato, sia traducibile in uno qualsiasi dei formalismi. • L’equivalenza dei formalismi si basa sulla Tesi di Church e la Tesi di Turing Conseguenza Molte proprietà relative, ad esempio, alle macchine di Turing si estendono immediatamente ad un qualsiasi linguaggio di programmazione a.a. 2002-03 e.merelli 4 Il termine Algoritmo Il termine Algoritmo significa procedimento di calcolo, deriva dal termine latino algorismus che a sua volta deriva dal nome del matematico usbeco Abu Ja’far Mohammed ibn-Musa alKhowarismi, vissuto nel IX secolo d.C. a.a. 2002-03 e.merelli 5 Che cosa è un Algoritmo Un algoritmo è una qualsiasi procedura computazionale ben definita (con un numero finito di regole che conduce al risultato dopo un numero finito di operazioni) che prende un insieme di valori, come input e produce un insieme di valori come output. a.a. 2002-03 e.merelli 6 Perché parliamo di Algoritmi La teoria degli algoritmi ha iniziato a stabilizzarsi agli inizi del XX secolo, mentre le tecniche di progettazione di algoritmi, di correttezza e efficienza si sono evolute nella seconda metà del XX secolo, grazie alla diffusione dei calcolatori elettronici. Ovunque si impieghi un calcolatore elettronico occorrono algoritmi corretti e efficienti che ne utilizzino al massimo le possibilità Esempi di algoritmi corretti e efficienti: controllo dei voli aerei regolazione reattori nucleari reperimento d’informazioni da archivi smistamento di comunicazioni telefoniche gioco degli scacchi controllo della produzione di una catena di montaggio … sistemi di puntamento di missili a.a. 2002-03 e.merelli 7 Correttezza e Efficienza Un algoritmo si dice corretto se, per ogni istanza di input, si ferma con l’output corretto Un algoritmo corretto risolve il problema computazionale dato Un algoritmo efficiente risolve il problema computazionale il più velocemente possibile e organizza i dati in modo da usare il minor spazio di memoria possibile a.a. 2002-03 e.merelli 8 Algoritmi & Programmi Gli algoritmi vengono descritti tramite programmi, che si avvalgono di istruzioni e costrutti dei linguaggi di programmazione per essere eseguiti da calcolatori elettronici Le proprietà degli algoritmi sono fondamentali, generali e robuste da essere indipendenti dalle caratteristiche di specifici linguaggi di programmazione o dai limiti imposti dai calcolatori elettronici a.a. 2002-03 e.merelli 9 Metodi Formali • I metodi per l’analisi della correttezza degli algoritmi • I metodi per l’analisi dell’efficienza degli algoritmi a.a. 2002-03 e.merelli 10 Definizione di algoritmo Idea empirica Discutiamo le caratteristiche che deve avere un algoritmo partendo dall’idea empirica che ne abbiamo: a) b) c) d) e) Il programma P deve essere di lunghezza finita Ci deve essere un agente di calcolo C, capace di eseguire le istruzioni L’agente di calcolo C ha a disposizione una memoria dove immagazzina i risultati intermedi per poi utilizzarli nelle fasi successive del calcolo Il calcolo avviene per passi discreti Il calcolo non è probabilistico a.a. 2002-03 e.merelli 11 Il programma P deve essere di lunghezza finita Ogni algoritmo che sia definibile in pratica, deve essere ricavabile da una quantità finita di informazioni. Esempio Π – Calcolatore con 10 istruzioni-macchina programmato per calcolare l’espansione decimale di Π. – Il punto a) è soddisfatto se si considera tale calcolatore come programmato dall’algoritmo di lunghezza finita che, dato n, permette di calcolare l’n-esima cifra di Π. a.a. 2002-03 e.merelli 12 Il calcolo avviene per passi discreti Il punto d) viene soddisfatto se C non ha a disposizione nessun meccanismo di calcolo analogico Il calcolo non è probabilistico Il punto e) è soddisfatto se la modalità di esecuzione del calcolo non è associata a nessuna legge di probabilità a.a. 2002-03 e.merelli 13 Definizione di algoritmo Caratteristiche discutibili Altre caratteristiche associabili ad un algoritmo sono più discutibili come: f) g) h) i) j) Non deve esserci alcun limite finito alla lunghezza dei dati di ingresso Non deve esserci alcun limite alla quantità di memoria disponibile Deve esserci un limite finito al numero e alla complessità delle istruzioni eseguibili da C Sono ammesse esecuzioni con un numero di passi illimitato Sono ammesse esecuzioni con un numero di passi infinito (cioè esecuzioni che non terminano mai) a.a. 2002-03 e.merelli 14 Non deve esserci alcun limite finito alla lunghezza dei dati di input Ad esempio somma di n numeri deve essere possibile per un qualsiasi n Non deve esserci alcun limite finito alla quantità di memoria disponibile Ad esempio la moltiplicazione di 2n x 2n = 22n deve poter essere calcolabile per ogni n a.a. 2002-03 e.merelli 15 Deve esserci un limite al numero e alla complessità delle istruzioni eseguibili da C • Questa condizione è essenziale alla intrinseca finitezza richiesta al nostro sistema formale e quindi deve chiaramente essere soddisfatta. Ciò implica che il numero di celle indirizzabili direttamente con una istruzione-macchina dovrà essere finito. Quindi la memoria illimitata al punto g) non potrà essere tutta indirizzabile direttamente. • Ridursi ad indirizzare una cella. Sono ammesse esecuzioni con un numero di passi illimitato • Esempio moltiplicazione, il numero di passi cresce al crescere del numero di cifre dei fattori. • Si potrà pensare a semplici funzioni della lunghezza dei dati come limiti superiori al numero di passi ammissibili a.a. 2002-03 e.merelli 16 Algoritmi & Funzioni • Sia S un sistema formale, cioè un linguaggio in cui descrivere i nostri algoritmi, più un certo meccanismo di esecuzione. • Un algoritmo A che termini sempre definisce quindi funzione fA avente come dominio l’insieme dei possibili dati di input e come codominio l’insieme dei possibili risultati. • Come esempio si consideri dati iniziali e risultati codificati nei naturali, ad ogni algoritmo A che termina viene associata una funzione f A: N → N • fA si dice calcolata dall’algoritmo A a.a. 2002-03 e.merelli 17 Esistono algoritmi per tutte le funzioni? Dimostrazione • fA si dice calcolata se l’algoritmo A termina • Se per alcuni valori dei dati iniziali X un algoritmo non termina, la funzione fA sarà non definita per quei valori. – Una funzione che può essere non definita per alcuni valori è detta parziale. – Una funzione definita per tutti i valori è detta totale • • Si noti come ad ogni algoritmo A di S é associata una funzione fA, la stessa funzione f può essere associata a più di un algoritmo: f=FA’=fA’’ Sia AS l’insieme di tutti i possibili algoritmi in S, l’insieme FS = {fA | A ∈ AS} FS è detto l’insieme delle funzioni calcolabili in S a.a. 2002-03 e.merelli 18