La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

1 ALGORITMI E MACCHINE DI TURING. 2 fondamenti di informatica: imparare a risolvere problemi di vario genere con le tecniche proprie dellinformatica,

Presentazioni simili


Presentazione sul tema: "1 ALGORITMI E MACCHINE DI TURING. 2 fondamenti di informatica: imparare a risolvere problemi di vario genere con le tecniche proprie dellinformatica,"— Transcript della presentazione:

1 1 ALGORITMI E MACCHINE DI TURING

2 2 fondamenti di informatica: imparare a risolvere problemi di vario genere con le tecniche proprie dellinformatica, e quali problemi sono risolubili cito Aho & Ullman: linformatica e la scienza dell astrazione ->cioe studia come creare il giusto modello per un problema e individuare le tecniche appropriate per risolverlo in modo automatico (con laiuto del calcolatore)

3 3 (continua citazione da Aho Ullman): Uno studioso di fisica studia il funzionamento del mondo reale - non cerca di creare un mondo con leggi fisiche piu semplici o piu piacevoli o piu adatte agli interessi del dottor Spiff... Un informatico crea astrazioni del mondo reale che possano essere rappresentate e manipolate in un elaboratore. Un modello di macchina per elaborare dati o per eseguire procedure di calcolo e la macchina di Turing.

4 4 fondamenti di informatica quindi presenta - (oltre alle informazioni di contorno [ambiente HW/SW] ) modelli dati, strutture dati, algoritmi (ce un libro di Niklaus Wirth che si chiama appunto Algoritmi + Strutture Dati = Programmi) modelli di dati - sia come astrazioni di dati in vari problemi - sia come astrazioni di dati disponibili in un linguaggio di programmazione (Pascal) strutture dati: nel caso il modello dei dati del problema da risolvere non ha corrispondenza in uno dei modelli dati del linguaggio usato, allora dovremo rappresentare il modello dati del problema con meccanismi di astrazione presenti nel linguaggio;

5 5 Per risolvere un problema generico con il calcolatore e necessario conoscere almeno un linguaggio in cui scrivere la soluzione del problema [il programma], linguaggio comprensibile al calcolatore, e quindi e necessario: * imparare un linguaggio di programmazione (grammatica, vocabolario, significati) in cui scriveremo i nostri programmi * imparare cosa puo fare un calcolatore e come lo fa * imparare alcune tecniche di risoluzione di problemi abbastanza semplici, e * imparare a usare queste tecniche per risolvere problemi piu complicati...

6 6 ALGORITMI ALGORITMO = una lista di istruzioni (una ricetta) da eseguire (con una macchina o con una persona) per risolvere un problema.

7 7 ALGORITMI o procedure di calcolo: alcuni discorsi (brevi) sulla definizione e sui limiti di un processo di calcolo formalizzabile.

8 8 1.o esempio di algoritmo: a>b ? decidere se a epiu grande di b, con a e b due numeri interi positivi, utilizzando solo le operazioni di incremento, decremento, test di eguale a zero e ripetizione. una possibile soluzione (ALGORITMO) : 1 test a=0 ? se si, procedi da 5 {a=0, b non si sa} 2 test b=0 ? se si, procedi da 7 {a non zero, b=0} 3 {qui a non zero, b non zero, non si sa ancora} decrementa a di 1 e decrementa b di uno 4 ripeti da 1 5 {qui (a=zero e b=zero) oppure (a=0, b>0) in ogni caso->} 6 risposta FALSO (non e a>b) e STOP 7 risposta VERO (e a>b) e STOP

9 9 osservazione sullalgoritmo per decidere se a>b ? (con a e b due numeri interi positivi, con le sole operazioni di incremento, decremento, test di eguale a zero e ripetizione) che ripetiamo qui: 1 test a=0 ? se si, procedi da 5 {a=0, b non si sa} 2 test b=0 ? se si, procedi da 7 {a non zero, b=0} 3 decrementa a di 1 e decrementa b di uno 4 ripeti da 1 [CICLO!] 5 {qui (a=zero e b=zero) oppure (a=0, b>0) in ogni caso->} 6 risposta FALSO (non e a>b) e STOP 7 risposta VERO (e a>b) e STOP nellalgoritmo vi sono alcune istruzioni che saranno ripetute piu volte (a seconda dei dati): il numero delle istruzioni dell algoritmo (qui 7) in generale NON coincide con il numero delle istruzioni che andranno effettivamente eseguite !!

