1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Problemi e algoritmi Anno Accademico 2009/2010
2 Il problema Un problema computazionale P viene definito dai suoi DATI IN INGRESSO (o INPUT) e dalla sua SOLUZIONE (o OUTPUT) Esempio P: somma di due interi DATI IN INGRESSO: due interi a e b SOLUZIONE: somma s=a+b
3 Il problema Istanza di un problema P realizzazione di particolari dati in ingresso Esempio la coppia (2,3) è unistanza del problema P dellesempio precedente a cui corrisponde la soluzione 5 (2,3) 5
4 Il problema Definiamo: I P linsieme delle istanze del problema P S P linsieme delle soluzioni del problema P
5 Il problema Esempio per P=somma di due interi (2,3) (4,1) (100,50) IPIP SPSP 5 150
6 Il problema Dato un problema P, esiste una relazione r P che lega gli elementi in I P (istanze) agli elementi in S P (soluzioni) r P : I P -> S P e che rappresenta quindi il problema P. Nel caso di P=somma di due interi si ha che r P è la funzione univoca: s=r P (a,b)=a+b
7 Tipi di problemi Decisione S P ={1,0} o S P ={SI, NO} Ad esempio: P: problema del commesso viaggiatore INPUT: N città con le relative distanze e un valore prefissato b OUTPUT: yes (oppure 1) se esiste un percorso che passa una sola volta per tutte le città ed è di lunghezza totale minore di b, no (oppure 0) se un tale percorso non esiste
8 Tipi di problemi Ricerca Ad esempio: P: problema del commesso viaggiatore (nella versione di ricerca) INPUT: N città con le relative distanze e un valore prefissato b OUTPUT: tutti i percorsiche passano una sola volta per tutte le città e che hanno una lunghezza totale minore di b
9 Tipi di problemi Enumerazione Esempio P: problema del commesso viaggiatore (nella versione di enumerazione) INPUT: N città con le relative distanze e un valore prefissato b OUTPUT: il numero dei percorsi che passano una sola volta per tutte le città e che hanno una lunghezza totale minore di b
10 Tipi di problemi Ottimizzazione Esempio P: problema del commesso viaggiatore (nella versione di ottimizzazione) INPUT: N città con le relative distanze OUTPUT: trovare il percorso che passa una sola volta per tutte le città e che ha minima lunghezza totale Questo è un problema di minimo. Da notare che le soluzioni per una data istanza possono essere più di una (esistono cioè più percorsi che hanno una lunghezza totale minima)
11 Lalgoritmo Cosè un algoritmo? In Informatica è un metodo di calcolo per risolvere un problema computazionale e può essere implementato, cioè può essere tradotto in programma attraverso un linguaggio di programmazione Un algoritmo esiste indipendentemente dalla macchina che lo esegue!
12 Lalgoritmo Cosè un algoritmo? E una procedura, costituita da una sequenza finita di operazioni elementari, che trasforma un set di dati iniziali (INPUT) in un set di dati finali (OUTPUT)
13 Lalgoritmo Esempio di problema da risolvere tramite un algoritmo P: somma di 5 numeri interi DATI IN INGRESSO: un set B={b 1, b 2, b 3, b 4, b 5 } di 5 interi SOLUZIONE: somma s=b 1 +b 2 +b 3 +b 4 +b 5
14 Lalgoritmo Esempio Algoritmo somma_5_interi: somma_5_interi B={b 1, b 2, b 3, b 4, b 5 } s
15 Lalgoritmo Un algoritmo in genere viene scritto in pseudocodice, cioè in un linguaggio, simile ad un linguaggio di programmazione (codice), che però non è direttamente compilabile o interpretabile su un calcolatore. Spesso il linguaggio di pseudocodice imita il linguaggio Pascal e viene perciò chiamato Pascal-like
16 Lalgoritmo Lalgoritmo precedente può essere riscritto in pseudocodice nel seguente modo (Pascal-like): Procedura Somma_interi(b1, b2, b3, b4, b5) begin s:=0 s:=s+b 1 s:=s+b 2 s:=s+b 3 s:=s+b 4 s:=s+b 5 end
17 Lalgoritmo Un algoritmo è composto da un certo numero di istruzioni e viene eseguito in un certo numero di passi in dipendenza del particolare input Istruzione descrizione di unoperazione elementare (ad esempio lalgoritmo precedente è composto da 6 istruzioni di assegnamento) Passo esecuzione di una certa istruzione
18 Lalgoritmo Esempio Procedura Raddoppia_Pari(a) Begin 1:b=a SE a è pari{ 2:b=a*2 } end La procedura è composta da 2 istruzioni e compie 2 passi se a in input è pari, mentre ne compie uno solo se a in input è dispari
19 Lalgoritmo Un algoritmo deve: essere composto da un numero finito di istruzioni e terminare in un numero finito di passi, ovvero deve essere finito essere realizzabile gestire tutte le situazioni che si possono verificare durante la sua esecuzione, ovvero deve essere completo
20 Lalgoritmo Un algoritmo deve: essere riproducibile, ovvero gli stessi dati in input devono dare in esecuzioni successive gli stessi dati in output essere corretto essere efficiente Vedere il seguito…
21 Correttezza di un algoritmo Dato un algoritmo A, si definisca: I A insieme degli input di A O A insieme degli output di A
22 Correttezza di un algoritmo Dato un algoritmo A, esiste una relazione r A che lega gli elementi in I A (input) agli elementi in O A (output) r A : I A -> O A e che rappresenta quindi lalgoritmo A. Nel caso di A=somma di 5 interi si ha che r A è la funzione univoca: p=r A (b 1,b 2,b 3,b 4,b 5 )=b 1 +b 2 +b 3 +b 4 +b 5
23 Correttezza di un algoritmo Un algoritmo A rappresentato da una relazione r A : I A ->O A si definisce corretto per un problema P, rappresentato da una relazione r P : I P ->S P, se e solo se r A coincide con r P. Cioè se ad ogni input i in I A corrisponde un output o che è anche la soluzione di P per lingresso fornito da i. Attenzione al coincide che non è in senso stretto! Per i problemi di ottimizzazione ad esempio basta che lalgoritmo trovi anche solo una delle possibili soluzioni ottime (di minimo o di massimo)
24 Efficienza di un algoritmo Lefficienza di un algoritmo è misurata in termini del tempo di computazione e dello spazio di memoria che userebbe se venisse implementato ed eseguito su di una macchina di riferimento ipotetica. Un algoritmo è tanto più efficiente quanto meno tempo e spazio spreca. La misura di efficienza (in tempo e spazio) viene in genere espressa in funzione della dimensione n dellinput
25 Efficienza di un algoritmo Esempio di tempo T di computazione funzione della dimensione n dellinput Procedura Somma_interi(b1, b2, b3, b4, b5) begin p:=0 p:=p+b 1 p:=p+b 2 p:=p+b 3 p:=p+b 4 p:=p+b 5 stampa p end n=5 costante sullintero insieme I A La dimensione n dellinput è il numero di interi b 1, b 2, b 3, b 4, b 5 (n=5) che è costante per ogni input possibile. Immaginando di implementare ed eseguire la procedura su una macchina di riferimento (modello) che esegue ogni istruzione in un tempo unitario, si ha che il tempo di computazione T per ogni input è: T=n+2 le n=5 istruzioni di assegnamento p:=p+b i, listruzione p:=0 e listruzione stampo p. Di conseguenza si ha che T è costante per ogni input.
26 Efficienza di un algoritmo Procedura Stampa(a) begin Per a volte stampa ciao e vai a capo end n=a non costante sullinsieme I A La dimensione n dellinput è lintero a (n=a) che non è costante per ogni input. Immaginando di implementare ed eseguire la procedura su una macchina di riferimento (modello) che esegue ogni istruzione in un tempo unitario, si ha che il tempo di computazione T per un input a è: T=n=a viene eseguita a volte listruzione di stampa. Di conseguenza si ha che T è funzione lineare di a. E evidente che non ci sono due input che hanno la stessa dimensione Esempio di tempo T di computazione funzione della dimensione n dellinput
27 Efficienza di un algoritmo Esempio di dimensione n dellinput Procedura Commesso_viaggiatore(insieme_di_città) begin … end n=N non costante sullinsieme I A La dimensione n dellinput è il numero N delle città n=N. Il tempo di computazione dellalgoritmo sarà funzione di N. In questo caso due input diversi possono anche avere la stessa dimensione. Ad esempio i 1 ={Roma, Napoli Pisa} e i 2 ={Milano, Genova, Venezia} che hanno n=N=3
28 Efficienza di un algoritmo Indicando con T A (x) il tempo che lalgoritmo A impiega a processare linput x appartenente a I A, si definisce complessità in tempo nel caso peggiore la grandezza: T A P (n)=max{T A (x) tale che |x|=n} cioè per ogni valore di n, T A P (n) è il massimo tra i tempi di computazione degli input x che hanno dimensione n |x|=n
29 Efficienza di un algoritmo Indicando con T A (x) il tempo che lalgoritmo A impiega a processare linput x appartenente a I A, si definisce complessità in tempo nel caso medio la grandezza: cioè per ogni valore di n, T A M (n) è la media dei tempi di computazione degli input x che hanno dimensione n |x|=n e |I n | numero degli input di dimensione n
30 Efficienza di un algoritmo In genere, dato un algoritmo A si vuole vedere cosa succede alle sue funzioni T A P (n) e a T A M (n) al tendere di n allinfinito. Si vuole cioè indagare il comportamento asintotico di A. Analogo discorso può essere fatto per misurare lo spazio di memoria che lalgoritmo usa su unipotetica macchina modello.
31 Efficienza di un algoritmo Gli algoritmi efficienti sono quelli per cui la funzione T A (n) (T A P o T A M ) è un polinomio di grado k>=0: T A (n)=a 0 +a 1 n 1 +a 2 n 2 +…+a k n k Per k=0 tempo costante Per k=1 tempo lineare Allaumentare di k lalgoritmo A diventa sempre più oneroso dal punto di vista computazionale
32 Efficienza di un algoritmo Tempi di calcolo su input di varie dimensioni (prima riga) per sei algoritmi che hanno una complessità pari a n (lineare), nlog 2 n (logaritmica), n 2 (polinomiale), n 3 (polinomiale), 2 n (esponenziale), 3 n (esponenziale) Si supponga che la macchina di riferimento esegua unoperazione elementare (istruzione) in 1 microsecondo (10 -6 secondi). Notazioni: ms (microsecondi), ms (millisecondi), s (secondi), mn (minuti), h (ore), g (giorni), a (anni), c (secoli) Da: A. Bertoni e M. Goldwurm, Progetto e Analisi di Algoritmi, Rapporto Interno n , Dipartimento di Scienze dellInformazione, Università degli Studi di Milano
33 Problematiche degli algoritmi SINTESI dato un problema P, progettare (disegnare) un algoritmo A che risolva P ANALISI dato un algoritmo A per un problema P, dimostrare che A risolve P (è corretto) e valutare le risorse (tempo e spazio) utilizzate da A