Sobre el problema P vs NP.

Hola a todos, estaba haciendo un trabajo sobre este tema, y me parece tan interesante que quiero compartirlo con vosotros.

Os comento resumidamente.

Supongo que todos alguna vez hayamos escuchado hablar de este problema, o hemos leído en alguna web la pregunta "¿P = NP?. Pero, ¿qué es P?, ¿qué es NP?

Bien, imaginemos el conjunto de los problemas resolubles por un computador (algunos problemas no son resolubles). Muchos de estos problemas, los problemas P, se pueden resolver en un tiempo razonable (tiempo polinomial) con los computadores actuales, como pueden ser, por ejemplo, calcular el cuadrado de un número o encontrar el individuo de más edad dentro de un red social. Sin embargo existen tambien problemas, los problemas NP, para los cuales no se conoce una solución efectiva (la mejor es de tiempo exponencial), como el famoso problema del viajante de comercio, o la búsqueda de la clave de un criptosistema.

Algunos estaréis pensando qué diablos estoy contando aquí. Otros quizás más perspicaces, y al leer la palabra criptosistema saben por donde van los tiros. El caso es que los matemáticos no han podido aún demostrar si P = NP (por lo cual existirían métodos más sencillos de resolver esos problemas complejos) o P != NP (por lo cual no existirían).

¿Qué pasaría si P = NP? Si P = NP se puede demostrar matemáticamente que cualquier problema NP se puede resolver en tiempo eficiente, y de dicha demostración se derivarían automáticamente dichos métodos de resolución.Para el mundo de la criptografía las consecuencias serían fatales. La seguridad de los criptosistemas actuales de clave pública radica, entre otras cosas, en que los métodos para calcular dicha clave forman parte de los problemas NP, por lo tanto no son resolubles en un tiempo polinomial. Si P = NP cualquiera podría calcular dichas claves de forma relativamente fácil, y la seguridad en internet se vería gravemente comprometida. Recuerdo las clases de mi profesor de complejidad y computabilidad, en las que nos contaba a sus alumnos que aquél que se arriesgase a hacer público este conocimiento podría encontrarse rápidamente con los servicios de inteligencia entrando por su ventana. Más ahora con el tema de WikiLeaks y los supuestos cables que circulan de forma cifrada como seguro de vida de Julian Assange entre otros. Supongo que mi profesor exageraba, pero quién sabe. Aún así los avances en criptografía cuántica podrían dar una segunda oportunidad a todos aquellos que depositaron sus esperanzas en la criptografía de clave pública.

Estos inconvenientes nos hacen pensar que tal vez sea positiva la incertidumbre que existe sobre el problema, o una demostración que evalúe a falso la igualdad, pero lo que ganaríamos si P = NP es sorprendente.

Todos los problemas computables tendrían una solución eficiente. Problemas como el del viajante de comercio, de vital importancia para el transporte de mercancías, sería de uso trivial por todo tipo de compañías y agencias. Las redes sociales tendrían a su mano una poderosa herramienta para encontrar personas con gustos similares, o se podrían encontrar, en cuestión de milésimas, miles de artículos relacionados con una palabra clave, ahorrando esto no sólo recursos naturales, estructurales o tecnológicos, sino aparcando para siempre la laboriosa tarea de etiquetado “tags” de temas, crucial para el correcto asentamiento de la web semántica. Y esto es sólo el principio.

En el mundo de la Inteligencia Artifical el impacto sería tambien muy positivo. Encontrar el algoritmo más eficiente para tareas como el reconocimiento del lenguaje, reconocimiento de patrones visuales, predicción de sucesos, y otras tareas sería trivial.

P = NP tendría también grandes implicaciones en el mundo de las matemáticas. La demostración automática de teoremas se hará accesible en su totalidad para la capacidad computacional de los computadores actuales, de manera rápida y eficaz. Tanto es así que la persona que lograse demostrar P = NP no sólo se haría con el millón de dolares otorgado por el Instituto Clay relativos a este problema, sino con todos los restantes.