10 10 algoritmi: un algoritmo e una definizione precisa, completa e non ambigua della sequenza di passi da fare -> ( ovvero: una lista di istruzioni [una ricetta] da eseguire -> ) -> per risolvere un problema, in un tempo finito passi (o istruzioni) che saranno meccanicamente eseguiti da un esecutore - quindi - la definizione e fornita in un linguaggio generico purche comprensibile al destinatario (persona o macchina) in particolare un algoritmo scritto in un linguaggio di programmazione comprensibile ad un elaboratore e un PROGRAMMA

11 11 calcolo automatico? un calcolo automatico e composto da: un insieme di dati iniziali A un insieme P di regole F che chiameremo programma o algoritmo; ogni regola F trasforma una parte X dei dati in altri dati Y una "macchina" che e in grado di interpretare ed eseguire le regole del programma; * lesecuzione del programma da parte della macchina produce (a partire dai dati iniziali A) dati intermedi I e alla fine produce dei risultati (dati finali) Z

12 12 quindi un calcolo automatico o elaborazione e: 1) un insieme di dati iniziali A, 2) un programma o insieme P di regole F (ogni regola F trasforma [elabora] una parte X dei dati in altri dati Y) 3) un elaboratore che applica le F su A ripetutamente; in generale un elaborazione e una trasformazione Z = P(A) con A = insieme dei dati iniziali, Z = ins.dei dati finali, P = regola che fa corrispondere Z ad A, o funzione P e una funzione nel senso piu lato: una somma di due numeri, la preparazione del bilancio di una societa, la stampa di un certificato anagrafico, il calcolo della situazione meteorologica di domani, lesecuzione di una mossa nel gioco degli scacchi calcolo automatico?

13 13 2.o es. di algoritmo: somma due numeri Il concetto di "fare dei conti" e' abbastanza intuitivo. Alle elementari ci insegnano l'aritmetica, ad esempio l'addizione di numeri di n cifre, con riporto: 1991+AA dato uno 2309 BB dato due sommando rango per rango: 3290 = le cifre di somma in colonna 0101 = le cifre di riporto della somma in colonna

14 ripetiamo: sommando 2309=due dati AA e BB di cifre ciascuno otteniamo 3290 le cifre somma in colonna 0101 e le cifre riporto che, sommando i riporti spostati di una colonna a sinistra : 3290 AA = le somme dei BB = i riporti dei cifre somma in colonna 001 -cifre riporto... procedimenti di calcolo: addizione di due numeri

15 15 ripetiamo: 1) primo dato iniziale 1)2309 = secondo dato iniziale )3290 (somme) 2) (riporti spostati di una colonna a sinistra) 3) ripeto sommando: 3)001-- (riporti gia spostati) )4300 cifre somma in colonna 4)---- cifre riporto... a questo punto non ripeto piu' perche si verifica la situazione di nessun riporto - ottengo la somma: 5) e ho finito

16 16 Schema del procedimento visto (o "ricetta") : per fare la somma di due numeri di 4 cifre: date 10 variabili (*) (a,b,c,d,e f, g,h,i,j) con valori iniziali (da 0 a 9)(0,1,9,9,1, 0,2,3,0,9) applichiamo ripetutamente la funzione f(X) -> Y f (a,b,c,d,e, f,g,h,i,j) -> (a1,b1,c1,d1,e1, f1,g1,h1,i1,j1), con a1 = nuovo valore di a,.. j1 = nuovo valore di j, { dove a1,b1,..e1 sono le somme delle cifre: a1= a+f, b1=b+g,... f1,g1,..j1 sono i riporti: f1 =riporto(cifra delle decine)di( b+g) g1=riporto(c+h), h1=rip(d+i), i1=rip(e+j), infine j1=0 }, fino a che sono nulli tutti i valori dei riporti (f,g,h,i,j) (*) variabile: oggetto dotato di nome e di valore; il valore varia durante il procedimento ma eunico in ogni istante di tempo.... procedimenti di calcolo: addizione di due numeri

