Ho il seguente problema algoritmico:
Determina la complessità di Turing nello spazio nel riconoscere stringhe di DNA che sono palindromi di Watson-Crick.
I palindromi di Watson-Crick sono stringhe il cui complemento invertito è la stringa originale. Il complemento è definito a lettere, ispirato al DNA: A è il complemento di T e C è il complemento di G. Un semplice esempio per un WC-palindromo è ACGT.
Ho escogitato due modi per risolvere questo.
Uno richiede spazio.
- Una volta che la macchina ha finito di leggere l'ingresso. Il nastro di input deve essere copiato sul nastro di lavoro in ordine inverso.
- La macchina leggerà quindi i nastri di input e di lavoro da sinistra e confronterà ogni voce per verificare che la cella nel nastro di lavoro sia il complimento della cella nell'input. Ciò richiede lo spazio .
L'altro richiede spazio .
- Durante la lettura dell'input. Contare il numero di voci sul nastro di input.
- Al termine della lettura del nastro di input
- copia il complemento della lettera sul nastro di lavoro
- copia la lettera L alla fine del nastro di lavoro
- (Punto loop) Se il contatore = 0, cancella il worktape e scrivi yes, quindi fermati
- Se il nastro di input indica L
- Spostare la testa di input verso sinistra per il numero di volte indicato dal contatore (richiede un secondo contatore)
- Se il nastro di input indica R
- Spostare la testa di input verso destra per il numero di volte indicato dal contatore (richiede un secondo contatore)
- Se la cella che contiene il valore sul worktape corrisponde alla cella corrente sul nastro di input
- decrementa il contatore di due
- Spostare uno a sinistra o a destra a seconda che R o L si trovi sul worktape rispettivamente
- copia il Complemento di L o R sul worktape al posto dell'attuale L o R
- continua il ciclo
- Se i valori non corrispondono, cancellare il worktape e scrivere no, quindi arrestare
Questo risulta a circa spazio per la memorizzazione di entrambi i contatori, il complemento corrente e il valore L o R.
Il mio problema
Il primo richiede sia tempo che spazio lineare. Il secondo richiede tempo e spazio. Mi è stato dato il problema dalla citazione e ho escogitato questi due approcci, ma non so quale seguire. Devo solo dare allo spazio la complessità del problema. logn
Il motivo per cui sono confuso
Tenderei a dire che la seconda è l'opzione migliore poiché è migliore in termini di tempo, ma quella risposta viene solo da me ottenere fortuna e inventare un algoritmo. Sembra che se voglio dare la complessità spaziale di qualcosa, non richiederebbe fortuna nel trovare l'algoritmo giusto. Mi sto perdendo qualcosa? Dovrei anche trovare una soluzione al problema per rispondere alla complessità dello spazio?