8
Una máquina de Turing para el algoritmo “Quicksort” Edgar Fuentes Figueroa Resumen En base al algoritmo de ordenamiento Quicksort se elabora una máquina de Turing que utiliza este algoritmo para ordenar una lista de n números naturales. Después de explicar el concepto de complejidad del tiempo para una máquina de Turing, se calcula la complejidad del tiempo para la máquina de Quicksort. Por último, se da una descripción de la prueba de Turing y las primeras ideas acerca de la misma; se discute el problema de hacer el Test de Turing para el algoritmo Quicksort y para el problema de armar el cubo Rubik. Palabras clave: Alan Turing, Turing Test, Turing Machine, Quicksort, Time complexity. Metodología –.Revisión bibliográfica de los conceptos de máquina de Turing, complejidad del tiempo para una máquina de Turing y Test de Turing. A partir de los conocimientos obtenidos se desarrolla el algoritmo Quicksort en una máquina de Turing. La complejidad del tiempo se obtiene al correr la máquina con una entrada que genera el peor caso de ejecución. Resultados – El tiempo de ejecución es de orden cuadrático lo cual coincide con resultados analíticos. Originalidad – Desarrollo de una máquina de Turing propia para el algoritmo Quicksort.

Una máquina de Turing para el algoritmo “Quicksort” máquina de Turing para el algoritmo “Quicksort” Edgar Fuentes Figueroa Resumen En base al algoritmo de ordenamiento Quicksort

Embed Size (px)

Citation preview

Una máquina de Turing para el algoritmo “Quicksort” Edgar Fuentes Figueroa Resumen En base al algoritmo de ordenamiento Quicksort se elabora una máquina de Turing que utiliza este algoritmo para ordenar una lista de n números naturales. Después de explicar el concepto de complejidad del tiempo para una máquina de Turing, se calcula la complejidad del tiempo para la máquina de Quicksort. Por último, se da una descripción de la prueba de Turing y las primeras ideas acerca de la misma; se discute el problema de hacer el Test de Turing para el algoritmo Quicksort y para el problema de armar el cubo Rubik. Palabras clave: Alan Turing, Turing Test, Turing Machine, Quicksort, Time complexity. Metodología –.Revisión bibliográfica de los conceptos de máquina de Turing, complejidad del tiempo para una máquina de Turing y Test de Turing. A partir de los conocimientos obtenidos se desarrolla el algoritmo Quicksort en una máquina de Turing. La complejidad del tiempo se obtiene al correr la máquina con una entrada que genera el peor caso de ejecución. Resultados – El tiempo de ejecución es de orden cuadrático lo cual coincide con resultados analíticos. Originalidad – Desarrollo de una máquina de Turing propia para el algoritmo Quicksort.

2

INTRODUCTION: MÁQUINA DE TURING

Se presenta un modelo abstracto de cómputo diseñado en la década de 1930 por el matemático inglés Alan Turing [1]; este modelo es llamado Máquina de Turing. El objetivo de Turing era demostrar las limitaciones inherentes de los métodos algorítmicos. Mediante la formulación de un modelo capaz de ejecutar un algoritmo cualquiera, Turing pudo afirmar que cualquier deficiencia en el modelo era de hecho una deficiencia en el método algorítmico. A pesar de ser un modelo teórico, la Máquina de Turing anticipó muchas de las características de las computadoras modernas.

Turing consideró una “computadora humana” trabajando con lápiz y papel. Decidió que sin pérdida de generalidad, se podía suponer que la computadora humana operaba bajo reglas simples: Primero, las únicas cosas escritas en el papel son símbolos de un alfabeto fijo; segundo, cada decisión tomada por la computadora depende solo del símbolo que examina en su estado actual; tercero, aunque el estado de la computadora cambie como resultado de examinar diferentes símbolos, solo es posible tener un número finito de estados distintos.

Así, Turing definió los pasos primitivos que toma una computadora humana durante el proceso de cómputo:

1. Examinar un símbolo en el papel; 2. Borra un símbolo o reemplazarlo por otro; 3. Quitar atención a algún símbolo y prestar atención a otro símbolo cercano.