17 17 ad es. con i dati di prima, AA=1991 e BB=2309 avremo: f(0,1,9,9,1, 0,2,3,0,9) -> (0,3,2,9,0, 0,1,0,1,0) poi f(0,3,2,9,0,0,1,0,1,0) -> (0,4,2,0,0, 0,0,1,0,0) poi f(0,4,2,0,0, 0,0,1,0,0) -> (0,4,3,0,0, 0,0,0,0,0) e basta: la somma si ottiene applicando ripetutamente la f alle variabili (a..j) a partire dai valori iniziali dati, fino a che sono nulli i valori di (e,f,g,h,i,j). Il processo di calcolo e' l' insieme delle 10-tuple dalla prima fino all'ultima: 1) (0,1,9,9,1, 0,2,3,0,9) "stato iniziale" 2) (0,3,2,9,0, 0,1,0,1,0) "stato intermedio" 3) (0,4,2,0,0, 0,0,1,0,0) "stato intermedio" 4) (0,4,3,0,0, 0,0,0,0,0) "stato finale" ogni 10-tupla e' ottenuta dalla precedente applicando la funzione definita prima.

18 18 elaborazione o procedimento di calcolo: una definizione dato un insieme K di dati (variabili a valore intero = oggetti capaci di asumere un valore intero) data una funzione di trasformazione f(K) = K1 ( la f trasforma K in un K1 = insieme delle stesse variabili di K con valori nuovi dato un esecutore M [generico: persona, macchina] di f: quindi f deve essere eseguibile da M ! il processo di calcolo = sequenza degli insiemi dei dati K 0 (dato iniziale) K 1, K 2,... K n, con K 1 = f( K 0 ) K i+1 = f( K i )... e con K n dato finale: in pratica la sequenza dei dati intermedi deve essere finita: cioe che esista n finito tale che K n = risultato

19 19... definizione di algoritmo... il concetto di algoritmo e preesistente allinformatica (i primi procedimenti di calcolo risalgono a 3000 anni fa, nella regione babilonese (es: calcolo del volume di una botte, calcolo delle radici di un equazione di secondo grado, calcolo dellinteresse composto ecc) e genericamente indicava un procedimento matematico per risolvere un problema; oggi e associato al concetto di elaborazione: un algoritmo e la specifica di una sequenza finita di azioni elaborative (o passi di elaborazione) che risolve automaticamente un problema.

20 20... una curiosita sulla definizione di algoritmo: Dal dizionario Zingarelli, ed. 1959, (comperato presso il Centro di Calcolo dell'Univ. di Trieste nel 1963) la parola algoritmo e' riportata ancora con una sua definizione storica:.... algore, m. * ALGOR - ORIS. Freddo grande. | Stagione fredda. +algorismo, -itmo, m. *sp. ALGUARISMO. Cifra arabica (dal matematico ar. Al-Kuarismi che apprese dagl'Indiani l'abbaco e lo insegno' in Spagna circa l' 820). Aritmetica col sistema arabo. | Pratica dell'aritmetica. algoso, v. sotto a l g a. aliare,....

21 21 un osservazione sugli algoritmi e su Al-Kuarismi per non sottovalutare i primi algoritmi per laritmetica con le cifre decimali arabe, basti pensare alla differenza di costo (in termini di tempo) tra: calcolo con il sistema di numerazione arabo: 17 x = ? calcolo con il sistema di scrittura di numeri romano: XVII x MDXXIV + XLIV = ? (curiosita: per un periodo la Chiesa in Italia vieto l uso delle cifre arabe di provenienza degli infedeli, poi si accetto il sistema migliore...)

22 22 definizione informale di algoritmo un algoritmo e una procedura effettiva di calcolo eseguibile da un esecutore ovvero e una lista di istruzioni eseguibili e non ambigue che eseguita a partire da un dato valido (un insieme di dati) produce in un numero finito di passi un risultato N.B.: * lista finita * istruzioni eseguibili e non ambigue e deterministiche: eseguendo piu volte lo stesso algoritmo sugli stessi dati si ottiene sempre lo stesso risultato * il procedimento di elaborazione finito: la sequenza dei dati intermedi e finita, ovvero e garantito che prima o poi si arriva al risultato

23 23 Analizziamo piu a fondo questa definizione di algoritmo

24 24 ritorniamo alla definizione di procedimento di calcolo dato un insieme K 0 di dati data una funzione di trasformazione f(K) = K1 esiste un esecutore M [persona o macchina] di f - f deve essere eseguibile da M ! f definisce un procedimento di calcolo che parte da K 0 (dato iniziale) e attraverso K 1 [con K 1 = f( K 0 )], K 2, K 3... K i dove... K i+1 = f( K i ) arriva a K n dato finale. con sequenza dei dati intermedi K 0, K 2,... K i,... K n finita: esiste n finito tale che K n = risultato vediamo ora i singoli punti

25 25 1) esaminiamo in dettaglio il primo punto: i dati 1) dato un insieme K 0 di dati ==>> i dati possono essere rappresentati come un insieme di variabili a valore intero = oggetti capaci di asumere un valore intero quindi al posto dei dati (del problema reale) consideriamo un insieme di variabili S = {a,b,c,...} a valori interi, che "descrivono lo stato di un sistema", (<- problema) ogni insieme di valori S rappresenta un possibile stato e in particolare al posto del specifico dato iniziale K 0 abbiamo un insieme S(0) ovvero S 0 di valori iniziali delle variabili a,b,c,..

26 26 2) : le regole o la funzione di trasformazione 2) data una funzione di trasformazione f(S) = S1 (S = insieme delle variabili, S1 = insieme delle stesse variabili con valori nuovi) ==>> la funzione di trasformazione f e definita per i valori di S e assume valori in S - scriveremo: f ( S ) -> S, f e' la procedura di calcolo: a partire da una generica situazione S i = stato = insieme dei valori delle variabili al passo i-esimo del procedimento risolutivo produce i valori S i+1 = stato = valori delle variabili al passo successivo (i+1)-esimo del procedimento risolutivo parte da S 0, poi f(S 0 )= S 1 poi f(S 1 )=S 2 poi f(S 2 )= S 3 ecc

