- Spostamento A, B in nastri L’algoritmo è stato definito su una Macchina di Turing a 4 nastri, di cui il primo contiene l’input. Esso parte da uno stato iniziale q0 in cui viene letto il carattere iniziale “f” simboleggiante appunto la funzione, e iniziando quindi lo spostamento/shift dei due numeri, A e B, per cui bisognerà fare la sottrazione in seguito; lo spostamento avviene sequenzialmente, per cui in q1 viene spostato A nel secondo nastro T2, in q2 viene spostato B nel terzo nastro mentre C verrá momentaneamente ignorato per poi utilizzarlo in seguito per il confronto finale. - Sottrazione chiusa Una volta ritrovatosi sull’= nel primo nastro e alla fine del secondo e terzo nastro, inizia la sottrazione prendendo cifra per cifra verso sinistra. La sottrazione viene effettuata principalmente in q4, q5 e q6: in q4, vengono realizzati i calcoli che non hanno bisogno di resto, tramite transizioni ricorsive in q5 e q6 viene invece effettuato il calcolo per il resto e si ritorna in q4 ogni volta. La sottrazione viene effettuata anche nel caso in cui A < B, ma in questo caso viene interrotta l’operazione appena si nota che le cifre di A sono minori rispetto a quelle di B, e di seguito in q7 viene cancellata la sottrazione finora calcolata, e viene sostituita con 0, cioè il risultato giusto. Nel caso in cui invece la sottrazione è avvenuta con successo, elimino gli 0 extra (caso esempio: 01000) dal risultato in q13, e dopo di che vado in q8 per assicurare il risultato della sottrazione in tutti i casi. Dopo di che, controllo anche gli 0 extra in C per effettuare il confronto senza errori. - Confronto In q9 inizia il confronto, in cui ricorsivamente si controlla cifra per cifra l’uguaglianza tra il primo (dalla prima cifra di C) e ultimo nastro (prima cifra del risultato della sottrazione). Nel caso in cui, tutte le cifre sono corrispondenti, si va in q11 per segnalare il confronto positivo e assegnare come risultato nel primo nastro “1”. Invece, se le cifre non sono corrispondenti, si va in q10 per segnalare il confronto negativo e assegnare come risultato nel primo nastro “0”. - Accettazione La macchina accetta con il primo nastro sulla posizione in cui è presente l’ “=”.
Calcolo Complessità Temporale Computazionale
Se definiamo i 4 nastri con T1, T2, T3 e T4, la macchina realizzata compie n passi per copiare l’input sui nastri e quindi per questo si ha complessità di tempo pari a O(n). Definiamo i tre numeri come A, B, e C. Sui tre nastri, la macchina compie n-4 + 1(non considerando i caratteri aggiuntivi M ( ) = e considerando il blank), quindi complessità O(n). La complessità di tutta la macchina sarà quindi O(n) + O(n) = O(2n) = O(n) (questo perché siamo in una macchina a multi nastro).
Calcolo Complessità Spaziale Computazionale
Se s(n) sono le celle della nostra macchina, la macchina deve scrivere su s(n) – n di esse almeno una volta (visto che n celle sono già occupate dall’input) Visto che abbiamo una macchina multi nastro, e quindi possiamo scrivere su al più di una cella ogni passo, abbiamo che, di conseguenza, TEMPO(f(n)) ⊆ SPAZIO(f(n)) (Ove TEMPO(f(n)) è complessità temporale e SPAZIO(f(n)) è complessità spaziale.