Una Máquina de Turing tiene un alfabeto finito de símbolos, y un conjunto finito de estados, que corresponden a los estados mentales de la computadora humana. El papel es una cinta lineal, que tiene un extremo izquierdo y es potencialmente infinita hacia la derecha. La cinta esta marcada por cuadrados, cada uno de estos contiene un símbolo; si un cuadrado no contiene símbolo, decimos que contiene el símbolo blanco. Consideramos que la lectura y escritura en la cinta se realiza por medio de un cabezal centrado en algún cuadrado de la cinta.

Un movimiento simple está determinado por el estado actual y el símbolo actual en la cinta, y consiste de tres partes:

1. Cambiar de un estado actual a otro estado que puede ser distinto o no; 2. Reemplazar un símbolo en el cuadrado actual por otro símbolo que puede ser distinto al

original; 3. Dejar el cabezal en el cuadrado actual, o moverlo a un cuadrado que este a la derecha o a la

izquierda (este último movimiento solo es posible si el cabezal no se encuentra ya en el extremo izquierdo de la cinta).

La cinta sirve como dispositivo de entrada (la entrada es una cadena finita de símbolos no blancos que están en la cinta antes de comenzar el cómputo), la memoria disponible para el cómputo, y el dispositivo de salida. La salida, si esta es relevante, es la cadena de símbolos que quedan en la cinta al terminar el cómputo.

En general, una Máquina de Turing tiene dos estados de alto: uno para denotar aceptación y otro para denotar rechazo, por ejemplo cuando ocurre algún tipo de error durante la ejecución.

Los conceptos anteriores permiten hacer la siguienteDefinición:Una Máquina de Turing es una 5-tupla 𝑇 = (𝑄, Σ, Γ, 𝑞!, 𝛿),

donde 𝑄 es un conjunto finito de estados. Los dos estados de alto ℎ! y ℎ! no son elementosde 𝑄. Σ, el alfabeto de entrada, y Γ el alfabeto de la cinta, son ambos conjuntos finitos con Σ ⊆ Γ . El símbolo blanco Δ no es un elemento de Γ. 𝑞!, el estado inicial, es un elemento de 𝑄. 𝛿 es la función de transición:

𝛿:𝑄× Γ ∪ Δ ⟶ 𝑄 ∪ ℎ! , ℎ! × Γ ∪ {Δ} ×{𝐷, 𝐼,𝐸} Para un estado 𝑝 ∈ 𝑄, un estado 𝑞 ∈ 𝑄 ∪ {ℎ! , ℎ!}, dos símbolos 𝑋,𝑌 ∈ Γ ∪ {∆}, y una dirección 𝑅 ∈ {𝐷, 𝐼,𝐸}, la fórmula

𝛿 𝑝,𝑋 = (𝑞,𝑌,𝑅)

3

indica que si 𝑇 está en el estado 𝑝 y el símbolo actual en el cabezal es 𝑋, la Máquina de Turing reemplaza 𝑋 por 𝑌 en el cuadrado actual, cambia al estado 𝑞, y mueve el cabezal un cuadrado hacia la derecha, la izquierda o lo deja estacionario, dependiendo de si 𝑅 es 𝐷, 𝐼 o 𝐸, respectivamente. Si el estado 𝑞 es ℎ! o ℎ!, se dice que este movimiento provoca que 𝑇 se detenga. En este estado de alto, 𝑇 no puede moverse, ya que 𝛿 esta definida en (𝑞,𝑌) solo si 𝑞 ∈ 𝑄. La transición

𝛿 𝑝,𝑋 = (𝑞,𝑌,𝑅) se representa por el diagrama

ALGORITMO DE ORDENAMIENTO “QUICKSORT”

Quicksort ha sido históricamente el algoritmo genérico de ordenamiento más rápido conocido en la práctica. Es un algoritmo recursivo del tipo “divide y vencerás” y es fácil de implementar.La idea básica es ordenar una lista siguiendo los pasos siguientes: se escoge un elemento arbitrario de la lista y se forman tres grupos; el primer grupo, tiene los elementos menores a aquel que se escogió; el segundo, los elementos iguales que el escogido; y el tercero, tiene los elementos más grandes. De forma recursiva, se ordenan el primer y el tercer grupo; luego, se concatenan todos los grupos. Comúnmente se evita crear el segundo grupo (de elementos iguales) cuando se codifica el algoritmo.

