LOS ALGORITMOS DEL MILLON DE DOLARES P VS NP DANIEL MEZA JUAN POSADA CESAR SOLINAS DAVID TOCA UNIVERSIDAD PILOTO DE COLOMBIA FACULTAD DE INGENIERIA DE SISTEMAS ANALISIS DE ALGORITMOS BOGOTA, 18 DE NOVIEMBRE DE 2010 LOS ALGORITMOS DEL MILLON DE DOLARES P VS NP TRABAJO FINAL INTEGRANTES: DANIEL MEZA JUAN POSADA CESAR SOLINAS DAVID TOCA DIRIGIDO A: PROFESORA DIANA MABEL DIAZ UNIVERSIDAD PILOTO DE COLOMBIA CONTENIDO 1. INTRODUCCIÓN. 2. OBJETIVOS. 3. ESTADO DEL ARTE. 4. DESCRIPCION DEL PROBLEMA. 5. EXPLICACION DEL ALGORITMO. 6. CONCLUSIONES. 7. BIBLIOGRAFIA INTRODUCCION En este trabajo se pretende dar a conocer el problema del millón de dólares p vs np definiendo cada uno de estas complejidades y los avances e intentos fallidos, probables en encontrar la solución a este problema. OBJETIVOS Dar a conocer el problema del millón de dólares p vs np. Comprender el significado de complejidad p. Comprender el significado de complejidad np. Explicar cuál es el significado del problema del millón de dólares p vs np. 3. Estado del arte PROBLEMAS P En teoría de la complejidad, la clase de complejidad de los problemas de decisión que pueden ser resueltos en tiempo polinómico calculado a partir de la entrada por una máquina de Turing determinista es llamada P. Los problemas contenidos en P son aquellos que pueden ser resueltos en forma razonablemente rápida. P suele ser la clase de problemas computacionales que son “eficientemente resolubles” o “tratables”. Aunque también existen problemas en P que no son tratables en términos prácticos; por ejemplo, unos requieren al menos n1000000 operaciones. Problemas notables en P Algunos problemas naturales son completos para P, incluyendo la conectividad (o la accesibilidad) en grafos no dirigidos. P contiene a la mayoría de problemas naturales, algoritmos de programación lineal, funciones simples,... Por ejemplo la suma de dos números naturales se resuelven en tiempo polinómico (para ser más exactos es de orden 2n). Entre los problemas que se pueden resolver en tiempo polinómico nos encontramos con diversas variedades como los lineales (n), los cuadráticos (n2), los cúbicos (n3),... Volviendo al ejemplo principal llegamos a la conclusión que la función de elevar al cuadrado está contenida en la clase P. Los problemas de complejidad p pertenecen a la clase de complejidad EXPTIME, los problemas de complejidad EXP es el conjunto de los problemas de decisión que pueden ser resueltos en una máquina de Turing determinista en tiempo O(2p(n)), donde p(n) es una función polinomial sobre n. Se sabe que P c NP c PSPACE c EXPTIME c EXPSPACE Y por el teorema de la jerarquía temporal: P c EXPTIME De manera que al menos una de las inclusiones de la primera línea debe ser estricta (se piensa que todas esas inclusiones son estrictas). Los problemas P-Completo Otra generalización de P es el tiempo polinómico no uniforme (P/Poly). Si un problema está en P/poly, entonces puede solucionarse en un tiempo polinomial determinado el cual, dado una cadena, este solo depende de la longitud de la entrada. A diferencia de NP, no se comprueban las cadenas defectuosas que entran en la máquina de Turing, puesto que no es un verificador. En otras palabras un problema de decisión está en P-completo si está en NP y todo problema de P puede ser reducido a él en tiempo poli logarítmico en una máquina paralela con un número polinómico de procesadores. Es decir, un problema A está en P-completo si para todo problema B en P, existen constantes c y k tales que B puede ser reducido en A en tiempo O((log n) c) utilizando O (nk), Generalmente se admite que la clase P contiene todos los problemas "resolubles" por una máquina secuencial y contiene la clase NC, que consiste en aquellos problemas que se pueden resolver eficientemente en una máquina paralela. Esto se debe a que las máquinas paralelas pueden simularse con máquinas secuenciales. No se sabe si NC=P. En otras palabras, no se sabe si existen problemas resolubles que son inherentemente secuenciales. Como generalmente se acepta que P no es igual a NP, generalmente se acepta también que NC y P son distintos. El más básico problema P-completo es este: dada una máquina de Turing, una entrada para esa máquina y un entero T (escrito en notación unaria), determinar si la máquina se para en los primeros T pasos. Queda claro que el problema es Pcompleto: Si se pudiera paralelizar una simulación general de una máquina secuencial, se tendría un método general para paralelizar cualquier programa que corre en esa máquina. Si este problema está en NC, todo problema de P también estaría en NC. Este problema ilustra una técnica común utilizada en la teoría de la P-completitud. El interés no está realmente en saber si un problema se puede resolver rápidamente en una máquina paralela. Solo interesa saber si la máquina paralela lo puede resolver muchísimo más rápidamente que la máquina secuencial. Por tanto, el problema también se puede replantear para que la versión secuencial esté en P. Es por ello que en este problema se requiere que T esté escrito en unario. Si un número 'T está escrito como un número binario, el algoritmo secuencial más obvio puede tomar tiempo 2n. En cambio, si T está escrito como un número unario (una cadena de n unos, para n=T), solo toma tiempo n. Al escribir T en unario en lugar de binario, se reduce el algoritmo obviamente secuencial de tiempo exponencial a lineal, lo cual coloca el problema en la categoría P. Por tanto estará en NC si y solo si es paralelizable, Se ha probado que muchos otros problemas son P-completos y por tanto es una idea generalmente aceptada que se trata de los problemas inherentemente secuenciales. Los siguientes problemas están en P-completo, sea tal y como están expresados, sea transformándolos a la forma de un problema de decisión: Problema del valor de una compuerta en un circuito (Circuit Value Problem o CVP) - Dado un circuito booleano, sus entradas y una compuerta lógica en el circuito, calcular la salida de la puerta CVP restringido- Igual al anterior, excepto que cada compuerta tiene dos entradas y dos salidas (F y su negación), el resto son compuertas NAND, la entrada de una compuerta viene de la capa inmediatamente anterior Programación lineal - Maximizar una función lineal sujeta a restricciones expresadas como desigualdades Búsqueda ordenada en profundidad - Dado un grafo con adyacencias fijas ordenadas, y dos nodos u y v, saber si el nodo u será visitado antes del nodo v en una búsqueda en profundidad Pertenencia a una gramática libre de contexto - Dado una gramática libre de contexto y una palabra, saber si la palabra pertenece al lenguaje generado por la gramática Juego de la vida - Dado una configuración general del juego de la vida de John Conway, una celda particular, y un entero T (en notación unaria), ¿estará la celda viva luego de T pasos? Para demostrar que un problema es P-completo, típicamente se intenta reducir a un problema P-completo, utilizando un algoritmo paralelo eficiente. Existen problemas que no han podido ser clasificados ni en P ni en NP-completo. Uno de ellos es el problema de factorización entera. Similarmente existen problemas que no se sabe si están en NC o en P-completo, pero que se piensa que son difíciles de paralelizar. Uno de ellos es el problema de decisión asociado al máximo común divisor de dos enteros en notación binaria. Las pruebas existenciales de algoritmos de tiempo polinómico Se conoce que algunos problemas son resolubles en tiempo polinómico, pero no se conoce ningún algoritmo concreto para solucionarlos. Por ejemplo, el teorema Robertson-Seymour garantiza que hay una lista finita de los menores permitidos que compone (por ejemplo) el conjunto de los grafos que pueden ser integrados sobre un toroide; además, Robertson y Seymour demostraron que hay una complejidad O (n3) en el algoritmo para determinar si un grafo tiene un grafo incluido. Esto nos da una prueba no constructiva de que hay un algoritmo de tiempo polinómico para determinar si dado un grafo puede ser integrado sobre un toroide, a pesar de no conocerse ningún algoritmo concreto para este problema. Ejemplos Camino Mínimo: encontrar el camino mínimo desde un vértice origen al resto de los vértices. Ciclo Euleriano: Encontrar un ciclo que pase por cada arco de un grafo una única vez. NP del inglés determinado). nondeterministic polynomial time (tiempo polinomial no “El concepto de "NP-completo" fue introducido por Stephen Cook en un artículo titulado 'The complexity of theorem-proving procedures' en las páginas 151-158 de Proceedings of the 3rd Annual ACM Symposium on Theory of Computing en 1971, aunque el término "NP-completo" como tal no aparece en el documento. En la conferencia de ciencias de la computación hubo un intenso debate entre los científicos de la computación sobre si los problemas NP-completos podían ser resueltos en tiempo polinómico o en una máquina de Turing determinista. John Hopcroft llevó a todos los asistentes de la conferencia a consenso concluyendo que el estudio sobre si los problemas NP-completos son resolubles en tiempo polinomial debiera ser pospuesto ya que nadie había conseguido probar formalmente sus hipótesis ni en un sentido ni en otro. Esto se conoce como el problema ¿P=NP? Nadie ha sido capaz aun de dar una respuesta final a este problema, haciéndolo uno de los grandes problemas no resueltos de la matemática. El Clay Mathematics Institute está ofreciendo una recompensa de un millón de dólares a quien logre dar una demostración de que P=NP o P≠NP. El Teorema de Cook demuestra que el problema de satisfacibilidad booleana es un problema NP-completo. En 1972, Richard Karp demostró que otros problemas eran también NP-completos (ver Lista de 21 problemas NP-completos de Karp). A partir de los resultados originales del Teorema de Cook, cientos de problemas se han descubierto que pertenecen también a NP-completo por reducciones desde otros problemas que previamente se habían demostrado NP-completos, muchos de estos problemas han sido recogidos en libro de 1979 de Garey and Johnson's Computers and Intractability: A Guide to NP-Completeness.” PROBLEMAS NP Es la clase de los problemas difíciles de resolver. Ejemplos: TSP, ciclo hamiltoniano, SAT. TSP (Travelling Salesman Problem) “Encontrar una permutación que represente el recorrido de una serie de ciudades de tal forma que todas sean visitadas (sólo una vez), minimizando la distancia total viajada.” Ejemplo: TSP para doce ciudades de Alemania. PROBLEMAS NP-COMPLETO Un problema interesante en teoría de grafos es el de isomorfismo de grafos: Dos grafos son isomorfos si se puede transformar uno en el otro simplemente renombrando los vértices. De los dos problemas siguientes: Isomorfismo de grafos: ¿Es el grafo G1 isomorfo al grafo G2? Isomorfismo de subgrafos: ¿Es el grafo G1 isomorfo a un subgrafo del grafo G2? El problema de isomorfismo de subgrafos es NP-completo. Se sospecha que el problema de isomorfismo de grafos no está ni en P ni en NP-completo, aunque está en NP. Se trata de un problema difícil, pero no tanto como para estar en NPcompleto. La forma más sencilla de demostrar que un nuevo problema es NP-completo es primero demostrar que está en NP y luego transformar polinomialmente un problema que ya esté en NP-completo a éste. Para ello resulta útil conocer algunos de los problemas para los que existe prueba de pertenencia a NPcompleto PROBLEMAS NP-HARD El problema de la suma de subconjuntos es un ejemplo de problema NP-hard y se define como sigue: dado un conjunto S de enteros, ¿existe un subconjunto no vacío de S cuyos elementos sumen cero? El problema del viajante El ejemplo clásico de problema "NP-completo" es el problema del viajante. Imagina que tienes que visitar 5 ciudades en un viaje de negocios. Conoces todas las distancias. ¿Cuál es el viaje más corto que puedes hacer volviendo al punto de partida? ¿ABCEDA? ¿ADECBA? Una solución posibilidades. muy clara es comprobar todas las Pero esto sólo funciona bien si el problema es pequeño. Y si añades una ciudad nueva tienes que probar otra vez todas las combinaciones. Así que este método lleva "tiempo factorial": t = n! Digamos que el programa pudiera resolver el problema de 20 ciudades en 1 segundo, entonces 21 ciudades llevarían unos 21 segundos. Y 22 ciudades llevarían unos 462 segundos (más de 7 minutos), y 30 ciudades llevarían 3 millones de años. ¡Ay! Por suerte, hay maneras especiales de dividir el problema en subproblemas (llamadas "programación dinámica"), pero aun así la mejor necesita "tiempo exponencial": t = 2n Así, un programa que resolviera el problema de 20 ciudades en 1 segundo tardaría unos 10 minutos en resolver el de 30 ciudades y para 60 ciudades tardaría 35,000 años. Pero si tuviéramos la "Computadora Asombrosa" de más arriba, ella podría, por ejemplo, hacer copias de sí misma para comprobar todas las posibilidades, y quizás resolver el problema muy rápidamente. Tiempo polinomial. Hace referencia al tiempo de complejidad algorítmica, que puede ser expresada en una función polinomica, por ejemplo O(N2) puede ser considerado como tiempo polinomial, sin embargo O(2n) no. Maquina de Turing. Es un modelo teórico matemático y computacional inventado por Alan turing, su funcionamiento se resume de la siguiente manera, la maquina recibe información de entrada por medio de una cinta, esta información se procesa, de modo que la maquina puede cambiar de estado, si la maquina alcanza un estado final, imprime el resultado. Está conformado por 1. 2. 3. 4. 5. Un conjunto finito de estado Un conjunto finito de símbolos, representando el alfabeto de la entrada Un estado inicial Un símbolo que determinado blanco Un conjunto de estados finales de aceptación Existen dos tipos de maquinas de turing Deterministica: solo sigue un camino computacional, es decir, un paso al tiempo (como los computadores actuales) No Deterministica: la maquina se bifurca en varias copias que siguen cada una de las posibles transiciones, es decir, puede dividirse de modo que puede procesar varios estados al tiempo. Tiempo de complejidad Es el tiempo que tarda un algoritmo en su ejecución, en función de la entrada AVANCES En los comienzos de agosto de 2010, Vinay Deolalikar anuncio una prueba de que P no es igual a NP. El escribió. ¨La prueba requiere unir las piezas desde múltiples áreas de las matemáticas. El mayor esfuerzo en construir esta prueba fue descubriendo una cadena de enlaces conceptuales entre distintos campos y observándolos a través de lentes normales. Después de esto se encontraban los obstáculos técnicos se tenían que encarar en cada nivel de la prueba. Este trabajo se construyo sobre contribuciones que muchos estimados investigadores han hecho sobre sus campos. En la presentación de este documento, fue mi intención de proveer al lector con una comprensión de las herramientas globales para esta prueba. Los detalles técnicos y computacionales dentro de los capítulos fueron minimizados tanto como fue posible.¨ Existe una lista de muchos documentos que tratan de contribuir la pregunta P versus NP. Solo hay un documento que ha aparecido en una revista, es el único que ha sido verificado por los expertos en el área, y las cuales son aceptadas por la comunidad de investigadores. El documento de Mihalis Yannakakis. Pero este documento no soluciona el problema, solo muestra que una cierta aproximación a solucionar esta pregunta nunca funcionara. 4. Descripción del problema Supongamos que queremos organizar los cuartos para dormir de un grupo de 400 estudiantes. El espacio es limitado y solo 100 de los estudiantes recibirá lugares en el dormitorio. Para complicar las cosas el decano ha dado una lista de parejas de estudiantes incompatibles, y ha pedido que ninguna pareja de esta lista aparezca en la opción final. Este es un ejemplo de lo que los científicos llaman un problema NP, el cual es fácil de chequear si una muestra dada de 100 estudiantes propuesta por un compañero de trabajo es satisfactoria (por ejemplo, ninguna pareja tomada del compañero de trabajo puede aparecer en la lista del decano.), De todas formas la tarea de generar tal lista de la nada parece tan difícil como tan completamente impráctica. Y es cierto, el número total de caminos de escoger 100 estudiantes de 400 aplicantes es mucho más grande que el número de átomos en el universo conocido. Por esto ninguna civilización futura podría nunca tener la esperanza de construir una supercomputadora capaz de resolver el problema por fuerza bruta; esto es, tratando chequear cualquier posible combinación de 100 estudiantes. De todas formas, esta aparente dificultad podría solo reflejar la falta de ingenuidad del programador. De hecho, uno de los problemas más impactantes en la ciencia de la computación es la forma de determinar si existen preguntas cuyas respuestas puedan ser fácilmente chequeadas, pero que requieran un tiempo demasiado largo para resolverlas por cualquier procedimiento directo. Problemas como el del decano parecen de este tipo, pero hasta ahora nadie ha sido capaz de probar que alguno de ellos es tan difícil como parecen, por ejemplo, que no hay una forma posible de generar una respuesta con la ayuda de un computador. Stephen Cool y Leonid Levin formularon el problema P (fácil de encontrar) versus NP (Fácil de chequear) independientemente en 1971. IMPORTANCIA DEL PROBLEMA Dentro de la clase de complejidad NP, encontramos muchos problemas interesantes, por ejemplo, está el problema de satisfacción de restricciones, y el problema del comerciante viajero, así que si se logra probar que N=NP, se encontraría una solución que resolvería en tiempo polinomio en los computadores actuales, esto sería aplicable por ejemplo, a la forma en que la información viaja por las redes, sin embargo, por otro lado, la criptografía también se basa en algoritmos NP, así que esto también implicaría que los actuales algoritmos de encriptación podrían ser hackeados fácilmente. Por otro lado, si se llega a comprobar que P!=NP, no tendría mucho impacto en las ciencias de la computación, y solo reafirmaría el hecho de que se necesita enfocar el trabajo en las computadoras cuánticas. 5. Explicación del algoritmo ¿Por qué es difícil probarlo? Es posible probar que una maquina de turing deterministica (MTD), es un caso especial de una maquina de turing no-deterministica (MTND), si simplemente se toma una MTD, como un subestado de MTND, así que en teoría cualquier problema resolvible por una MTD en un tiempo polinomial, también es resolvible por una MTND. También es posible, aunque muy difícil de probar, que una MTND puede emular una MTD, sin embargo esto implica modifico el tiempo, de polinomio a exponencial, y aun así esto no prueba que P!=NP. La primera complicación surge debido a que la MTND en realidad es solo teórica, así que es difícil comprobar, por ejemplo, que una MTND es más poderosa que una MTD. Si se desea probar que P=NP se debe probar a su vez que: Existe un set de problemas, pertenecientes a NP, tales que exista un algoritmo en el cual una MTND pueda resolver en un X-tiempo polinomial Existe un set de problemas, no pertenecientes a P, tales que no exista un algoritmo en el cual una MTD pueda resolver en un X tiempo polinomial Comúnmente se piensa que P!=NP, pero hasta que no esté comprobado, no se puede estar totalmente seguro. CONCLUSIONES Muchos de las soluciones a este problema no son aceptadas porque los métodos utilizados no están comprobados. No hay forma de comprobar el problema del milenio p vs np de forma práctica. Un hardware más avanzados ayudaría a encontrar una solución a este problema. 6. Bibliografía http://www.genciencia.com/matematicas/p-versus-np-nunca-lo-entendiste http://es.wikipedia.org/wiki/Clase_de_complejidad http://es.wikipedia.org/wiki/P-completo http://es.wikipedia.org/wiki/NP-completo http://es.wikipedia.org/wiki/NP_%28Complejidad_computacional%29 http://www.disfrutalasmatematicas.com/conjuntos/np-completo.html http://es.wikipedia.org/wiki/NP-completo http://es.wikipedia.org/wiki/NP-hard http://www.win.tue.nl/~gwoegi/P-versus-NP.htm http://gregbaker.ca/blog/2010/08/07/p-n-np/ http://www.win.tue.nl/~gwoegi/P-versus-NP/Deolalikar.pdf http://www.scribd.com/doc/35539144/pnp12pt http://www.claymath.org/millennium/P_vs_NP/ http://qntm.org/pnp