Pero no empecemos a soñar. El mundo de la criptografía puede respirar tranquilo por el momento, ya que, en general, los expertos creen que P != NP.

¿Cuáles son las alternativas que tenemos para resolver problemas de modo eficiente?

Los explicaré muy brevemente, y si alguno os interesa en especial lo comentaré en otro hilo de este foro.

Computación cuántica, que utiliza algunas propiedades fundamentales del mundo microscópico que, traducidas correctamente a operaciones matemáticas, son capaces de resolver problemas. Algunas de estas propiedades encierran también muchos misterios en sí, como la correlación de pares EPR, por la cual dos partículas, cualesquiera del universo, están de algún modo conectadas, de modo que si modificamos una de las dos, la otra se ve también alterada. Hay quien dice que debido a esto un gemelo puede sentir aquello que acontece a su otro gemelo. (Lo veo más bien raro).

Computación celular basada en membranas. La idea es utilizar células como si se tratasen de un computador. Algunas de las operaciones básicas que realiza una célula se pueden traducir a operaciones matemáticas, de modo que codificando en términos celulares nuestro problema, y en el entorno adecuado, podemos resolver problemas. Esto es muy interesante, no tanto por la velocidad de cálculo de una célula, sino por la cantidad de células que pueden trabajar en tiempo paralelo a escala muy reducida. Todo el mundo sabe que un trabajo paralelizable se hace más rápido cuantás más personas intervengan en él.

Computación molecular con ADN. La idea en este caso es la de utilizar moléculas de ADN, y sus operaciones de división, unión, etc, para resolver problemas, al igual que en el caso anterior. Esto, a diferencia de lo anterior, no es sólo una posibilidad teórica, sino que ya se ha hecho en laboratorios. (Véase el experimento que Leonard Adleman realizó en 1994).

Un saludo a todos, y perdón por el tostón. Es un tema que me resulta muy interesante y que me gusta darlo a conocer.
wah_wah_69 escribió:El que lo resuelva se lleva un millón de $:

http://www.claymath.org/millennium/P_vs_NP/

http://www.claymath.org/millennium/


No sólo eso, sino que si lo resuelve positivamente, es decir P = NP, tendría una herramienta infalible para resolver, de tirona, todos lo demás xD.

El caso es que este problema es de los que cualquier aficionado puede resolver. Basta con que un aficionado a la programación encuentre un programa capaz de resolver uno de esos problemas NP (que los hay muy sencillos de entender) en tiempo P para que se demuestre P = NP... evidentemente esto no es tan sencillo, se cree que no se puede, pero no se sabe. Es como aquellos acertijos de pintar un dibujo sin levantar el boli, y sin pasar dos veces por el mismo sitio, salvo que no tiene forma matemática de saberse si se puede o no se puede hacer.

Si alguien se anima... explico aquí alguno de los problemas fáciles xD
4eVaH escribió:
wah_wah_69 escribió:El que lo resuelva se lleva un millón de $:

http://www.claymath.org/millennium/P_vs_NP/

http://www.claymath.org/millennium/


No sólo eso, sino que si lo resuelve positivamente, es decir P = NP, tendría una herramienta infalible para resolver, de tirona, todos lo demás xD.

El caso es que este problema es de los que cualquier aficionado puede resolver. Basta con que un aficionado a la programación encuentre un programa capaz de resolver uno de esos problemas NP (que los hay muy sencillos de entender) en tiempo P para que se demuestre P = NP... evidentemente esto no es tan sencillo, se cree que no se puede, pero no se sabe. Es como aquellos acertijos de pintar un dibujo sin levantar el boli, y sin pasar dos veces por el mismo sitio, salvo que no tiene forma matemática de saberse si se puede o no se puede hacer.

