La Macchina RAM Shepherdson e Sturgis (963) Nastro di ingresso.......... PROGRAM COUNTER Nastro di uscita PROGRAMMA ACCUMULATORE UNITA' ARITMETICA............... 2 3 4 M E M O R I A
Formato delle Istruzioni CODOP =x x è operando immediato CODOP x L operando si trova memorizzato in M[x] (Indirizzamento diretto) LDA x M [x] op CODOP *x L operando si trova memorizzato in M [ M[x] ] (Indirizzamento indiretto) M [y] op LDA *x M [x] y CODOP label Essendo label una stringa alfanumerica si introduce la funzione b(label) che!! associa un numero intero ad una label.
Un set di istruzioni LDA = x M[] & x LDA x M[] & M[x] LDA *x M[] & M[M[x]] ADD =x M[] & M[] + x ADD x M[] & M[] + M[x] ADD *x M[] & M[] + M[M[x]] STO x M[x] & M[] STO *x M[M[x]] & M[] SUB =x M[] & M[] - x SUB x M[] & M[] - M[x] SUB *x M[] & M[] - M[M[x]] READ x M[x]& valore in input READ *x M[M[x]]& valore in input WRITE = x Stampa in uscita x WRITE x Stampa in uscita M[x] WRITE *x Stampa in uscita M[M[x]] JMP label JSP label JSZ label PC & b(label) if M[] > PC & b(label) else PC& PC+ if M[] = PC & b(label) else PC& PC+ HLT Fine della computazione Si osservi che per ogni istruzione che non sia dì salto o l istruzione di HLT si ha sempre PC& PC +
Esempio di programma sulla RAM READ READ 2 loop: LDA SUB 2 JSZ halt LDA! SUB 2 JSP via LDA STO 3 LDA 2 STO LDA 3 STO 2 via: LDA SUB 2 STO JMP loop halt: WRITE HLT Start a, b a = b a < b a = a - b T T MCD di due numeri interi a Stop a b
Valutazione della complessità computazionale nella RAM Criterio del costo uniforme - Si fa l assunzione che ciascuna istruzione richieda una unità di tempo - Ciascuna locazione di memoria, compreso l accumulatore, richieda una unità di spazio Il modello a costi uniformi è giudicato come poco realistico in quanto: - il costo di esecuzione di una istruzione risulta indipendente dalla dimensione del dato - l accesso ad un registro di memoria risulta unitario indipendentemente dal numero dei registri accessibili. In altre parole il criterio del costo uniforme non potrebbe modellare valutazioni di complessità per dati arbitrariamente grandi e per occupazioni di memoria anch esse arbitrariamente grandi, in quanto suppone che sia possibile accedere ad una quantità di informazione illimitata in un tempo limitato.
Valutazione della complessità computazionale nella RAM Criterio del costo logaritmico - Si fa l assunzione che il tempo richiesto per eseguire l istruzione sia proporzionale alla lunghezza degli operandi. Si introduce la funzione l (n) definita come l (n) = if n = then else - log 2 n - + per valutare il costo di una istruzione si considerano i seguenti contributi. l elaborazione di un operando ha un costo l (n) 2. l accesso ad un registro i viene valutato come l (i) - Si applica la medesima filosofia per l occupazione di spazio Sia m l indirizzo più alto del registro di memoria cui si fa accesso durante l esecuzione del programma e sia M i il valore assoluto più grande immagazinato allora: m! i l (M i ) definisce la complessità spaziale logaritmica
LDA = x l(x) LDA x l(x) + l(m[x] ) LDA *x l(x) + l(m[x] ) + l(m[m[x]]) STO x l (M[]) + l(x) STO *x l (M[]) + l(x) + l(m[x] ) Costi logaritmici ADD =x l (M[]) + l(x) ADD x l (M[]) + l(x) + l(m[x] ) ADD *x l (M[]) + l(x) + l(m[x] ) + l(m[m[x]]) READ x l(val) + l(x) READ *x l(val) + l(x) + l(m[x] ) WRITE = x l(x) WRITE x l(x) + l(m[x] ) WRITE *x l(x) + l(m[x] ) + l(m[m[x]]) JMP label JSP label l (M[]) JSZ label l (M[]) HLT
Valutazione della complessità dell algoritmo per il MCD Una digressione sulla teoria dei numeri Si consideri la successione di Fibonacci 2 3 5 8 3 2 34 55... Si dimostra che l n-esimo numero della successione può essere calcolato come F =! n / #5 dove! =.6833989 n se si considera b = F ed a = F si può ricavare una relazione tra n e a (oppure b) n+ n+2 a = F n+2 =! n+2 / #5 n = log! (a #5 ) - 2 Si fa uso del seguente risultato (Teorema di G. Lamè): siano a e b tali che a > b> e sia n ", se a e b sono due numeri di Fibonacci tali che a = F n+2 e b = F n+ allora l applicazione del metodo di Euclide per il calcolo del MCD richiede n divisioni e rappresenta il caso peggiore.
Valutazione della complessità dell algoritmo per il MCD cont. Start MCD di due numeri interi a, b Esempio: a = 34 = F 9 a = b T a Stop b = 2 = F 8 n = 7 a < b T a b a = a - b 34 3 2 2 2 3 8 3 3 8 5 8 8 5 3 5 5 3 2 3 3 2 2 2 2 3 4 5 6 7
Ripetizioni $ READ READ 2 $ loop: LDA n+ SUB 2 n+ JSZ halt n+ LDA$ n SUB 2 n JSP via n LDA n- STO 3 n- LDA 2 n- STO n- LDA 3 n- STO 2 n- via: LDA n SUB 2 n STO n JMP loop n halt: WRITE HLT T(n) = 3(n+)+6(n-)+7n+4= 6n+ T(n) = 6[log! (a #5 )] - 3 Valutazione con costi uniformi n Start a, b a = b n a < b a = a - b T T n- MCD di due numeri interi a a b n- poiché a > b e n = log! (a #5 ) - 2 si ha O(log(a)) Stop
Valutazione con costi logaritmici Ripetizioni $ READ l() + l(a) READ 2 l(2) + l(b) loop: LDA n+ l() + l(m[]) SUB 2 n+ l(m[]) + l(2)+l(m[2]) "+2 l(a) JSZ halt n+ l(m[]) l(a) LDA$ n l() + l(m[]) SUB 2 n l(m[]) + l(2)+l(m[2]) "+2 l(a) JSP via n l(m[]) l(a) LDA n- l() + l(m[]) STO 3 n- l(m[]) + l(3) LDA 2 n- l(2)+l(m[2]) STO n- l(m[]) + l() LDA 3 n- l(3)+l(m[3]) STO 2 n- l(m[]) + l(2) via: LDA n l() + l(m[]) SUB 2 n l(m[]) + l(2)+l(m[2]) "+2 l(a) STO n l(m[]) + l() JMP loop n halt: WRITE l() + l(m[]) HLT si fa l ipotesi che l accesso a un registro sia costante es: "=2 inoltre a > b per cui si normalizza a l(a) pertanto T(n) = 8 n l(a) + l(a) + 27 n - O(log 2 (a))
Equivalenza dei modelli di calcolo (MT # RAM) Teorema. Una Macchina di Turing multinastro con complessità temporale T può essere simulata da una macchina RAM con complessità O(T) secondo il criterio del costo uniforme e O(T log(t)) secondo il criterio del costo logaritmico. La chiave della dimostrazione è l isomorfismo tra il nastro della MT e la memoria della RAM supposto che nelle celle della MT vi sia un digit / e che si faccia coincidere la cella i-esima del nastro della MT con il registro di memoria i+-esimo della RAM. Il registro della RAM indicherà l attuale posizione della testina di lettura/ scrittura della MT (inizializzata a 2). Se ad esempio la MT prevede le seguenti due transizioni " (p,) (q,,d) e " (p, ) (p,,s) il seguente frammento implementa le due transizioni: p LOAD * Carica il valore della prima cella del nastro nell accumulatore JSP p poiché nel nostro caso il valore è si va in sequenza LOAD = STORE * cambia il valore da ad nella cella puntata dal registro LOAD ADD = STORE spostamento a destra della testina di lettura/scrittura JUMP q vai allo stato q p LOAD SUB = STORE spostamento a sinistra della testina di lettura/scrittura JUMP p... 2 3 4 5 2 RAM... M T
Equivalenza dei modelli di calcolo (MT # RAM) La macchina RAM riesce a simulare una transizione della MT in al più 8 istruzioni perché tante sono le istruzioni necessarie per realizzare transizioni in cui tutti gli elementi vengono variati. p LOAD * Ciascuna istruzione della RAM ha un costo che è al più O(log i max) dove i max indica il massimo numero di celle usate dalla MT quindi se la MT effettua T passi il costo complessivo del programma sulla RAM è O(T logt). Si osservi che nel caso si consideri il costo uniforme, non misurando l accesso alla memoria in termini logaritmici il costo complessivo è evidentemente O(T) JSP p LOAD = STORE * LOAD ADD = STORE JUMP q p LOAD SUB = STORE JUMP p...
Equivalenza dei modelli di calcolo (RAM # MT) Teorema: Si consideri un linguagio L accettato da una RAM con complessità temporale T secondo il criterio del costo logaritmico. E allora possibile costruire una macchina di Turing Multinastro che riconosce L in un tempo O(T 2 ). Oltre a due nastri TI e To che contengono l input e l output della Macchina RAM ci sono altri tre nastri che codificano: - T la memoria della RAM secondo la seguente convenzione: sia {i j j=,...k} l insieme degli indici tali che in un dato istante M[i j ] risulti inizializzato, il nastro T viene rappresentato come: T... $ $ $ M[i ] $ $... $ $ $ M[i k ] $ $... i dove il carattere $ viene usato come separatore, ed i simboli ij e M[ij ] vengono codificati in binario. - T2 contiene l accumulatore M[] codificato in binario - T3 viene usato come memoria temporanea. i k
Equivalenza dei modelli di calcolo (RAM # MT) Simulazione di alcune istruzioni significative della macchina RAM sulla MT. LOAD h - si cerca sul nastro T la sequenza $$ h $ M[h] $$ a partire dal margine sinistro del nastro se non viene trovata la macchina va in errore. - si copia il valore M[h] sul nastro T2 [l accumulatore] STORE h. si cerca sul nastro T la sequenza $$ h $ M[h] $$ se la ricerca fallisce vuol dire che ci troviamo in uno dei seguenti due casi: a) i k < h [indirizzamento ad un punto della memoria non ancora acceduto] $ in questo caso si memorizza la sequenza h $ M[] $$ al limite destro di T b) esiste un j < k tale che ij < h < ij+ [indirizzamento ad un punto della memoria non ancora acceduto] in questo caso: - si copia la porzione di T alla destra di ij $ M[ij] $ $ in T3 $ - si memorizza la sequenza h $ M[] $$ alla destra di i j $ M[i j ] $ $ - si memorizza il contenuto di T 3 alla destra di h $ M[] $$ 2. altrimenti si è trovato sul nastro un j tale che ij = h allora - si copia la porzione di T alla destra di h $ M[h] $ $ in T3 - si memorizza M[] $ $ alla destra di h $ in T $ - si copia il contenuto di T 3 alla destra di h $ M[] $ $ in T 3
Equivalenza dei modelli di calcolo (RAM # MT) Per quanto riguarda la valutazione dei costi in questo caso c è una notevole differenza qualora si consideri il costo logaritmico ed il costo uniforme. Nel caso del costo logaritmico, essendo questa una valutazione più accurata, se la macchina RAM lavora in un tempo T la MT lavora in un tempo O(T 2 ). Si ha infatti che la lunghezza del nastro T della MT avrà una lunghezza massima limitata da tmax ciò significa che nel caso peggiore ogni istruzione della RAM, simulata sulla MT, necessita di accedere a tutto il nastro. D altra parte ogni istruzione della RAM necessita di impiegare almeno un log(i) per l accesso all indirizzo del dato e log M[i] per l accesso al dato. Pertanto la MT deve pagare lo stesso tempo T della macchina RAM per l accesso ai dati più un fattore tmax < T per l esecuzione dell istruzione, da qui la valutazione O(T 2 ). Questo ragionamento non è valido se si valuta la RAM con costi uniformi, infatti una macchina a costi uniformi può valutare numeri 2 2n in un tempo O(n) [cioé calcola un numero di taglia esponenziale in un tempo lineare], mentre una MT richiederà 2 n celle per memorizzarli e leggerli, quindi necessiterà di almeno O(2 n ) passi per poterli calcolare. Ne consegue che le due complessità non sono polinomialmente correlate.
Equivalenza dei modelli di calcolo La macchina RAM con costi logaritmici e la macchina di Turing multinastro sono correlate polinomialmente. Se la complessità di un modello è O(T) la complessità dell altro è O(P. T) dove P è una funzione polinomiale Tutti i modelli computazionali adottando ipotesi ragionevoli per le misure di costo, hanno funzioni di complessità spaziale e temporale correlate polinomialmente. (Quest ultimo enunciato è considerato il corrispettivo della tesi di Church per la complessità computazionale).