La complessità spaziale del riconoscimento dei palindromi di Watson-Crick


10

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.O(n)

  • 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 .O(n)

L'altro richiede spazio .O(logn)

  • 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.2logn+2

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. lognn22logn

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?


Penso che la domanda sarebbe ancora migliore se fornissi uno pseudocodice per gli algoritmi. Cerca qui aiuto sulla formattazione.
Raffaello

Risposte:


8

Dichiarazione di non responsabilità : il seguente algoritmo non utilizza il modello standard per la complessità dello spazio sublineare (vedere WP: DSPACE ), poiché scrive sul nastro di input. Inoltre, l'insieme di (Watson-Crick) palindromi non è in . Tuttavia, è una soluzione sul posto per molti scopi pratici (ad esempio se ogni lettera è a in C).DSPACE(O(1))=REGchar

Per dimostrare che un problema ha una complessità spaziale specifica, in genere è necessario elaborare un algoritmo con tale complessità spaziale. Ciò può richiedere tentativi ed errori, ma un approccio migliore è avere una buona comprensione del problema che si sta esaminando e una buona esperienza in algoritmi e complessità.

Per questo esempio particolare, esiste un terzo algoritmo che non necessita di spazio aggiuntivo e richiede complessità temporale . Questo algoritmo sarebbe spazio costante.O(n2)

Suggerimento: perché utilizzare spazio aggiuntivo, quando è possibile utilizzare lo spazio occupato dall'input?

Suggerimento: sfreccia avanti e indietro attraverso la stringa controllando un carattere alla volta - usa lo stato della Turing Machine per ricordare quale personaggio stai controllando e cancellare i caratteri che hai già controllato.


questo è quello che fa il mio secondo algoritmo. Per andare avanti e indietro attraverso una stringa sono necessari contatori. Per un input di lunghezza è necessario il registro n spazio per memorizzare il contatore. A meno che non mi fraintenda, ma sembra che non si possa andare avanti e indietro attraverso la corda senza tenere traccia di quale parte è stata confrontata
justausr

3
Perché è necessario conservare un contatore?
Dave Clarke,

Se raggiungo la fine dell'input ed è lungo 10 caratteri. Devo tornare indietro di 10 caratteri e salvare l'ultimo carattere inserito. Una volta arrivato all'inizio, ho confrontato e copiato il secondo carattere e mi sono spostato a destra 7 volte e ho verificato che il secondo carattere corrispondesse al nono. Come faccio a sapere che sono 7 volte a meno che non me ne stia tenendo il passo?
justausr,

1
La testina può trovarsi in un solo punto alla volta sul nastro, ma lo stato della TM può ricordare ciò che la testina ha visto e uno può contrassegnare il nastro con altri caratteri per indicare quali parti del nastro sono già state visitate ( in alcune fasi dell'algoritmo).
Dave Clarke,

1
Non capisco cosa intendi. Se si stanno cancellando o contrassegnando i caratteri nel flusso di input (con lo stesso segno), è possibile determinare facilmente quando si è terminata l'elaborazione della stringa di input perché si è esaurita la stringa di input.
Dave Clarke,

3

Nel modo in cui viene posta la domanda, dovresti trovare un limite superiore e un limite inferiore sulla complessità dello spazio.

La prima parte viene in genere presentata presentando un algoritmo per il tuo problema, ma funzionerebbe anche una riduzione ad altri problemi ben studiati (e indirettamente anche un algoritmo). Poiché non consideri una complessità combinata (tempo e spazio), conta solo lo spazio, anche se il tempo aumenta. Quindi hai trovato un limite superiore di .O(logn)

La seconda parte è di solito molto più complicata, ma puoi facilmente dimostrare che lo spazio costante non è sufficiente, perché ciò renderebbe la tua lingua regolare. Usando il lemma di pompaggio con, diciamo , dove è il numero di pompaggio assunto farà il trucco. Questo lascia ancora un grande divario tra e .alb2lallω(1)O(logn)

Ho trovato un esercizio (vedi Esercizio 6) che fornisce alcuni suggerimenti. Se interpreto correttamente il loro suggerimento, prova a provare che esistono diverse classi di equivalenza della relazione Myhill-Nerode per ciascuna dimensione di input. Questo è simile all'argomento secondo cui non puoi distinguere più di stringhe di lunghezza (dove è il tuo alfabeto a nastro e tua complessità spaziale). Questo ti darà un limite inferiore di .cΓs(n)nΓs(n)Ω(logn)


Si noti che non è necessario preoccuparsi del complemento delle lettere poiché questa operazione è banale, quindi tutto ciò che funziona per i normali palindromi può essere modificato con qualche altro stato per risolvere il problema.


0

È estremamente probabile che il classico compromesso spazio-tempo per i palindromi valga anche nel tuo caso. Questo risultato afferma che una macchina di Turing che riconosce i palindromi nello spazio deve impiegare il tempo , ovvero Nel tuo caso, il primo algoritmo ha e il secondo ha . Si può anche dimostrare che il limite inferiore per lo spazio è . Non sono stato in grado di trovare qual è il limite superiore migliore, ovvero se esiste un algoritmo che utilizza lo spazio e il tempo logaritmici , o in generale, per quali valori diΩ ( n 2 / S ) Tempo × Spazio = Ω ( n 2 ) . T S = Θ ( n 2 ) T S = Θ ( n 2 registro n ) Ω ( registro n ) O ( n 2 / registro n ) S Ω ( n 2 / S )SΩ(n2/S)

Time×Space=Ω(n2).
TS=Θ(n2)TS=Θ(n2logn)Ω(logn)O(n2/logn)Spossiamo raggiungere il tempo . Come esercizio, puoi provare a trovare altri algoritmi ibridi che interpolano i tuoi due algoritmi.Ω(n2/S)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.