27 27 3) esecutore:... data una funzione di trasformazione f(S) = S1 [ f e' la procedura di calcolo: da S i = stato i produce S i+1 = stato i+1 (valori delle variabili al passo (i+1)-esimo) quindi: f(S 0 ) -> S 1 ; f(f 1 )-> S 2, f(f 2 )-> S 3, f(f 3 )-> S 4, ecc ] esiste un esecutore M di f ipotesi importante: tutto il procedimento e automatico, eseguibile da una macchina (o anche da una persona); si richiede che la funzione f sia: * eseguibile (dall esecutore: persona o macchina), * deterministica (da S(k) produce sempre lo stesso S(k+1)) * completa (definita per tutti i possib.insiemi S(k) ottenibili dai possibili dati iniziali validi)

28 28 finitezza: abbiamo presentato 3 componenti: # insieme S 0 di dati ; # esecutore M # funzione di trasformazione f(S) = S1 questa terna ( f S 0 M ) definisce la sequenza dei dati intermedi S 0, S 2,... S i,... S n-1, fino a S n con S 0 [dato iniziale], f( S 0 ) = S 1,... f( S i ) = S i+1... f( S n-1 )= S n [dato finale] ipotesi importante sulla durata: la sequenza S 0, S 2,... S i,... S n e finita: dati ( f, S 0, M ) esiste n finito tale che S n = risultato ovvero il numero di passi dallo stato iniziale S(1) allo stato finale S(n) deve essere finito

29 29 soluzione algoritmica di problemi Per risolvere un problema con il calcolatore dobbiamo * specificare e delimitare il problema * individuare un procedimento risolutivo del problema - cioe' un insieme di regole che, eseguite ordinatamente, permettono di calcolare i risultati del problema a partire dalle informazioni a disposizione - = definire un algoritmo (insieme finito di regole, eseguibili da un esecutore ipotetico, non ambigue,cioe' univocamente interpretabili, e finite, nel senso che l'esecuzione dell'algoritmo termini in un tempo finito per ogni insieme di valori dei dati di ingresso)