El algoritmo clásico de Quicksort, para ordenar un arreglo 𝑆, es como sigue

1. Si el número de elementos en 𝑆 es 0 o 1 entonces se ha terminado. 2. Escoger cualquier elemento 𝛾 en 𝑆 (𝛾 es llamado pivote). 3. Se parte 𝑆 − {𝛾} en dos grupos disjuntos: 𝑆! = {𝑥 ∈ 𝑆 − {𝛾}|𝑥 ≤ 𝛾} y  𝑆! = {𝑥 ∈ 𝑆 − {𝛾}|𝑥 ≥ 𝛾} 4. Se regresa quicksort(𝑆!) seguido de 𝛾, seguido de quicksort(𝑆!).

La ambigüedad dada en el paso 3, respecto a los elementos iguales que el pivote, se debe al diseño del algoritmo. Lo más deseable para mejorar el desempeño es que la mitad de estos elementos vaya a 𝑆! y la mitad a 𝑆!.

MÁQUINA DE TURING PARA EL ALGORITMO QUICKSORT

Es posible diseñar una máquina de Turing para el algoritmo Quicksort; de hecho, pueden existir diferentes máquinas para un mismo algoritmo. En esta sección, se describe una máquina de Turing para ordenar una lista de𝑛 números enteros positivos {1,2,3,… , 𝑛} y que no tiene elementos repetidos. Como se verá en la siguiente sección, con esta máquina es posible encontrar la complejidad del tiempo del algoritmo analizando el número de movimientos simples realizados.

Notación

Con el fin de presentar un diagrama más limpio y claro de leer, no se utilizó completamente la notación común para máquinas de Turing. Normalmente, cuando hay varios estados posibles después de cambiar el estado actual se dibuja una línea para cada uno de esos posibles estados; como la lista a ordenar puede tener 𝑛 elementos y cada uno de ellos representa un cambio de estado, no es posible hacer un dibujo con todos los estados posibles. Lo anterior se observa en el diagrama de la máquina de Turing propuesta donde los puntos suspensivos indican que hay estados intermedios. Como se observa en la figura 1, la ejecución de la máquina comienza con la búsqueda del pivote. Se inicia en el extremo izquierdo de la cinta, en el estado 𝑞! y leyendo el símbolo blanco. La función de transición indica que el cabezal se mueve a la derecha para leer el primer número de la lista; la entrada consiste del elemento blanco seguido de la lista y termina con el elemento blanco; como el pivote será el último elemento de la lista, el cabezal debe recorrer toda la lista hasta encontrar el elemento blanco y regresar un espacio para leer el pivote. En este trabajo, 𝑥 es un número cualquiera y por lo tanto, la instrucción 𝑥/𝑥,𝐷 indica que mientras se vea un número, este no se modifica y se avanza a la derecha. En este punto, es importante aclarar que esta instrucción debe darse como una

4

lista en la notación original; por lo tanto, no es correcto interpretar que la computadora es capaz de decidir cual elemento es un número y cual no. Se debe de pensar que en realidad la notación usada es una forma de abreviar esa lista sin perder de vista que se deben de especificar todos los elementos que aparecen en ella. Una vez que se ha leído el pivote, este se fija y el cabezal regresa al primer número de la lista. Si el pivote es 𝑛 se ejecuta la máquina 𝑇!, la cual esta definida por la figura 1.

Figura 1.- Esquema del algoritmo QuickSort

Nuevamente, en la figura 2 aparecen notaciones que se deben interpretar cuidadosamente. En la primera instrucción de la esquina superior izquierda debe darse una lista con todos los elementos menores que el pivote. Y en la instrucción que está debajo de la anterior lo correcto es que haya una flecha para cada elemento mayor que el pivote, sin embargo esto haría que el dibujo fuera muy grande y difícil de interpretar; aquí 𝑚 es un elemento cualquiera mayor que el pivote pero queda fijo.

