Cómo diseñar una máquina de Turing con este RE a ^ (2n + 1) b ^ (2n-1)

Deje que la máquina de Turing sea [matemáticas] M = [/ matemáticas] donde

[matemáticas] Q = \ {s_0, s_1, s_2, s_3, s_4, s_5, s_f, s_e \} [/ matemáticas]

[matemáticas] \ Gamma = \ {0, a, b \} [/ matemáticas]

[matemáticas] b = 0 [/ matemáticas]

[matemáticas] \ Sigma = \ {a, b \} [/ matemáticas]

[matemáticas] q_0 = s_0 [/ matemáticas]

[matemáticas] F = \ {s_f \} [/ matemáticas]

y [math] \ delta [/ math] es como sigue:

[math] s_0 [/ math] es el estado inicial, el estado donde necesitamos 2 a en la entrada. Las transiciones son

[matemáticas] \ delta [s_0, a] = q1, R, 0 [/ matemáticas]

[matemáticas] \ delta [s_0, b] = s_e [/ matemáticas]

[matemáticas] \ delta [s_0, 0] = s_e [/ matemáticas]

[math] s_e [/ math] es el estado de error, es decir, el estado que indica que la entrada es incorrecta. Las transiciones son

[matemáticas] \ delta [s_e, a] = s_e [/ matemáticas]

[matemáticas] \ delta [s_e, b] = s_e [/ matemáticas]

[matemáticas] \ delta [s_e, 0] = s_e [/ matemáticas]

[math] s_1 [/ math] es el estado en el que necesitamos 1 a más en la entrada. Las transiciones son

[matemáticas] \ delta [s_1, a] = s_2, R, 0 [/ matemáticas]

[matemáticas] \ delta [s_1, b] = s_e [/ matemáticas]

[matemáticas] \ delta [s_1, 0] = s_e [/ matemáticas]

[math] s_2 [/ math] es el estado en el que necesitamos ver [math] a ^ n + 2b ^ n [/ math] y esperamos que finalice la entrada para aceptar. Las transiciones son

[matemáticas] \ delta [s_2, a] = s_3, R [/ matemáticas]

[matemáticas] \ delta [s_2, b] = s_e [/ matemáticas]

[matemáticas] \ delta [s_2, 0] = q_f [/ matemáticas]

[math] s_3 [/ math] es el estado en el que necesitamos movernos al extremo derecho de la entrada para ver si hay más b o no. Las transiciones son

[matemáticas] \ delta [s_3, a] = s_3, R [/ matemáticas]

[matemáticas] \ delta [s_3, b] = s_3, R [/ matemáticas]

[matemáticas] \ delta [s_3, 0] = s_4, L [/ matemáticas]

[math] s_4 [/ math] es el estado para verificar si hay ab en el extremo derecho de la entrada. Las transiciones son

[matemáticas] \ delta [s_4, a] = s_e [/ matemáticas]

[matemáticas] \ delta [s_4, b] = s_5, L, 0 [/ matemáticas]

[matemáticas] \ delta [s_4, 0] = s_e [/ matemáticas]

[math] s_5 [/ math] es el estado para moverse al extremo izquierdo de la entrada. Las transiciones son

[matemáticas] \ delta [s_5, a] = s_5, L [/ matemáticas]

[matemáticas] \ delta [s_5, b] = s_5, L [/ matemáticas]

[matemáticas] \ delta [s_5, 0] = s_1, R [/ matemáticas]

Supongo que esta es una máquina de torneado con una sola cinta, siendo la entrada el estado inicial de esa cinta, y el resto está lleno de borrados que denoto con ‘x’. Supongo que la máquina comienza con la cabeza en el carácter más a la izquierda de la cinta.

La construcción formal es bastante tediosa, te diré lo esencial:

Necesita la máquina para trabajar en fases. En cada fase, la máquina hace lo siguiente:

Comenzar: si el personaje en la cabeza no es una ‘a’, rechazar.

  1. Reemplace la ‘a’ en la cabeza con el borrado ‘x’,
  2. Mueva la cabeza hacia la derecha hasta llegar al primer borrado al final de la cuerda,
  3. Mueva la cabeza una posición hacia la izquierda (ahora la cabeza está apuntando al final de la cuerda);
  4. Si es una ‘a’, vaya a la ‘fase de verificación final’, de lo contrario es una ‘b’; borrarlo (reemplazar con ‘x’)
  5. Mueve la cabeza hacia la izquierda hasta llegar a una ‘x’,
  6. Muévelo un paso a la derecha. Ahora estás al comienzo de la cadena restante; regrese al paso 1.

‘fase de verificación final’: haga dos pasos a la izquierda; si las letras son (‘a’, ‘x’) o (‘a’, ‘inicio de cinta’), acepte; de lo contrario rechazar.

More Interesting

¿Cómo se puede usar una computadora para resolver problemas de multiplicación y división al convertirlos en sumas y restas usando el registro?

¿De qué manera es mejor transferir valores variables en JavaScript?

¿Cómo funcionan los ajustes del algoritmo del generador de sueños?

Siendo un estudiante de matemáticas BSc sin cursos de computación, ¿cómo puedo aprender codificación para ser competitivo?

Apelo en matemáticas pero quiero obtener un título de CS porque me encanta la programación. ¿Qué tengo que hacer? ¿Hay alguna alternativa?

¿Es Python el mejor lenguaje de programación para las matemáticas aplicadas?

Cómo demostrar que existe un conjunto de movimientos para que todos los elementos de la matriz se conviertan en 0, donde en un movimiento tienes que elegir dos elementos distintos de cero y restar uno de los dos dada una condición

Si g (x) es una función unidireccional débil, ¿es f (x) = x (exclusivo o) g (x) una función unidireccional? Si es así, ¿puede ser fuerte?

¿Cuál es la función de un reóstato?

¿Podrán las computadoras multiplicarse 99,999,999,999 veces 999,999,999,999?

¿Es log n lo mismo que O (nlogn)?

Dado que la programación va a ser cada vez más abstracta, ¿necesitamos estudiar más matemáticas para ser buenos en eso?

¿Qué es una función de punto fijo y cuándo son útiles?

¿Qué es O (nlog (n)) de notación big-O? ¿Cuáles son algunos ejemplos de sus algoritmos?

¿Hasta qué punto puede comprimir un archivo comprimido de manera eficiente?