Si alguien se anima... explico aquí alguno de los problemas fáciles xD


Explica explica... que saldremos de pobres xD
Alkam escribió:
4eVaH escribió:
wah_wah_69 escribió:El que lo resuelva se lleva un millón de $:

http://www.claymath.org/millennium/P_vs_NP/

http://www.claymath.org/millennium/


No sólo eso, sino que si lo resuelve positivamente, es decir P = NP, tendría una herramienta infalible para resolver, de tirona, todos lo demás xD.

El caso es que este problema es de los que cualquier aficionado puede resolver. Basta con que un aficionado a la programación encuentre un programa capaz de resolver uno de esos problemas NP (que los hay muy sencillos de entender) en tiempo P para que se demuestre P = NP... evidentemente esto no es tan sencillo, se cree que no se puede, pero no se sabe. Es como aquellos acertijos de pintar un dibujo sin levantar el boli, y sin pasar dos veces por el mismo sitio, salvo que no tiene forma matemática de saberse si se puede o no se puede hacer.

Si alguien se anima... explico aquí alguno de los problemas fáciles xD


Explica explica... que saldremos de pobres xD


Ahora voy a ver si duermo algo, pero mañana os pongo aqui un problemita de los sencillos xD.
(mensaje borrado)
Esperando con ansia el problema.

Un apunte.
Algunas de estas propiedades encierran también muchos misterios en sí, como la correlación de pares EPR, por la cual dos partículas, cualesquiera del universo, están de algún modo conectadas, de modo que si modificamos una de las dos, la otra se ve también alterada. Hay quien dice que debido a esto un gemelo puede sentir aquello que acontece a su otro gemelo. (Lo veo más bien raro).

En cuanto modificas una y por tanto colapsas la ecuación de onda de la segunda dejan de estar entrelazados por lo que es imposible enviar información de esta forma (lo que sí que se puede es cifrar la información, en esto se basa la criptografía cuántica) por lo que lo de los gemelos es imposible.
Es que el que resuelva ese problema tiene la piedra filosofal de las matemáticas. Hace pocos meses hubo uno que decía que lo había resuelto, pero hacía muchas aguas.

Si queréis problemitas os pongo dos así a bote pronto :p :

1.- Sea un conjunto de números enteros dar una secuencia de sumas y restas de tal forma que todo el conjunto sume 0. Ejemplo: (1 , 8, 3, 6) sería 1 + 8 - 3 - 6.

2.- Este se llama el problema del cartero chino, y solucionarlo implicaría ahorrar millones de euros al año en combustible: sea un cartero y una ciudad dar el recorrido que tendría que hacer de forma que recorra lo menos posible en entregar todas las cartas. Evidentemente lo suyo es que no pase dos veces por la misma calle ;) (pista).

Como veréis es sencillísimo ver que una solución es correcta, pero para tamaños de problemas muy altos es desde un punto de vista temporal imposible dar lo que se llama una solución óptima (la mejor solución).

Un saludo.
Había una imagen de futurama que insinuaba algo al respecto:
Ésta xD:
Imagen

Hay que fijarse en el tamaño de los libros de p y np, abajo a la izquierda.
4eVaH escribió:... Basta con que un aficionado a la programación encuentre un programa capaz de resolver uno de esos problemas NP (que los hay muy sencillos de entender) en tiempo P para que se demuestre P = NP...


Ese no seria un aficionado a la programación sino un genio de la computación [sonrisa]
También les vale que se demuestre P!=NP que tampoco se ha demostrado

Nada si alguien quiere un problema npc muy sencillo de entender, el de la mochila
http://es.wikipedia.org/wiki/Problema_de_la_mochila