Figura 2.- Maquina de Turing para el algoritmo QuickSort

5

De las explicaciones anteriores, se puede ver que los modelos presentados son solo ilustrativos en el funcionamiento de una máquina de Turing y que para utilizarse en un proceso real tendrían que reescribirse dada una lista particular. Para 𝑇! los elementos 𝑚, 𝑛, 𝑝, 𝑥 y 𝑥 son elementos fijos pero son cualquier número en la lista, es decir, para las instrucciones donde se presentan estos elementos también debería aparecer una flecha para cada valor posible. El funcionamiento de la máquina en un caso particular se esclarece con el siguiente ejemplo. Ejemplo Se utiliza el diagrama presentado para ordenar la lista {3,1,2}. Entonces la entrada debe ser ∆ 3 1|2|∆, donde el color rojo indica la posición del cabezal. Y en el estado inicial, el cabezal pasa de leer el primer símbolo blanco a leer el número 3. Mientras se lean los elementos 1, 2 o 3 el cabezal se mueve a la derecha; cuando se llega al símbolo blanco se regresa a la izquierda y lee el pivote que en este caso es el número 2. Ahora, con el pivote fijo, regresa al primer número de la lista y se ejecuta 𝑇!. Dentro de la máquina 𝑇! las opciones son: leer un número menor que el pivote y moverse a la derecha, ver el pivote y moverse a la izquierda; o leer un número 𝑚 mayor que el pivote, reescribir el símbolo blanco y moverse a la derecha. En este caso, el cabezal lee el número 𝑚 = 3 y lo cambia por el símbolo blanco para después avanzar a la derecha. La lista al momento es ∆ ∆ 1|2|∆. Ahora, el cabezal debe buscar el pivote moviéndose a la derecha por lo que cada vez que se lee un elemento de la lista de elementos diferentes que el pivote se sigue avanzando a la derecha. Aquí, el cabezal pasa por el número 1, luego el número 2 y se regresa a la izquierda. El cabezal está leyendo el número 𝑥 = 1, que es menor que el pivote, lo cambia por 𝑚 = 3 y se mueve a la izquierda. Se tiene ∆ ∆ 3|2|∆. Mientras se lea un número se mueve a la izquierda buscando el símbolo blanco. Cuando se encuentra el símbolo blanco se reemplaza por 𝑥 = 1 y se mueve a la derecha, de modo que ∆ 1 3|2|∆. Se regresa al estado inicial de 𝑇!. En este momento se lee un número mayor que el pivote, 𝑚 = 3, por lo que se reescribe el símbolo blanco moviéndose a la derecha. En seguida se observa el pivote y se mueve a la izquierda, ∆ 1 ∆|2|∆. Como el cabezal está en el símbolo blanco, se mueve a la derecha y se cambia el pivote por el número 3: ∆ 1 ∆|3|∆. Después de recorrer a la izquierda hasta encontrar el símbolo blanco y luego un lugar a la derecha, se inicia 𝑇! dentro de 𝑇!. Como el cabezal está leyendo el número 3 en el primer estado de 𝑇!, se mueve a la izquierda sin modificar el símbolo actual. Se tiene ∆ 1 ∆|3|∆ y esto indica a la máquina que el cabezal queda estacionario y se alcanza el estado ℎ! para 𝑇!. Así, continua la ejecución de 𝑇! en el estado que se encuentra justo debajo del recuadro de 𝑇!. El símbolo blanco indica que el cabezal se mueve hacia la izquierda para leer el número 1; este número, que es menor que el pivote, se fija y se llama 𝑝. Se recorre a la izquierda hasta encontrar el símbolo blanco; el primer elemento de la sublista a ordenar se encuentra haciendo un movimiento a la derecha. Entonces se inicia 𝑇! y con la cinta ∆ 1 ∆|3|∆. Nuevamente, se alcanza el estado ℎ! de 𝑇! después de dos movimientos. Ahora, el estado actual es el que se encuentra a la derecha del recuadro de 𝑇! y se tiene ∆ 1 ∆|3|∆. Solo resta encontrar el símbolo blanco mediante movimientos a la derecha. De este modo ∆ 1 ∆|3|∆ se cambia por ∆ 1 2|3|∆ y se detiene 𝑇! dejando una lista ordenada. COMPLEJIDAD DEL TIEMPO DE UNA MÁQUINA DE TURING

