Maquina de Turing 5. Fundamentos de algoritmos MI Elizabeth Fonseca Chávez matemático inglés Alan Turing Turing Definición de algoritmo: conjunto ordenado de operaciones que permite hallar la solución de un problema. Definición 2: Un procedimiento con un numero finito de pasos, cada uno de estos preciso y suficientemente simple, y cuya ejecución (la del procedimiento) siempre termina. La Máquina de Turing La máquina de Turing es una caja negra (tan simple como una máquina de escribir y tan compleja como un ser humano) capaz no sólo de leer y escribir un alfabeto de símbolos finito a partir de una cantidad finita pero muy grande de cinta de papel, sino de modificar su propia configuración o "estado mental". La máquina de Turing se convirtió en un instrumento ideal para probar si un procedimiento es efectivamente computable o no. Turing empleó su maquina y definió un algoritmo como cualquier conjunto de instrucciones para su máquina simple TURING Funcionamiento Una máquina de Turing es un dispositivo que transforma un INPUT en un OUTPUT después de algunos pasos. Consiste en una cabeza de lectura/escritura que examina una dimensión posiblemente infinita de una cinta bidireccional dividida en cuadros cada uno de los cuales está identificado con un 0 o un 1. Para llevar a cabo algún algoritmo, la máquina se inicializa en algún estado interno arbitrario. A continuación, se pone en marcha, la máquina lee el bit que se encuentra en ese momento en su interior y ejecuta alguna operación con ese bit (lo cambia o no, dependiendo de su estado interno). Después se mueve hacia la derecha o hacia la izquierda, y vuelve a procesar el siguiente bit de la misma manera. Al final se para, dejando el resultado al lado izquierdo. Dos elementos básicos: un control finito y una cinta infinita. TURING Cualquier función que pueda ser considerada de "modo natural" como computable puede ser computada por una máquina universal de Turing. Si bien la conjetura no ha podido ser demostrada, hasta el momento ha resistido todos los intentos de encontrar un contraejemplo. 1
Turing Funcionamiento de Maquina de Turing Computabilidad Una de las cuestiones mas estudiadas en la teoría de la computabilidadha sido la posibilidad de construir algoritmos que nos determinen si un determinado algoritmo posee o no una determinada propiedad. El identificar los problemas que son computables y los que no lo son tiene un considerable interés, pues indica el alcance y los límites de la computabilidad, y así demuestra los límites teóricos de los ordenadores. Todas las operaciones aritméticas son algoritmos (sumar, multiplicar, raíces cuadradas, elevar a una potencia ). Todas consisten en realizar un pequeño número de instrucciones que se repetirán cuantas veces sean necesarias para llegar a una conclusión. Entonces, un algoritmo se podría definir como un conjunto de instrucciones para realizar una tarea con las siguientes características: 1) Precisión: un algoritmo ha de estar definido con suficiente precisión para no albergar dudas sobre qué paso seguir. 2) Simplicidad: las reglas son sencillas. Cuando se trata de algoritmo, en apariencia sencillo, se puede descomponer en algoritmos más elementales. El de Euclides, por ejemplo, se puede descomponer en divisiones y agrupamientos divisor-resto. 3) Finitud: el número de reglas ha de ser finito mientras que el número de operaciones que pueden realizarse debe ser infinito. 4) Carácter mecánico: es un procedimiento mecánico, automático. Un algoritmo no requiere ninguna agudeza mental ni ingenio creativo, es algo que cualquier persona puede hacer con sólo tener la capacidad de seguir y obedecer reglas. 5) Procedimiento general: los algoritmos están orientados a la solución de problemas, pero no tendría mucho sentido diseñar uno para solucionar un único problema particular (imaginemos crear un algoritmo para multiplicar 45 por 678 y nada más). Está en la naturaleza del algoritmo ser un mecanismo lo más sencillo y económico posible para realizar correctamente muchas tareas. Sin embargo, como la dificultad para realizar muchas tareas diferentes por un mismo algoritmo es mucha, se los suele utilizar para resolver un tipo de problemas. Así, el algoritmo de Euclides soluciona todos los casos posibles del problema de encontrar el máximo común divisor. Tipos de Datos DATOS DATOS NUMERICOS: 128 1528-714 REALES 7.5 128.0-37.865 129.7 17000.50 DATOS ALFANUMERICOS: a, 5, ( apostrofes. CARÁCTER ABC Z, DIGITOS 0-9, SIMBOLOS ESPECIALES:! $%&, ETC.(no sirve para operaciones aritmeticas). Cadena de caracteres hola Patricio DATOS LOGICOS: booleanos 0, 1, verdad(true), falso(false). 2
Tipos de datos en C, C++, J Enteros: short, int, long y long long. 1-8 bytes inta; unsigned inta; signed long a; signed long a = 10000000; Reales:float4 bytes y el double8 bytes Reales de 4 bytes, se utiliza 1 bit para el signo, 8 bits para el exponente y 23 bits para el valor del número. floatb= 54.5; Caracteres: char1 byte entero de 0 a 255 chara; chara = 's'; chara = 48; Identificadores, const., var. Id: Identificadores, nombres de celdas de memoria que permite diferenciar una de otra. Reglas: Primer carácter debe ser letra, los demás pueden contener letras y números y _. Longitud<8 caracteres o 7. Constantes: Datos que no cambian durante la ejecución de un programa, nombre Id pero no de comandos. Variables: Objetos que pueden cambiar su valor Registros de Memoria Operaciones Izquierda a derecha. Paréntesis prioridad. 1-multiplicacion, 2-division 3 sumas/restas Contiene identificadores, constantes y variables Operaciones Op. con paréntesis 3
Dividir un problema grande en problemas pequeños. Seudocódigo Casi código. No representa a ningún lenguaje. Escribes en formato general que proceso tiene prioridad con respecto a otro colocando el numero de pasos. Ej. Llanta ponchada. Sol. Poner otra llanta. 1) checar que tenemos llanta de refacción 2) quitar tornillos 3) poner gato y elevar llanta 4) desmontar llanta ponchada 5) montar llanta de refacción 6) asegurar tornillo 4
Planteamiento de un problema Descubrir cual el problema o los problemas contenidos. Divide y vencerás. 1) primero escribo todo sobre el tema: Lluvia de ideas. 2) ordeno ideas interesantes y descarto las poco posibles 3) agrupo ideas en varios grupos (o procesos) 4) asigno prioridad a cada grupo (o procesos) 5) designo que procesos son comparación y repetición Convertir de base 2 a base 10, un numero de dos bits Ej1. Convertir de base 2 a base 10, un numero de dos bits. Lluvia de ideas Numero de dos bits binario:00 01 10 11b (opc2) De base 2 a base 10, n1*2^0+ n2*2^1 (opc1) Divido entre la base X para convertir a base 2 Base 10: 0,1,2,3,4,5,6,7,8,9 Etc. Convertir de base 2 a base 10, un numero de dos bits Seudocódigo 1. Dado dos bits n2 n1 en binario 2. En binario pueden ser 00,01,10 ó 11 3. La forma de convertirlos es n1*2^0+ n2*2^1 4. Por ejemplo: 01= n1=0, n2=1=>0*2^0+ 1*2^1 5. Sumo los resultados parciales: 0+1 (2^1=1) 6. Imprimo mi resultado en mis notas: base10=1 7. Pruebo que funcione para las opciones posibles. Realiza en casa Ejercicio: Convertir de base 10 a base 2 un numero de dos bits Ejercicio: Convertir de base 2 a base N no 10. 5
Diagramas de Flujo. BASICO Diagramas de Flujo de procesos Algoritmo Estructurado Buscar en tu problema los procesos que se ajustan a cada bloque: Secuencia, Selección y Repetición. Analizando los procesos Básicos 6