Sencillamente dados n objetos llenar un contenedor sin exceder su capacidad y maximizando el beneficio.
Por ejemplo imaginad que encontráis un tesoro, podéis cargar un determinado peso y queréis que el valor sea el máximo.
Lo que haría cualquiera es empezar por lo más ligero y caro (lo que viene a ser una heurística greedy o algoritmo voraz)
Eso da buenas soluciones pero no la mejor, hay alternativas mejores (algoritmos genéticos, colonias de hormigas, etc ...)
La que da una solución completa seria probar todas las combinaciones (o casi todas como el Ramificar y podar).
Si lo planteas como cargar o no n objetos veréis que las combinaciones serian 2^n
Si tienes 30 objetos y tardas 1 segundo en hacer el calculo necesitarías 34 años en probar todas las combinaciones y si fueran 31 el doble ...
4eVaH muchas gracias por este post, me parece un tema muy muy interesante, pero os dejo a vosotros lo de resolverlo ya que las matemáticas no son lo mío! :)

pd: lo de las torres de Hanoi creo que también es un problema de estos pero no me hagais mucho caso que no estoy seguro
amarco90 escribió:4eVaH muchas gracias por este post, me parece un tema muy muy interesante, pero os dejo a vosotros lo de resolverlo ya que las matemáticas no son lo mío! :)

pd: lo de las torres de Hanoi creo que también es un problema de estos pero no me hagais mucho caso que no estoy seguro


Si te hacemos caso, has dado en el clavo con lo de las torres de Hanoi.

Ahora estoy en la uni y no puedo buscaros el problema, pero ya que lo has comentado podrías explicarnoslo :D
Vale va, ahi va una pequeña explicación del problema de las torres de Hanoi:
tenemos tres barras y tres "fichas" dentro de la primera barra siendo la primera la más pequeña de todas la segunda es un poco mas grande y la de abajo de todo es la más grande de todas. Pues bien, el objetivo es mover las tres fichas a la última barra cambiando las fichas de lugar de una en una, pero hay que tener en cuenta que una ficha nunca puede estar por encima de una mas pequeña que ella (si alguien no lo ha entendido bien al final pongo un enlace al artículo de la wikipedia donde se ve mas claro).

Simplemente es eso, el problema se resuelve con (2^n)-1 movimientos, es decir es exponencial. Por ejemplo con tres fichas (2^3)-1=7 movimientos, con cuatro fichas (2^4)-1=15 movimientos, etc.

Y digo yo, no demuestra esto que P!=NP? ya el juego no se puede completar con menos de esos movimientos verdad?

Aquí teneis el artículo de la wikipedia para más información http://es.wikipedia.org/wiki/Torres_de_Han%C3%B3i
amarco90 escribió:Vale va, ahi va una pequeña explicación del problema de las torres de Hanoi:
tenemos tres barras y tres "fichas" dentro de la primera barra siendo la primera la más pequeña de todas la segunda es un poco mas grande y la de abajo de todo es la más grande de todas. Pues bien, el objetivo es mover las tres fichas a la última barra cambiando las fichas de lugar de una en una, pero hay que tener en cuenta que una ficha nunca puede estar por encima de una mas pequeña que ella (si alguien no lo ha entendido bien al final pongo un enlace al artículo de la wikipedia donde se ve mas claro).

Simplemente es eso, el problema se resuelve con (2^n)-1 movimientos, es decir es exponencial. Por ejemplo con tres fichas (2^3)-1=7 movimientos, con cuatro fichas (2^4)-1=15 movimientos, etc.

Y digo yo, no demuestra esto que P!=NP? ya el juego no se puede completar con menos de esos movimientos verdad?

Aquí teneis el artículo de la wikipedia para más información http://es.wikipedia.org/wiki/Torres_de_Han%C3%B3i


Demuestra que en esos movimientos tienes una solución, pero no que sea la óptima. Para 3 fichas está bastante claro, ¿pero quién te dice a ti que no hay una fórmula que sea polinómica y que para valores bajos llegue a mismos resultados, pero si ponemos 1millón de discos haya una diferencia abismal entre el número de movimientos a realizar entre una fórmula polinómica y una exponencial? De eso se trata todo este asunto, no has demostrado que P!=NP ni nada XD
4eVaH escribió:No sólo eso, sino que si lo resuelve positivamente, es decir P = NP, tendría una herramienta infalible para resolver, de tirona, todos lo demás xD.