30 30 cont. soluzione algoritmica di problemi abbiamo detto che per risolvere un problema con il calcolatore dobbiamo * specificare e delimitare il problema * trovare un procedimento risolutivo (un algoritmo) infine dobbiamo - * individuare una rappresentazione [PROGRAMMA] dell' algoritmo, delle informazioni date e di quelle usate dall'algoritmo [DATI INIZIALI, INTERMEDI e RISULTATI] per mezzo di un linguaggio di programmazione comprensibile sia a noi che al calcolatore

31 31 ancora due esempi: 3.o algoritmo : calcolo dell interesse composto: dato un capitale iniziale (ad es dobloni doro) dato un tasso di interesse (ad es. 27 percento) quanti dobloni avro tra 10 anni?

32 32 esempio del calcolo dell interesse composto: dati i valori iniziali di S 0 = (cap, int, num, 1) (cap = capitale iniziale [es. 100,000,000.-], int = interesse annuo [es. 9 %], num = numero anni di deposito [es. 8] ) trovare il procedimento per calcolare il capitale dopo n anni ovvero trovare f tale che dato S 0 produca la sequenza S 0, S 1, S 2,... S i,... S num dove S num = (cap num, int num, num num, num) = risultato trovare una f funzione che da quadrupla di valori: (cap, int, num, konta) [konta = varibile ausiliaria, e un "contatore" a valori da 1 a n ] produce una quadrupla di valori nuovi: (cap1, int1, num1, konta1) <= f (cap, int, num, konta)

33 33 cont. calcolo dell interesse composto: valori iniziali S 0 = (cap, int, num, 1) (capitale iniziale, interesse annuo, num. anni di deposito) f (cap, int, num, konta) = (cap1, int1, num1, konta1) una f che definisce il procedimento e: (c, i, n, k) <= f (c, i, n, k) = ( ( c*(100+i) ) /100, i, n, k+1 ) e per calcolare il capitale dopo n anni si esegue: (1) dato iniz. ( c,i,n,1 ); (k=1 !) (2) ripeti listruz.seguent.(3) fintantoche k

34 34 interesse composto: un esempio di traccia di esecuzione f (c, i, n, k) = ( (c*(100+i))/100, i, n, k+1 ) n.istr. cap. int. nk(prima dellistr (1) i valori 1--- delle var. non sono def !) valori iniziali -> val.nuovi: k val.nuovi: k val.nuovi: k val.nuovi: k=n -> ho il risultato

35 35 4.o ALGORITMO: il massimo comune divisore calcolo del massimo comune divisore dati due numeri A e B quale e il numero intero piu grande che e divisore sia di A che di B ? ad es. dati due numeri A = 1996 e B = = 4*499, 768=3*4*64, massimo comun divisore e4 ad es. per 2310 e 203 che sono rispettivamente 2310=2*3*5*7*11 e 203=7*29 quindi 7 e il massimo comun divisore dei due numeri

36 36 4) algoritmo: calcolo del massimo comune divisore due versioni di soluzione (Batini,Carlucci, e altri) 4.a) un primo procedimento: * dati I e J numeri interi positivi, * calcola SI = l'insieme dei divisori di I * calcola SJ = l'insieme dei divisori di J * calcola l'insieme SK dei divisori comuni a I e J, ovvero SK = l'intersezione degli insiemi SI e SJ * calcola nm = il numero massimo che sta in SK * la soluzione e' nm

