La complejidad espacial de reconocer los palíndromos de Watson-Crick


10

Tengo el siguiente problema algorítmico:

Determine el espacio Turing complejidad de reconocer cadenas de ADN que son palíndromos de Watson-Crick.

Los palíndromos de Watson-Crick son cuerdas cuyo complemento invertido es la cuerda original. El complemento se define en forma de letra, inspirado en el ADN: A es el complemento de T y C es el complemento de G. Un ejemplo simple para un palíndromo WC es ACGT.

Se me ocurrieron dos formas de resolver esto.

Uno requiere espacio.O(n)

  • Una vez que la máquina haya terminado de leer la entrada. La cinta de entrada debe copiarse a la cinta de trabajo en orden inverso.
  • Luego, la máquina leerá la entrada y las cintas de trabajo desde la izquierda y comparará cada entrada para verificar que la celda en la cinta de trabajo sea el complemento de la celda en la entrada. Esto requiere espacio.O(n)

El otro requiere espacio .O(logn)

  • Mientras lee la entrada. Cuente el número de entradas en la cinta de entrada.
  • Cuando la cinta de entrada termina de leer
    • copie el complemento de la carta en la cinta de trabajo
    • copie la letra L al final de la cinta de trabajo
  • (Punto de bucle) Si el contador = 0, borra la cinta de trabajo y escribe sí, luego detente
  • Si la cinta de entrada lee L
    • Mueva el cabezal de entrada hacia la izquierda el número de veces indicado por el contador (requiere un segundo contador)
  • Si la cinta de entrada lee R
    • Mueva el cabezal de entrada hacia la derecha por el número de veces indicado por el contador (requiere un segundo contador)
  • Si la celda que contiene el valor en la cinta de trabajo coincide con la celda actual en la cinta de entrada
    • disminuir el contador por dos
    • Mueva uno hacia la izquierda o hacia la derecha dependiendo de si R o L están en la cinta de trabajo respectivamente
    • copie el Complemento de L o R en la cinta de trabajo en lugar de la L o R actual
    • continuar el ciclo
  • Si los valores no coinciden, borre la cinta de trabajo y escriba no, luego detenga

Esto resulta en aproximadamente espacio para almacenar ambos contadores, el complemento actual y el valor L o R.2logn+2

Mi problema

El primero requiere tanto tiempo lineal como espacio. El segundo requiere tiempo ylognespacio. La cita me dio el problema y se me ocurrieron estos dos enfoques, pero no sé cuál elegir. Solo necesito darle al espacio la complejidad del problema.n22logn

La razón por la que estoy confundido

Tendería a decir que la segunda es la mejor opción, ya que es mejor en términos de tiempo, pero esa respuesta solo viene de que tengo suerte y se me ocurre un algoritmo. Parece que si quiero darle al espacio la complejidad de algo, no requeriría suerte para encontrar el algoritmo correcto. ¿Me estoy perdiendo de algo? ¿Debería incluso encontrar una solución al problema para responder a la complejidad del espacio?


Creo que la pregunta sería aún mejor si le dieras pseudocódigo para los algoritmos. Mire aquí para obtener ayuda sobre el formateo.
Raphael

Respuestas:


8

DSPACE(O(1))=REGchar

Para mostrar que un problema tiene una complejidad espacial específica, generalmente se necesita un algoritmo que tenga esa complejidad espacial. Esto puede requerir prueba y error, pero un mejor enfoque es tener una buena comprensión del problema que está viendo y una buena cantidad de experiencia en algoritmos y complejidad.

O(n2)

Sugerencia: ¿por qué usar espacio adicional, cuando puede usar el espacio ocupado por la entrada?

Sugerencia: deslice hacia adelante y hacia atrás a través de la cadena verificando un carácter a la vez: use el estado de la Máquina de Turing para recordar qué carácter está verificando y borre los caracteres que ya ha marcado.


eso es lo que hace mi segundo algoritmo. Para ir y venir a través de una cadena necesita contadores. Para una entrada de longitud necesita registrar espacio n para almacenar el contador. A menos que esté malinterpretando, pero parece que no podría ir y venir a través de la cadena sin hacer un seguimiento de qué parte se ha comparado
justausr

3
¿Por qué necesitas guardar un mostrador?
Dave Clarke

Si llego al final de la entrada y tiene 10 caracteres de longitud. Necesito retroceder 10 caracteres y guardar cuál fue el último carácter en la entrada. Una vez que llego al principio, comparo y copio el segundo personaje y me muevo hacia la derecha 7 veces y verifico que el segundo personaje coincida con el noveno. ¿Cómo sé que es 7 veces a menos que haya estado al día?
justausr

1
La cabeza solo puede estar en un lugar de la cinta a la vez, pero el estado de la TM puede recordar lo que la cabeza ha visto, y uno puede marcar la cinta con otros caracteres para indicar qué partes de la cinta ya han sido visitadas ( en ciertas fases del algoritmo).
Dave Clarke

1
No entiendo a qué te refieres. Si está borrando o marcando los caracteres en la secuencia de entrada (con la misma marca), puede determinar fácilmente cuándo ha terminado de procesar la cadena de entrada porque se queda sin cadena de entrada.
Dave Clarke

3

La forma en que se hace la pregunta debe llegar a un límite superior y un límite inferior en la complejidad del espacio.

O(Iniciar sesiónnorte)

unlsi2lunllω(1)O(Iniciar sesiónnorte)

CΓs(norte)norteΓs(norte)Ω(Iniciar sesiónnorte)


Tenga en cuenta que no necesita preocuparse por el complemento de letras, ya que esta operación es trivial, por lo que todo lo que funciona para palíndromos normales se puede modificar con algunos estados más para resolver su problema.


0

SΩ(n2/S)

Time×Space=Ω(n2).
TS=Θ(n2)TS=Θ(n2logn)Ω(logn)O(n2/logn)SΩ(n2/S)
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.