La complejidad el tiempo de un algoritmo es el número de operaciones que se realizan cuando la entrada tiene un tamaño fijo 𝑛. La importancia de conocer la complejidad del tiempo es saber de antemano si un algoritmo es adecuado para resolver un problema dado.

Si se tiene una máquina de Turing que ejecuta algún algoritmo es posible encontrar la complejidad del tiempo de dicho algoritmo mediante el conteo de número de movimientos realizados por la máquina cuando la entrada tiene tamaño fijo 𝑛.

Definición. Sea 𝑇 una máquina de Turing que eventualmente se detiene para cualquier entrada válida. La complejidad del tiempo de 𝑇 es la función 𝜏!:ℕ⟶ ℕ, donde 𝜏!(𝑛) se define al considerar, para cada entrada de tamaño 𝑛, el número de movimientos que hace 𝑇 en esa entrada antes de parar, y tomando 𝜏!(𝑛) como el máximo de esos números.

6

Complejidad del tiempo para el algoritmo Quicksort

En el algoritmo Quicksort el peor caso, donde se hacen más operaciones, es cuando el pivote es el menor elemento [2]. Considerando esto, se analiza el número de movimientos que realiza la máquina propuesta cuando la entrada tiene tamaño 𝑛.

En la etapa inicial se recorre la lista desde el símbolo blanco a la izquierda hasta el símbolo blanco a la derecha y de regreso; se hace un movimiento a la derecha antes de iniciar 𝑇!. Entonces la primera etapa lleva 2 𝑛 + 1 + 1 = 2𝑛 + 3 movimientos.

Es importante notar que, en este caso, se requiere ejecutar las máquinas 𝑇!,𝑇!,… ,𝑇! inevitablemente y en ese orden. Para 𝑇!, se inicia con el cabezal en el primer elemento de la lista y se mueve hasta el último, que es el pivote, en 𝑛 − 1 movimientos. Como no se encuentra ningún elemento más pequeño que el pivote, el cabezal regresa hasta la posición en la que inició y que ahora está marcada con el símbolo blanco; el cabezal realizó 𝑛 − 1 movimientos más. Ahora, se requiere la misma cantidad de movimientos para ir hasta el pivote y cambiarlo por el número 2. Finalmente, antes de iniciar 𝑇!, se realiza la misma cantidad de movimientos y uno más para dejar el cabezal en el primer elemento de la nueva sublista. En resumen, hasta el momento 𝑇! lleva 4 𝑛 − 1 + 1 movimientos.

Notando que la siguiente sublista tiene 𝑛 − 1 elementos se deduce que, antes de iniciar 𝑇!, la máquina 𝑇! realiza 4 𝑛 − 2 + 1 movimientos.

Así, los movimientos realizados por las máquinas antes de terminar son

𝑇!:        4 𝑛 − 1 + 1

𝑇!:        4 𝑛 − 2 + 1

𝑇!!!:        4 1 + 1

𝑇!:        1

Una vez que 𝑇! termina, las demás máquinas requieren dos movimientos para terminar, es decir, se suman 2(𝑛 − 1) movimientos a la cantidad ya calculada.

En total, se tiene que

𝜏! 𝑛 = 2𝑛 + 3 + 4 𝑖!!!

!!!

+ 𝑛 − 1 + 2 𝑛 − 1 = 2𝑛! + 3𝑛

Por lo tanto, la complejidad del tiempo para el algoritmo Quicksort es de orden cuadrático. Cabe mencionar que el análisis presentado por Weiss [2] también reporta un orden cuadrático en el peor caso.

EL TEST DE TURING