37 37 cont. es. del calcolo del massimo comune divisore 4.b) un secondo procedimento (Euclide): siccome vale la proprieta' seguente: mcd(m,n) =se m=n allora mcd = m oppure mcd=n, se m>n allora = mcd( m-n, n ) se n>m allora = mcd( m, n-m ) * allora per calcolare il m.c.d. si eseguono le istruzioni : (algoritmo di Euclide, 4.o secolo a.C.) * finche' m e' diverso da n si ripetano le azioni: * se m> n * allora sostituisci a m il valore di m-n, altrimenti sostituisci a n il valore di n-m; quando m = n abbiamo finito, e m e il m.c.d. cercato

38 38 1.) es. del calcolo del massimo comune divisore di x e y Esempio di esecuzione dellalgoritmo (qui finche' m e' diverso da n si ripetano le azioni: se m> n * allora sostituisci a m il valore di m-n, # altrimenti sostituisci a n il valore di n-m; una "traccia" di esecuzione con dati 18 e 12 (sono come riferimenti allalgoritmo qui sopra): 1) m = 18,n=12; 2) m>n ? si allora * calcola m-n = = 6 e assegna a m: 3) m = 6, n=12 4) m>n ? no allora # calcola n-m = 12-6 = 6 e assegna a n 5) m=6,n=6, 6) m=n ? si, non ripetere piu, 7) il risultato e il valore di m cioe' 6

39 39 2.) es. del calcolo del massimo comune divisore di m, finche' m e' diverso da n si ripetano le azioni: se m> n * allora sostituisci a m il valore di m-n, # altrimenti sostituisci a n il valore di n-m; 2.) es. dati A = 1996 e B = 768 0) m0 = 1996 e n0 = 768 1) * m1= =1228, n1=768; 2) * m2= =460, n2=768; 3) # m3=460, n3= =308; 4) * m4= =152, n4=308; 5) # m5=152, n5= =156; 6) # m6=152; n6= =4 7) * m7=152-4=148, n7=4; (ripeto per altre 36 volte) 43) * m43=8, n43=4; m44=8-4=4, n44=4; m==n => ho finito ! => MCD=4

40 40 3.) es. del calcolo del massimo comune divisore di m, finche' m e' diverso da n si ripetano le azioni: se m> n * allora sostituisci a m il valore di m-n, # altrimenti sostituisci a n il valore di n-m; 3.) es. dati 2310 e 203 1)m1=2310,n1=203; 2)m2=2107,n2=203; 3)m3=1904,n3=203; 4)m1=1701,n4=203; 5)m5=1498,n5=203; 6)m6=1295,n6=203; 7)m7= )m8=889,...; 9)686,...; 10)483,..; 11)m11=280,n11=203; 12)m12=77, n12=203; 13)m13=77,n13=126; 14)m14=77,n14=49; 15)m15=28,n15=49; 16)m16=28,n16=21; 17)m17=7,n17=21; 18)..7, )m19=7,n19=7 e ho finito... ==>> MCD=7

41 41 traccia di UNA esecuzione: nota: un algoritmo ed un particolare insieme di dati in ingresso o di partenza definiscono un particolare processo di calcolo come questo visto per il calcolo del MCD di 18 e 12, oppure per i due esempi MCD(1996,768)=4 e MCD(2310, 203)=7 oppure come quello visto prima per il calcolo del capitale con interesse composto con capitale iniziale 1000 interesse annuo 4 e numero anni 5, oppure come l esempio iniziale di calcolo della somma di due numeri interi a=1991 e b=2309 con s= NOTA: un algoritmo puo essere applicabile a un dato solo, oppure a un numero finito di dati, oppure a un numero infinito di dati...

42 42 formalismi Esistono moltissimi formalismi per definire (esprimere, specificare) algoritmi: formalismi astratti: Macchina di Turing, (vedremo nel prossimo capitolo) Lambda Calcolo, linguaggi per calcolatori: linguaggi macchina,... ling. di programm. imperativi o procedurali, come ad es.: Algol 59, Basic, C, C++, Cobol, Fortran 57, Fortran 90, Java, Modula, Oberon, Pascal,, Smalltalk, Snobol,... ling. di progr. funzionali (Lisp,Scheme,...), ling. di progr. logici (Prolog,...)