El caso es que este problema es de los que cualquier aficionado puede resolver. Basta con que un aficionado a la programación encuentre un programa capaz de resolver uno de esos problemas NP (que los hay muy sencillos de entender) en tiempo P para que se demuestre P = NP... evidentemente esto no es tan sencillo, se cree que no se puede, pero no se sabe. Es como aquellos acertijos de pintar un dibujo sin levantar el boli, y sin pasar dos veces por el mismo sitio, salvo que no tiene forma matemática de saberse si se puede o no se puede hacer.

Si alguien se anima... explico aquí alguno de los problemas fáciles xD


¿No sería al reves? Es decir, demostrar con un programa que P != NP y ya lo demuestras, pero demostrar que un programa NP es P es muy fácil ya que cualquier programa P es NP. Entonces yo cojo un programa P, digo que es NP (se cumple) y digo "ah, como se ejecuta en tiempo P, es P, por lo tanto P = NP".

Había un matemático que supuestamente demostro 4-5 de los problemas del milenio pero las demostraciones dejaban mucho que desear.
Llegan los examenes no?? Yo ya mismo me pondre con analisis y diseño de algoritmos... cremita vamos Imagen
Skalextric escribió:Demuestra que en esos movimientos tienes una solución, pero no que sea la óptima...

cierto, gracias por la aclaración

Skalextric escribió:...no has demostrado que P!=NP ni nada XD

Eso ya lo intuía XD, como he dicho las mates no son lo mio
Zespris escribió:¿No sería al reves? Es decir, demostrar con un programa que P != NP y ya lo demuestras

Había un matemático que supuestamente demostro 4-5 de los problemas del milenio pero las demostraciones dejaban mucho que desear.


No sería al revés. Tu no puedes demostrar con un programa que P != NP, requiere de otras técnicas. Sin embargo si resuelves un problema NP en tiempo polinomial, por extensión se pueden resolver todos los problemas P en tiempo polinomial (gracias a una cosa que se llama reducibilidad en tiempo polinomial)

Zespris escribió:, pero demostrar que un programa NP es P es muy fácil ya que cualquier programa P es NP. Entonces yo cojo un programa P, digo que es NP (se cumple) y digo "ah, como se ejecuta en tiempo P, es P, por lo tanto P = NP".


Estás confundiendo algunos conceptos; pero tal vez he sido yo el que no me he expresado con claridad desde el principio del hilo. No quería ser demasiado técnico. No existe un programa P o un programa NP. Existen problemas P y problemas NP.

¿Qué es "formalmente" un problema P?

Un problema resoluble por una Máquina de Turing Determinista (MTD) en tiempo polinomial.

¿Qué es "formalmente" un problema NP?

Un problema resoluble por una Máquina de Turing No Determinista (MTND) en tiempo polinomial.

Todo problema P es NP. La solución es trivial.

¿Es todo problema NP, P?

No se sabe.
Siguiendo con las "formalidades", habría que hayar una traducción/simulación en tiempo polinomial de la MTD a la MNTD. O lo que es lo mismo, resolver ese problema NP con un algoritmo polinomial. Esto es lo que no se ha conseguido hacer aún, y que hacerlo sería lo equivalente a resolver uno de esos problemas NP que hemos comentado, en tiempo polinomial por nuestro ordenador, que si es simulable por una MTD en tiempo polinomial.

Si te fijas en el siguiente dibujo, P es NP, pero no todo NP es P. Hay problemas NP que por ahora no se hayan demostrado que son P.

P=NP significa que ambos conjuntos son iguales.


Imagen