¿Pueden las máquinas pensar? Esta controversial pregunta surgió en la mente del matemático inglés Alan Turing. Al menos desde 1941, Turing ya se cuestionaba acerca de la inteligencia de las máquinas [3]. Se sabe que durante el tiempo de la Segunda Guerra mundial, Turing circuló un artículo sobre la inteligencia de las máquinas entre sus colegas en Betchley Park; sin duda este artículo fue el primero en tratar estos temas.

Aún no se conoce una interpretación correcta de las ideas de Turing. Mientras que algunos opinan que Turing da una definición de lo que es inteligencia, otros opinan que, sin necesidad de definir la integencia, Turing quería saber si era posible que una máquina emulara los procesos del cerebro humano.

El siguiente es un extracto de una transcripción de una emisión radiofónica efectuada en Enero de 1952; en ella Alan Turing responde a la pregunta “¿se puede decir propiamente que las máquinas piensan?”:

7

No quiero dar una definición de pensar, y si tuviera que hacerlo probablemente no podría decir nada más que es un tipo de zumbido que entró en mi cabeza. Pero realmente no veo la necesidad de acordar una definición. Lo importante es trazar una línea que divida las propiedades de un cerebro, o de un hombre, que queremos discutir y aquellas que no. Me gustaría sugerir un tipo de prueba que uno podría aplicarle a una máquina. Podría decirse que es una prueba para ver si una máquina piensa, pero es mejor evitar esa cuestión, y decir que las máquinas que aprueben son, digamos, máquinas de “Grado A”. La idea de esta prueba es que una máquina tiene que intentar y pretender que es un hombre, respondiendo las preguntas que le son dadas, y aprobará solo si la pretensión es razonablemente convincente. Una considerable proporción de un jurado, que no deben ser expertos en máquinas, deben ser convencidos por la pretensión. No se le permite al jurado ver la máquina –eso haría la prueba muy fácil. Así que la máquina esta apartada en una habitación lejana y el jurado puede hacerle preguntas, las cuales se le transmiten a la máquina y ella manda una respuesta mecanografiada. Las preguntas pueden tratar cualquier tema. Y las preguntas no necesitan realmente ser preguntas. Por ejemplo “Yo afirmo que tu eres una máquina”. De la misma forma, a la máquina se le permite todo tipo de trucos para aparentar ser humano, como esperar un poco antes de dar una respuesta, o cometer errores de ortografía, pero no puede hacer manchas en el papel. Sería mejor suponer que cada jurado tiene que juzgar varias veces, y algunas de esas veces realmente están tratando con un hombre y no con una máquina. Esto evitaría que dijeran “debe ser una máquina” cada vez sin la consideración apropiada.

Bueno, esta es mi prueba. Obviamente no estoy diciendo que en el presente las máquinas puedan pasar la prueba, o que no podrían. Mi sugerencia es simplemente que este asunto es lo que deberíamos discutir. No es lo mismo que preguntarse “¿Pueden las máquinas pensar?”, pero es bastante cercano para nuestro propósito, y tiene las mismas dificultades.

Aunque Turing comprende que las máquinas de su tiempo están lejos de poder imitar a un humano, se muestra optimista al predecir que para el fin de siglo sería posible programar una máquina que responda preguntas de tal forma que sea en extremo difícil adivinar si se trata de un hombre o una máquina.

La motivación para esta primera versión de la prueba de Turing, llamada el Juego de la Imitación, se explica a continuación. El juego se lleva a cabo entre un hombre (A), una mujer (B) y el interrogador (C) cuyo sexo es irrelevante. El interrogador permanece en una habitación separada de A y de B. El objetivo del interrogador es determinar cuál de los otros dos jugadores es la mujer, mientras que el objetivo del hombre y la mujer es convencer al interrogador de que él/ella es la mujer.

Turing afirmó que, en el esquema del Juego de la Imitación, la pregunta “¿pueden las máquinas pensar?” puede remplazarse por la pregunta “¿Qué pasará cuando una máquina toma la parte del jugador A en este juego? ¿El interrogador cometerá la misma cantidad de errores que cometía cuando jugaba con un hombre y una mujer?”. Así, la prueba de Turing trata de evaluar la habilidad de una máquina para imitar a un ser humano; en consecuencia, se genera una nueva versión del juego en donde (A) es una máquina, (B) un humano, y (C) es el interrogador que trata de determinar cuál de estas entidades con las que se comunica es el humano.