43 43... ancora sulla definizione di algoritmo... la nozione di algoritmo o procedura effettivamente computabile e' del 1935, ed e stata ripresa da piu' autori con diversi formalismi negli anni 30, 40 e 50. oggi si puodefinire un algoritmo come un programma eseguibile da un calcolatore che a partire da un dato valido produce in un tempo finito e sempre lo stesso risultato (*) esistono algoritmi (programmi) per risolvere un enorme quantita di problemi ma ATTENZIONE: non esistono algoritmi risolutivi per tutti i problemi [vedremo un esempio in dettaglio] (*) implicita lipotesi che il linguaggio di programmazione in cui scrivo il programma sia non ambiguo,deterministico e eseguibile dal calcolatore...

44 44 qualche es. di problemi (..procedimenti) di calcolo: in questo elenco alcuni problemi sono semplici, altri difficili fino a praticamente intrattabili, altri impossibili... 1) problema della somma di due interi di 4 cifre (abbiamo visto prima un procedimento) 2) dati due numeri, trovare il maggiore; 3) calcolo del capitale maturato dopo dieci anni, con dati l interesse composto e il capitale iniziale; 4) dati tre valori numerici a,b,c calcolare le radici dellequazione di secondo grado a * x 2 + b * x + c = 0 5) dato un elenco di nomi e relativi numeri di telefono (in rubrica o elenco telefonico o nel cellulare della zia), trovare il num.o di telefono di una persona (ad. es. Mario Rossi);

45 45 qualche es. di problemi (..procedimenti) di calcolo: 6) scrivere una lettera di sollecito di pagamento alla ditta Sgraffigna,Nonpaga,Fuggi&co. 7) calcolo della mossa migliore per ogni possibile situazione del gioco del filetto / della dama / degli scacchi 8) data una rete stradale di una citta' e le informazioni sui flussi di veicoli (per ogni strada e per ogni istante) trovare il percorso ottimo (tempo o consumo o altro) da casa propria all' universita'; 9) calcolo del percorso ottimo di un robot semovente in ambiente con ostacoli (ad es.durante una partita di calcio del campionato internazionale per squadre di robot); 10) calcolo dei comandi per il controllo di una macchina operatrice di un impianto industriale;

46 46 qualche es. di problemi (..procedimenti) di calcolo: 11) calcolo delle tasse per gli studenti del primo anno della facolta' di ingegneria; 12) calcolo del comando da trasmettere sull' interfaccia MIDI nell'ambito di un programma che produce musica da partitura memorizzata da/di Buxtehude; 13) calcolo dellimmagine da inviare sullo schermo sinistro relativo al gioco virtuale Destroyer71; 14) scrittura automatica da parlato di Porpetto 15) traduzione automatica delle poesie di Saba in urdu 16) scrivere tutti gli n per cui l' equazione x n + y n = z n ha soluzioni x,y,z intere;

47 47 qualche es. di problemi (..procedimenti) di calcolo: 17) scrivere un programma per comprimere una sequenza di immagini video codificate in versione digitale in modo da poter memorizzare dieci filmati su un disco da 10 Mega byte 18) scrivere un programma che controlla se un qualunque programma scritto in C++ e sintatticamente corretto e se si ferma dopo un numero finito e limitato di passi 19) trovare una procedura per decidere per ogni x intero e per ogni f(x) (f funzione da intero a intero) se f(x) e' o meno una funzione costante; 20) scrivere un programma per decidere per ogni matricola del corso di Fondamenti di Informatica se passera lesame entro la prossima sessione.

48 48 - ancora sui procedimenti di calcolo: specifica del problema: in ogni caso si chiede di ottenere a partire da certe informazioni iniziali (dati di ingresso del problema) informazioni nuove, o risultati del problema. la formulazione del problema non da' alcuna indicazione su come risolvere il problema; talvolta il problema e ambiguo: cerco ad es. il nome di Furlan Giuseppe nella guida telefonica di Trieste oppure di John Brown nella guida telefonica di Manchester e trovo molti nomi uguali.