Entrando en tantos formalismos no estoy tan fresco. Porque estos temas los vi en 3º en "compubilidad y complejidad", y el trabajo que estoy haciendo es de otra de 5º "tecnología, informática, y sociedad" en la que comento el tema de manera mas informal.
Bueno, yo soy aficionado a esto, soy de ingeniería pero otra rama...

Lo que yo me refiero es que si tu demuestras que un problema NP es resoluble mediante un tiempo P, no estarías demostrando que ese problema en particular es P, y has encontrado un nuevo algoritmo P para solucionar ESE problema. Pero no veo de ahí que se pueda extender a que todos los NP son P, a lo mejor sólo es el caso de 1 y no es una demostración general.

A mí es que me lo explicaron en plan: "P: solucion en tiempo polinomial", "NP: comprobar si una solucion es correcta en tiempo polinomial". De ahí puede que venga mi confusión.
Zespris escribió:A mí es que me lo explicaron en plan: "P: solucion en tiempo polinomial", "NP: comprobar si una solucion es correcta en tiempo polinomial". De ahí puede que venga mi confusión.


Hay muchas formas de expresar el problema, y todas son equivalentes, pero para entender esas equivalencias muchas veces hay que entender bastante del tema. A mi se me escapan algunas. Me lo explicaron como comenté anteriormente.

Zespris escribió:Lo que yo me refiero es que si tu demuestras que un problema NP es resoluble mediante un tiempo P, no estarías demostrando que ese problema en particular es P


Si lo demostrarías, tendrías algo equivalente a la definición de P. Es decir, habrías resuelto ese problema en tiempo P. Hablo de problema en modo abstracto, no de una instancia del problema.


Zespris escribió:y has encontrado un nuevo algoritmo P para solucionar ESE problema. Pero no veo de ahí que se pueda extender a que todos los NP son P, a lo mejor sólo es el caso de 1 y no es una demostración general.


Una de las cosas que veíamos en clase, es como transformar un problema NP cualquiera, en otro problema NP distinto (y además en tiempo polinomial). Por ejemplo imaginemos dos problemas NP tipicos, "el problema del viajante del comercio" (A) y "el problema del Clique"(B). Se pueden transformar las entradas de A, para que al ejecutar B con esa entrada, el resultado sea lo que hubiese dado A con su entrada real, y además en tiempo polinomial. Con esto, si resolvemos B en tiempo polinomial, B sería P, y como se transforma de A a B en tiempo polinomial, resolveríamos el problema A en tiempo polinomial.

Esta transformación polinomial se sabe hacer para transformar problemas NP que no estén en P, en problemas NP que no estén en P. Te darás cuenta que otra posible forma de demostrar P = NP sería hayar una transformación polinomial de ese problema NP que se cree que no está en P, con un problema P cualquiera.

JJoooooooooooder, How nerd I am.
4eVaH escribió:Una de las cosas que veíamos en clase, es como transformar un problema NP cualquiera, en otro problema NP distinto (y además en tiempo polinomial). Por ejemplo imaginemos dos problemas NP tipicos, "el problema del viajante del comercio" (A) y "el problema del Clique"(B). Se pueden transformar las entradas de A, para que al ejecutar B con esa entrada, el resultado sea lo que hubiese dado A con su entrada real, y además en tiempo polinomial. Con esto, si resolvemos B en tiempo polinomial, B sería P, y como se transforma de A a B en tiempo polinomial, resolveríamos el problema A en tiempo polinomial.

Esta transformación polinomial se sabe hacer para transformar problemas NP que no estén en P, en problemas NP que no estén en P. Te darás cuenta que otra posible forma de demostrar P = NP sería hayar una transformación polinomial de ese problema NP que se cree que no está en P, con un problema P cualquiera.

JJoooooooooooder, How nerd I am.


Esta parte no la sabía y me aclara todo.

(Sobretodo la última parte :p )
20 respuestas