Está en la página 1de 6

Universidad Nacional de Ingeniería

Facultad de Ciencias
Escuela Profesional de Ciencia de la Computación
Trabajo de la mitad del curso (25% del Examen
Parcial)
Curso: Introducción a la computación BIC01 Ciclo: 2021-1
Máquina de Turing
(Fuente: https://es.wikipedia.org/wiki/M%C3%A1quina_de_Turing)
Introducción:
Una máquina de Turing es un dispositivo que manipula símbolos sobre una tira de cinta de
acuerdo con una tabla de reglas. A pesar de su simplicidad, una máquina de Turing puede
ser adaptada para simular la lógica de cualquier algoritmo de computador y es
particularmente útil en la explicación de las funciones de una CPU dentro de un
computador.
La importancia de la máquina de Turing en la historia de la computación es doble: primero,
la máquina de Turing fue uno de los primeros (si no el primero) modelos teóricos para las
computadoras, viendo la luz en 1936. Segundo, estudiando sus propiedades abstractas, la
máquina de Turing ha servido de base para mucho desarrollo teórico en las ciencias de la
computación y en la teoría de la complejidad. Una razón para esto es que las máquinas de
Turing son simples, y por tanto amenas al análisis. Dicho esto, cabe aclarar que las
máquinas de Turing no son un modelo práctico para la computación en máquinas reales,
las cuales precisan modelos más rápidos como los basados en RAM.

Descripción informal:
La máquina de Turing modela matemáticamente a
una máquina que opera mecánicamente sobre una
cinta. En esta cinta hay símbolos que la máquina
puede leer y escribir, uno a la vez, usando un
cabezal lector/escritor de cinta. La operación está
completamente determinada por un conjunto finito
de instrucciones elementales como "en el estado 42,
si el símbolo visto es 0, escribe un 1; Si el símbolo
visto es 1, cambia al estado 17; en el estado 17, si el
símbolo visto es 0, escribe un 1 y cambia al estado
6; etc". En el artículo original ("Sobre números computables con una aplicación al
Entscheidungsproblem"), Turing no imagina un mecanismo, sino una persona a la que él
llama la "computadora", quien ejecuta servilmente estas reglas mecánicas.
Más precisamente, una máquina de Turing consta de:
1. Una cinta que se divide en celdas, una al lado de la otra. Cada celda contiene un símbolo
de algún alfabeto finito. El alfabeto contiene un símbolo especial llamado blanco (aquí
escrito como 'B') y uno o más símbolos adicionales. La cinta se supone que es
arbitrariamente extensible hacia la izquierda y hacia la derecha, es decir, la máquina de
Turing siempre es provista con tanta cinta como necesite para su computación. Las
celdas que no se hayan escrito previamente se asumen que están rellenas con el símbolo
blanco.
2. Un cabezal que puede leer y escribir símbolos en la cinta y mover la cinta a la izquierda
y a la derecha una (y sólo una) celda a la vez. En algunos modelos el cabezal se mueve y
la cinta es estacionaria.
3. Un registro de estado que almacena el estado de la máquina de Turing, uno de los
estados finitos. Hay un estado inicial especial con el que el registro de estado se inicia.
Turing escribe que estos estados reemplazan el "estado de la mente" en que
ordinariamente estaría una persona realizando cálculos.
4. Una tabla finita de instrucciones (llamada ocasionalmente como tabla de acción o
función de transición). Las instrucciones son usualmente 5-tuplas: qiaj→qi1aj1dk,, que,
dado el estado (qi) en que la máquina se encuentra actualmente y el símbolo (aj) que se
está leyendo en la cinta (el símbolo actualmente debajo del cabezal) le indica a la
máquina hacer lo siguiente en secuencia (para los modelos de 5-tupla):
• Borra o escribe un símbolo (reemplazando aj con aj1), y entonces
• Mueve el cabezal (que es descrito por dk y puede tener los valores: 'L' para un paso a
la izquierda, o 'R' para un paso a la derecha, o 'N' para permanecer en el mismo lugar)
y luego
• Asume el mismo o un nuevo estado como prescrito (ve al estado qi1).
Note que cada parte de la máquina — su estado y colecciones de símbolos — y sus acciones
— imprimir, borrar, movimiento de la cinta — es finito, discreto y distinguible; es la
cantidad potencialmente ilimitada de cinta lo que le da una cantidad ilimitada de espacio
de almacenamiento.

Definición formal
Una máquina de Turing es un modelo computacional que realiza una lectura/escritura de
manera automática sobre una entrada llamada cinta, generando una salida en esta misma.
Este modelo está formado por un alfabeto de entrada y uno de salida, un símbolo especial
llamado blanco (normalmente b, ∆ o 0), un conjunto de estados finitos y un conjunto de
transiciones entre dichos estados. Su funcionamiento se basa en una función de transición,
que recibe un estado inicial y una cadena de caracteres (la cinta, la cual puede ser infinita)
pertenecientes al alfabeto de entrada. La máquina va leyendo una celda de la cinta en cada
paso, borrando el símbolo en el que se encuentra posicionado su cabezal y escribiendo un
nuevo símbolo perteneciente al alfabeto de salida, para luego desplazar el cabezal a la
izquierda o a la derecha (solo una celda a la vez). Esto se repite según se indique en la
función de transición, para finalmente detenerse en un estado final o de aceptación,
representando así la salida.
Una máquina de Turing con una sola cinta puede definirse como una 7-tupla

donde:
Funcionamiento de la máquina de Turing
La máquina de Turing consta de un cabezal
lector/escritor y una cinta infinita en la que el cabezal
lee el contenido, borra el contenido anterior y escribe
un nuevo valor. Las operaciones que se pueden
realizar en esta máquina se limitan a:
• Mover el cabezal lector/escritor hacia la derecha.
• Mover el cabezal lector/escritor hacia la izquierda.
El cómputo se determina a partir de una tabla de estados de la forma:
(estado, valor) →(nuevo estado, nuevo valor, dirección)
Esta tabla toma como parámetros el estado actual de la máquina y el carácter leído de la
cinta, dando la dirección para mover el cabezal, el nuevo estado de la máquina y el valor a
escribir en la cinta.
La memoria es la cinta de la máquina que se divide en espacios de trabajo denominados
celdas, donde se pueden escribir y leer símbolos. Inicialmente todas las celdas contienen
un símbolo especial denominado "blanco". Las instrucciones que determinan el
funcionamiento de la máquina tienen la forma, "si estamos en el estado x leyendo la
posición y, donde hay escrito el símbolo z, entonces este símbolo debe ser reemplazado por
este otro símbolo, y pasar a leer la celda siguiente, bien a la izquierda o bien a la derecha".
Ejemplo 1
• Definimos una máquina de Turing sobre el alfabeto {0,1}, donde 0 representa el símbolo
blanco.
• La máquina comenzará su proceso situada sobre un símbolo "1" de una serie.
• La máquina de Turing copiará el número de símbolos "1" que encuentre hasta el primer
blanco detrás de dicho símbolo blanco.
• Es decir, posiciona el cabezal sobre el 1 situado en el extremo izquierdo, doblará el
número de símbolos 1, con un 0 en medio. Así, si tenemos la entrada "111" devolverá
"1110111", con "1111" devolverá "111101111", y sucesivamente.
El conjunto de estados es {s1, s2, s3, s4, s5} y el estado inicial es s1. La tabla que describe la
función de transición es la siguiente:

Figura α

El funcionamiento de una computación de esta máquina puede


mostrarse con la siguiente tabla (en negrita se resalta la posición de
la cabeza lectora/escritora):
La máquina realiza su proceso por medio de un bucle, en el estado
inicial s1, reemplaza el primer 1 con un 0, y pasa al estado s2, con el
que avanza hacia la derecha, saltando los símbolos 1 hasta un 0 (que
debe existir), cuando lo encuentra pasa al estado s3, con este estado
avanza saltando los 1 hasta encontrar otro 0 (la primera vez no habrá
ningún 1).
Una vez en el extremo derecho, añade un 1. Después comienza el
proceso de retorno; con s4 vuelve a la izquierda saltando los 1, cuando
encuentra un 0 (en el medio de la secuencia), pasa a s5 que continúa
a la izquierda saltando los 1 hasta el 0 que se escribió al principio. Se
reemplaza de nuevo este 0 por 1, y pasa al símbolo siguiente, si es un
1, se pasa a otra iteración del bucle, pasando al estado s1 de nuevo. Si
es un símbolo 0, será el símbolo central, con lo que la máquina se
detiene al haber finalizado el cómputo.
Figura β
Vemos como el programa (figura α) ejecutado en la máquina de Turing, convierte la entrada 11 a
la salida 11011 (figura β). O sea, convierte el número 3 al número 123.
En general el programa realiza:

Entrada a la máquina (x) Salida de la máquina (y)


1 1 101 5
11 3 11011 27
111 7 1110111 119
1111 15 111101111 495
11111 31 11111011111 2015
111111 63 1111110111111 8127
1111111 127 111111101111111 32639

Donde el programa (figura α) genera aproximadamente y = 2x2 + 3x, pues el programa solo ha
probado los x de la tabla y el programa, diseñado de esa forma, es incapaz de probar con otras x,
por decir x = 100110.

Trabajo a Realizar:
• Programe la máquina de Turing, tal como el ejemplo 1. Utilizando el mismo alfabeto.
• La tabla que describe las operaciones (figura α) estará dentro del programa y cada vez que
deba cambiar las operaciones deberá cambiarla dentro del código.
• También dentro del programa debe estar el estado inicial de la máquina, y cada vez que quiera
un nuevo estado inicial, deberá escribirlo directamente en el programa.
• Es decir, su programa no recibe ningún dato de entrada durante la ejecución.
• Su programa muestra en pantalla los resultados parciales y el resultado final, tal como se ve en
la figura β.
• Incluya 3 casos útiles que se puedan resolver usando la máquina que ha programado. Es decir,
el programa genera una función donde se pueda comprobar para todas las x y NO como en el
ejemplo 1 que solo prueba algunas x. Por decir, obtener el triple de cualquier número natural.

El algoritmo debe ser representado en:


• Diagrama de flujo
• Programa en C++

Presentación del trabajo


La presentación del trabajo consiste en un informe corto (el limite máximo de hojas es 10), donde
elestudiante explica de forma detallada como elaboró el algoritmo paso a paso y explicando cada
una de las instrucciones que utilizó. El informe se entregará en un archivo pdf con el nombre
sección-nombre-apellido.pdf (el informe contiene el diagrama de flujo). El código en el lenguaje
C++ debe entregarse adjunto con el nombre sección-nombre-apellido.cpp.
Nota:
El trabajo debe desarrollarse haciendo uso de las librerías y estructuras incluidas en el silabo.
No se aceptarán el uso de librerías, funciones y otras estructuras que no se encuentren en el
silabo.

Referencias:
Puede revisar como guía estas referencias que usan una máquina de Turing con un alfabeto
diferente, pero su fundamento es el mismo. Recuerde su programa utilizará el alfabeto del
ejemplo 1 y no de estas referencias.
https://www.youtube.com/watch?v=NS-NQ5mCSs8
http://morphett.info/turing/#LoadMenu

También podría gustarte