49 49 talvolta il problema e praticamente intrattabile, perche richiede un numero di passi troppo grande (un esempio: per calcolare la funzione di Ackermann A(4,2) ci vuole un po di tempo (circa 10 secondi), il risultato e un numero intero di cifre: A(4,2) = 2, x ; (H.J.Smith, programma VPCalc per calcoli con dati fino a cifre e con valori di grandezza fino a 10^ , da: ModulaTor nr.11, vol.1, dec 91) per il calcolo A(4,3) ci vorrebbero piu di A(4,2) secondi [n anni, dove n ha piudi cifre...] e un calcolatore con piu di A(4,2) byte di memoria [k Gbyte, dove k ha piudi cifre...]... e un problema non risolubile in pratica

50 50 talvolta si dimostra che un problema non ha soluzione ad es. il problema di decidere per ogni x intero e ogni funzione f(x) da intero a intero se f(x) e' costante o no, ovvero trovare una F tale che F(f) = 1 se f(x) e costante per tutti gli x e F(f) = 0 se f(x) non e costante si puo dimostrare che il problema NON ha soluzione

51 51 Un altro problema che non ha soluzione (come si puo dimostrare) e il seguente Halting Problem : scrivere (il testo di) un programma (un super-compiler) SC che sia in grado di leggere un testo di un programma generico P e di un dato generico D per il programma P, e poi, analizzando il testo P e i dati D, sia in grado di rispondere se * il programma P con questo dato generico D una volta avviata lesecuzione si ferma in un tempo finito (si arresta dopo aver eseguito un numero finito di istruzioni) * oppure no, e in questo secondo caso ha luogo una computazione infinita. Nota che NORMALMENTE un compilatore analizza il teso di un programma generico e per prima cosa decide se la sintassi e corretta oppure no;

52 52 nota: si osservi che il numero di algoritmi e infinito ma numerabile... vi sono tanti algoritmi quanti i numeri naturali (si pensi ad es. che un programma in C e un testo; posso immaginare di costruire una sequenza di tutti i programmi in C, iniziando dal piu piccolo - il programma vuoto main(){} e poi allungando in ordine lessicografico con costrutti che mantengano la sintassi legale; un algoritmo puo essere considerato come una funzione da intero a intero (linsieme dei dati e un intero (formato appunto da tutti i dati codificati), linsieme dei risultati e un intero); il numero di funzioni da intero a intero non e numerabile - solo una piccola parte delle f(int)->int e un algoritmo!

53 53 M.A. Arbib, A.J. Kfoury, R.N. Moll: "A Basis for Theoretical Computer Science", Springer Verlag 1981 (BIBL.FAC.ING) R.Y.Kain, "Automata Theory, Machines and Languages", McGraw Hill,72. (BIBL.FAC.ING) M.L. Minsky: " Computation: Finite and Infinite Machines", Prentice Hall 1967, (Centro Calcolo, DEEI) cap. 6,7,8. C.Ghezzi, D.Mandrioli: "Informatica Teorica", Clup, Milano, BIBLIOGRAFIA per questa parte: (ma solo per chi sia molto interessato allargomento

54 54 cont. BIBLIOGRAFIA per questa parte : D.E.Knuth: "The Art of Computer Programming", vol. 1, "Fundamental Algorithms", Addison Wesley 1968, (FAC./5/XXIIc/41a/I) B.A. Trakhtenbrot: "Algoritmi e macchine Calcolatrici", Ed. Progresso tecnico, 1964, (FAC/5/Cont.3/7) J.E.Hopcroft, J.D.Ullman: Introduction to Automata Theory, Languages and Computation, Addison Wesley, Reading, Mass., 1979.


Scaricare ppt "1 ALGORITMI E MACCHINE DI TURING. 2 fondamenti di informatica: imparare a risolvere problemi di vario genere con le tecniche proprie dellinformatica,"

Presentazioni simili


Annunci Google