A lo largo de los años, se han presentado muchas objeciones contra el test de Turing; quizás las malas interpretaciones abundan porque no existen todas las especificaciones necesarias sobre la prueba. Turing nunca habló sobre un tiempo específico para la duración de la prueba. Ni siquiera acerca del número de jueces o el número mínimo de identificaciones correctas necesarias para aprobar.

Así mismo, al paso del tiempo se han diseñado máquinas con el simple propósito de aprobar el Test de Turing. En la versión moderna de la prueba se han registrado máquinas que logran engañar a una cierta cantidad de jueces pero no la suficiente. Fue hasta el año 2014 que una máquina obtuvo el “Grado A” al convencer a todos los jueces de que era un humano.

Consideremos el algoritmo de Quicksort y la máquina de Turing que se ha elaborado para dicho algoritmo. Supongamos que en el esquema de la prueba de Turing tomamos el papel de interrogador;

8

asumamos que podemos entregar una lista de elementos a ordenar a una entidad que se encuentra en otra habitación y en base a su respuesta debemos determinar si se trata de una máquina o un humano. ¿Cómo lograríamos hacer una identificación correcta? Por un lado, sabemos que si la lista es pequeña el humano no necesita hacer todos los movimientos que haría la máquina (que no puede funcionar correctamente si no ejecuta todos los pasos) y probablemente sea más veloz al responder. Pero por otro lado, para una lista suficientemente grande, tanto el humano como la máquina deben seguir el algoritmo para ser competentes. Esta discusión tiene el propósito de observar que cuando se utiliza la prueba de Turing para ver si una máquina es capaz de imitar a un humano en un problema específico (y no parecer humano en todo sentido) se presentan nuevas interrogantes y probablemente sea necesario hacer una versión muy particular de la prueba.

Otro problema interesante para aplicar el Test de Turing es la solución del cubo Rubik. Actualmente existe una variedad de robots capaces de armar el cubo Rubik en segundos; de igual forma, se tiene registro de humanos que resuelven el cubo Rubik en menos de 6 segundos. Si se tuviera que hacer el Test de Turing en este caso probablemente el tiempo de solución no sería un buen punto de referencia para tomar una decisión. En este momento, lo que interesa remarcar es el hecho de que, como lo predijo Turing, cada vez es más complejo diferenciar entre las acciones ejecutadas por una máquina y las acciones de un humano. La capacidad de las máquinas ha avanzado hasta un punto en el que para algunas labores en específico es imposible distinguir la ejecución de un hombre y la de una máquina. Planteando la interrogante de “¿cómo saber si este cubo Rubik fue armado por un robot o una persona?” se presenta las siguientes imágenes donde el cubo es armado por un hombre o una máquina.

CONCLUSIONES Aunque el esquema de la máquina de Turing, que se elaboró para el algoritmo Quicksort, tendría que rescribirse para un problema en específico se logró proponer una forma en la que una “computadora humana” podría resolver el problema de ordenar una lista de números. De cualquier modo, se alcanzó el objetivo principal que era obtener la complejidad del tiempo para el algoritmo de Quicksort. Cabe mencionar que dado un problema, se pueden construir diversas máquinas de Turing para resolver el mismo problema. En este sentido, no se afirma que la máquina de Turing que se elaboró en este trabajo sea la más eficiente o la menos eficiente; tan solo se señala que en este caso coincide la complejidad obtenida con los resultados analíticos que existen en la bibliografía. Por último, las menciones a la Prueba de Turing son una forma de poner en perspectiva el esfuerzo que se hace por minimizar la diferencia entre hombre y máquina y algunos de los avances que se han tenido en este campo. BIBLIOGRAPHY [1] MARTIN, John C. “Introduction to languages and the theory of computation”, McGraw Hill (2010). [2] WEISS, M. A. “Data structures and algorithm analysis”, Pearson (2014). [3] COPELAND, B. J. “The Turing Test: The elusive standard of artificial intelligence”, Springer (2003).