¿Cuál es una explicación de los problemas P versus NP y otros términos relacionados en términos simples?

¡Hola mamá! Ok, esto es todo! Primero, siéntate, respira hondo. Ten un poco de té. Esto te va a golpear fuerte. De acuerdo, aquí va.

La gente ha descubierto que algunos problemas son mucho más fáciles de resolver con una computadora que otros. Han dado nombres a grupos de problemas dependiendo de lo difíciles o fáciles que sean. ¿Tiene sentido? Bueno.

El primer grupo de problemas se llama P. Los problemas en P pueden ser resueltos por una computadora en un tiempo razonable. Ejemplo: ordenar una lista de nombres no es tanto trabajo para una computadora. Puedes recordarlo así: “Easy PEE-sy!” ¿Derecha?

No hay mucho que decir sobre eso. Son la aburrida carrera de los problemas del molino. Vamos a ver las cosas interesantes.

El siguiente grupo, llamado NP, contiene problemas por los cuales una computadora puede verificar rápidamente una solución propuesta. Por lo tanto, todos los problemas de P también son problemas de NP: si puede resolverlo, puede verificarlo, pero no necesariamente al revés. Para que puedas recordar NP así: “¡NO! ¡No es tan fácil!” Un ejemplo de un problema de NP es: “Dado este mapa de la ciudad, ¿hay una ruta de longitud X que visite todas estas direcciones”? Dada tal ruta, es fácil de verificar, pero no es fácil encontrar una.


Está bien mamá, esto era razonable, ¿verdad? Pero ahora se pone un poco raro. Porque resulta que hay algunos problemas que no sabemos cómo resolver de manera eficiente, pero si pudiéramos, podríamos usar la solución para resolver de inmediato todos los demás problemas en NP . Este santo grial de la informática se llama el grupo de problemas NP-hard. Encontrar una ruta de longitud X a través de un conjunto de direcciones es un ejemplo de un problema NP-difícil: sería extremadamente genial si alguien pudiera descubrir cómo hacerlo de manera eficiente (pero no contenga la respiración). Si descubres cómo resolver un problema NP-hard de manera eficiente, serás millonario. Todos querrán tocarte. ¡De verdad!

Algunos problemas NP-hard son tan difíciles que sus soluciones ni siquiera pueden verificarse de manera eficiente; de manera tan confusa que estos problemas no siempre están en NP. Para descartar a esos chicos malos, la gente llama al grupo de problemas NP-difíciles que todavía son fáciles de verificar problemas “NP-complete”.


De acuerdo mamá. Ahora sé que realmente quieres huir y hacer algo real. Pero todavía no puedes, porque todavía tengo que contarte sobre el mayor misterio de la informática, que es este: nadie sabe si la imagen que acabo de dibujar para ti es correcta: nadie sabe si hay NP -completar problemas que no están también en P! Todos están completamente convencidos de que existen, pero nadie ha podido demostrarlo. ¡Mastica eso!

P es la clase de problemas en los que puedes convencerte de la verdad o encontrar la respuesta fácilmente, por ejemplo, convencerte de que una lista de números está en orden.

NP es la clase de problemas en los que alguien que conoce la respuesta puede convencerte de la verdad fácilmente, por ejemplo, decidir si puedes meter suficientes juguetes favoritos en tu mochila; tal vez no puedas resolverlo tú mismo fácilmente, pero papá (que lo sabe todo) puede mostrarte cómo hacerlo (lo suficientemente rápido como para que no te aburras) y convencerte de que es posible.

A partir de esto, puede explicar que P está contenido en NP , ya que si puede encontrar la respuesta y convencerse de su verdad fácilmente, entonces alguien que sabe la respuesta puede, solo encuentre la respuesta usted mismo.

La pregunta P vs. NP pregunta si hay algunas tareas en NP que no están en P. En otras palabras, ¿es fundamentalmente más difícil encontrar una solución que verificarla?

Está bien, lo intentaré. Tenga en cuenta que esta será una respuesta un tanto lentosa, ya que esto se basa en muchas cosas con las que las personas que no son informáticas podrían no estar familiarizadas.

Paso 0: problemas y algoritmos

Un problema es básicamente lo que significa en términos simples, pero en términos más concretos. Específicamente, si se me ocurre una solución, es posible decidir inequívocamente si tenía razón o no.

Un ejemplo: Multiplicación polinómica
La mayoría de las personas están familiarizadas con los polinomios, se ven algo así como:
[matemáticas] 5x ^ 2 + 2x – 7 [/ matemáticas]

Entonces, es posible que también haya tenido que multiplicar dos polinomios, así:
[matemáticas] (5x ^ 2 + 2x – 7) [/ matemáticas] * [matemáticas] (8x ^ 4 – 7x ^ 3 + 1) [/ matemáticas]

Entonces nuestro problema es ahora: dados dos polinomios, multiplíquelos.
La solución de este problema es fácil de clasificar como correcta o incorrecta: no hay “depende” o “maybes”. Eso está bien. En general, este es el tipo de problemas que enfrentamos: problemas claros con respuestas definitivas.

Un ingenuo algoritmo
Bueno, el método más obvio es el que usamos normalmente: simplemente tome cada término del primer polinomio, multiplíquelo con cada término individual del segundo, y luego agregue todo lo que obtenga.

Esto es lo que se llama un algoritmo, una especie de receta para resolver el problema. Lo primero que nos preocupa es si un algoritmo es correcto, es decir, ¿siempre da la respuesta correcta? Pero una vez que lo hemos hecho, el problema relevante es: ¿qué tan rápido es? Y eso nos lleva a …

Paso 1: Complejidad del tiempo y notación Big O

Esto básicamente significa cuánto tiempo tarda el algoritmo en calcular la respuesta correcta dado un problema de tamaño n.

Por ejemplo, n en nuestro problema de multiplicación polinómica es el tamaño de los polinomios, es decir, el número de términos. Digamos que cada uno de ellos tiene n términos.
Veamos cómo funciona la complejidad del tiempo en este caso.

Como elegimos el primer término del primer polinomio, y lo multiplicamos con todos los n términos del segundo, y hacemos esto para cada uno de los n términos del primero, tomamos
[matemática] n * n = n ^ 2 [/ matemática] pasos.

Lo que esto significa es que si duplicamos el tamaño de nuestra entrada (n), ahora nos llevaría [matemática] 4n ^ 2 [/ matemática] pasos, cuatro veces más.

Por lo tanto, nuestro algoritmo de multiplicación simple es O (n ^ 2).
Estoy escondiendo muchas minucias, pero esto es esencialmente de lo que se trata la notación O grande: cuánto más tarda un algoritmo a medida que aumentamos el tamaño de la entrada.

Puede haber varios otros órdenes: O (log (n)), que es excelente, O (n) – lineal, esto sigue siendo bastante bueno, O (1) – es decir, el esfuerzo involucrado no aumenta en absoluto, y pronto.

Pero algunas de estas órdenes no nos gustan en absoluto.

Paso 2: ¡El orden exponencial es MALO!

Ahora que tenemos una idea sobre el tiempo de ejecución y el orden, hagamos algunos cálculos. Supongamos que tenemos un algoritmo que es de orden exponencial, es decir,
[matemáticas] O (2 ^ n) [/ matemáticas]
Digamos que un problema de tamaño 1, es decir, [matemática] n = 1 [/ matemática], nos toma 2 milisegundos para resolver. Bastante bien eh?
Hmm, veamos.

Ahora suponga que el tamaño del problema es 10. Eso en realidad nos lleva aproximadamente 2 ^ 10 milisegundos, o aproximadamente un segundo. Sigue yendo fuerte. ¿Qué sucede cuando el tamaño del problema llega a 20?
Ahora estamos hasta 1024 * 1024 ms, o aproximadamente 16 minutos. Quizás quieras tomar una taza de café.
En el momento en que estamos en [matemáticas] n = 30 [/ matemáticas], sin embargo, estamos viendo 12 días. Whoa! Y si desafortunadamente obtenemos n = 40, ¡eso nos llevará 34 años! No está bien.

Entonces, cuando el tamaño del problema pasó de 1 a 40, el tiempo para resolverlo pasó de 1 milisegundo a 34 años.

Y es por eso que odiamos absolutamente el orden exponencial: para algo más que pequeños problemas, simplemente no es lo suficientemente rápido para fines prácticos. Es tan malo que hace que algo como n ^ 2, n ^ 4 o incluso n ^ 10 se vea mejor en comparación.

Paso 3: P y NP

Y ahora estamos llegando al meollo de la cuestión. Hay todo un mundo de problemas, algunos fáciles, otros difíciles y otros intermedios. Básicamente los dividimos en dos partes (no necesariamente exclusivas):

  • P: Estos son los problemas que puede resolver razonablemente rápido. En la práctica, razonablemente rápido resulta ser un tiempo polinómico (n ^ 2, n ^ 3 y similares). La P significa Tiempo olinomial.
  • NP: Estos son problemas donde puedes compruebe si una solución dada es correcta o no razonablemente rápida. ¡El NP representa algo complicado que no vamos a abordar ahora mismo!

Paso 4: ¿P = NP?

Y así llegamos a la verdadera pregunta aquí:

Dado un problema cuyas soluciones puedo verificar rápidamente (NP), ¿también puedo encontrar un algoritmo que pueda resolver este problema rápidamente (P)?

De manera equivalente, ¿están todos los problemas en la clase NP también en la clase P?

Un ejemplo:

Suponga que se nos dan algunos enteros, como {−7, −3, −2, 5, 8}, y deseamos saber si algunos de estos enteros suman cero. En este ejemplo, la respuesta es “sí”, ya que el subconjunto de enteros {−3, −2, 5} corresponde a la suma (−3) + (−2) + 5 = 0. La tarea de decidir si El subconjunto con suma cero existe se denomina problema de suma de subconjuntos .

Ahora, dar una solución candidata es bastante sencillo aquí: ¡solo agréguelas! Pero, en realidad, encontrar la solución correcta implica mucho esfuerzo: tenemos que buscar muchas posibilidades (exponencial, en realidad).

¿La respuesta? No lo sabemos Este es un gran problema en la informática y en muchas otras áreas de la ciencia. Si supiéramos que P = NP, sabemos que es posible resolver un montón de problemas difíciles rápidamente, y eso, créanme, es un gran problema. Afectaría todo tipo de áreas dispares. Por ejemplo, la seguridad en las transacciones en línea se centra esencialmente en el hecho de que factorizar grandes cantidades es difícil. Pero si P = NP, ese ya no sería el caso.

Si resulta que P no es igual a NP, bueno, eso no cambiará las cosas tan radicalmente, pero seguirá siendo un gran problema. Por un lado, sabremos que simplemente no podemos resolver estos problemas rápidamente, por lo que podemos pasar a buscar otras vías: algoritmos aproximados, algoritmos probabilísticos, etc.

Paso 5: NP-completitud y NP-dureza

Ok, hora de diagramas elegantes:

Lo que está viendo es una representación de problemas P, NP, NP completos y NP difíciles. Puede ver que P está realmente contenido en NP, tiene sentido, ya que si puede resolverlo rápidamente, también puede verificar la solución rápidamente. Más allá de NP, tenemos NP-hard.

¿Qué significa ser NP-hard? Significa que si puede resolver un problema NP-difícil en tiempo polinómico, entonces puede resolver todos los problemas NP en tiempo polinómico.

Lo que esto significa es que los problemas NP pueden reducirse a problemas NP difíciles. Reducir el problema A a B significa que con un poco de modificación, también puedo adaptar un algoritmo para B a A. Entonces, por ejemplo, si pudiera resolver ecuaciones cúbicas [matemáticas] ax ^ 3 + bx ^ 2 + cx + d = 0 [/ matemáticas], entonces claramente también puedo resolver ecuaciones cuadráticas, ya que una ecuación cuadrática [matemáticas] ax ^ 2 + bx + c = 0 [/ math] es solo una ecuación cúbica con el término x ^ 3 cero. Entonces, he reducido la resolución de ecuaciones cuadráticas a la resolución de ecuaciones cúbicas.

Y, por último, los problemas de NP completo son, como puede ver en la imagen, problemas NP y NP. Es decir, puede reducir todos los problemas de NP a un problema de NP completo y, como beneficio adicional, también es fácil verificar la solución a un problema de NP completo.

Paso 6: tl; dr

Resumir :

  • P: problemas que pueden resolverse rápidamente.
  • NP: problemas cuyas soluciones se pueden verificar rápidamente.
  • P = NP: ¿podemos tener algoritmos rápidos para todos los problemas cuyas respuestas podemos verificar fácilmente?
  • NP-hard: resuelve uno de estos rápidamente, y puedes resolver todos los problemas de NP rápidamente.
  • NP-complete: NP-hard y las soluciones se pueden verificar fácilmente.

PD: No soy un experto en todo esto, y muchos detalles técnicos se han perdido en mi explicación. Entonces, si estás leyendo esto y eres alguien como Jessica Su, perdona cualquier imprecisión. Editar sugerencias bienvenido!

Editar: abordar las preguntas de Christopher VanLang en los comentarios de las preguntas:

¿Qué significa que un problema sea no determinista?

En el polinomio no determinista, no determinista es la computadora, no el problema. Los problemas son deterministas.

¿Cuál es la definición de un problema?

Un problema en este contexto se refiere a una definición precisa de lo que se nos da y lo que se supone que debemos hacer, sin duda ni subjetividad. Por ejemplo, el problema de la clasificación es:
Dada una lista de números, envíe los números en un orden no decreciente (es decir, ordénelos por tamaño). Lo importante es que las respuestas a los problemas son en blanco y negro: o tienen razón o no. No hay medidas a medias.

¿Cómo se relaciona todo esto con una máquina de Turing?

Máquinas de Turing por las que no necesita preocuparse. Una máquina de turing es básicamente un modelo teórico para una computadora.

Si P es un subconjunto de NP, ¿por qué molestarse en tener una clasificación P en primer lugar?

Bueno, esto es lo que hacemos: tomar una clase general y poner algunas de las cosas en ella bajo una etiqueta separada por conveniencia.
Las películas de acción son un subconjunto de películas. Las mujeres son un subconjunto de humanos. Los planetas son un subconjunto de cuerpos astronómicos. Las sillas son un subconjunto de muebles.
El hecho de que P sea un subconjunto de NP no significa que la noción de P no sea útil. Lo usamos para identificar problemas que se pueden resolver en tiempo polinómico. Otros problemas en NP pueden o no ser solucionables en tiempo polinómico.

¿Cuál es la definición de difícil?

La definición varía, pero cualquier cosa que requiera un tiempo exponencial o más largo para resolver se considera difícil, porque como dije en mi respuesta, a medida que aumenta el tamaño del problema, ¡el tiempo necesario para resolverlo aumenta como loco!

¿Cuál es la definición de fácil? Si P = NP, ¿por qué importa algo de esto?

Fácil es problemas que se pueden resolver en tiempo polinómico o mejor. Si P = NP esto es importante porque sabremos que podemos resolver estos problemas de NP en tiempo polinómico. Dado que NP contiene muchos problemas que tienen importancia en la vida real, es un gran problema.

Asumiendo que el niño haya jugado a Super Mario …

¿Sabes cómo a veces puedes quedarte atrapado en un escenario en Mario, y pasas horas y horas tratando de llegar al final del escenario, pero parece que no puedes resolverlo?

Pero luego tu amigo mayor, inteligente y con más experiencia, se acerca y te muestra cómo superar rápidamente la parte en la que estabas atrapado. De repente, a pesar de que has luchado con él durante mucho tiempo, ¡ahora todo se vuelve claro y parece realmente fácil!

Este problema es un ejemplo de lo que a algunos adultos les gusta llamar un problema de “NP completo”. ¡Se preocupan tanto por esto que le darán $ 1,000,000 (Premio del Milenio) si puede encontrar una manera rápida de superar cualquier etapa en Mario sin la ayuda de su amigo mayor!

Los adultos también tienen problemas difíciles, pero no tienen amigos mayores inteligentes para ayudarlos con sus problemas 🙁

Esta respuesta se basa en el reciente artículo [1203.1895] Los juegos clásicos de Nintendo son (NP-) Hard, que en realidad es coautor de Alan Guo, quien también escribió una respuesta a esta pregunta. Je

PAGS

Tomemos un problema de álgebra simple
[matemáticas] 2x + 1 = 7 [/ matemáticas]

y dárselo a un estudiante de secundaria y preguntar,

  1. ¿4 es una solución?
  2. ¿Cuál es la solución?

El estudiante de secundaria probablemente responderá ambas preguntas.

¿Cuánto tiempo tardará? Menos que para siempre.

Veredicto: podemos responder ambas preguntas. pags.

notario público

Démosle el mismo problema a un grupo de niños de jardín de infantes y preguntemos:

  1. ¿4 es una solución?
  2. ¿Cuál es la solución?

Lo más probable es que te miren perplejos y no puedan responder las preguntas. Si trabajas un poco para hacer que entiendan la pregunta, podrán responder la primera pregunta con confianza. La segunda pregunta necesitará más trabajo, probablemente infinita.

¿Cuánto tardarán los niños en responder la primera pregunta? Menos que para siempre.
¿Cuánto tiempo tardarán los niños en responder la segunda pregunta? No lo sabemos En este contexto, probablemente para siempre.

Veredicto: podemos responder la primera pregunta pero no la segunda. NOTARIO PÚBLICO.

NP-Complete

Hora de trabajar. Busquemos a algunos niños en la escuela cuyo maestro de álgebra les haya enseñado álgebra básica y haya cubierto un problema similar en la clase. Para todas estas personas, el problema es solucionable (en menos de un tiempo para siempre). pags.

Ahora, le preguntamos al maestro qué se enseñó exactamente en la clase y después de asegurarnos de que no se cubrieran las ecuaciones cuadráticas, diseñamos otro problema de álgebra,
[matemáticas] ab = 143; a + b = 24; Buscar: a, b. [/mates]

Parece NP. Para cualquier ayb, los niños podrán decirle si la solución es correcta de inmediato, pero no podrán calcular ayb.

Pregúnteles sobre la creación de ecuaciones con tres variables. Cuatro? ¿Cinco? ¿Diez? Los niños pueden ver rápidamente que resolver diez ecuaciones variables será imposible con su conocimiento actual. Además, los inteligentes entre ellos podrán ver que con cada aumento en el tamaño del problema (número de variables), el tiempo requerido para resolver el problema aumenta desproporcionadamente.

Desde la perspectiva de los estudiantes, todos estos problemas que no pueden resolver (porque aún no han aprendido a usar las herramientas para resolverlos) pero para los cuales pueden verificar las respuestas, son NP-Completos.

Veredicto: podemos responder la primera pregunta, pero no la segunda. Y es tan difícil como el problema NP más difícil. NP y NP-Complete.

Los problemas NP-completos son un subconjunto de problemas NP.

¿Por qué los problemas más difíciles necesitan un nombre diferente para ellos? Debido a que todos los problemas “más difíciles” son similares en el hecho de que si existe una solución para uno, existe una solución para todos. Si alguien dice que un problema es NP-Complete, inmediatamente sabemos que es un problema cuya solución no se conoce, pero si lo fuera, significaría que existe una solución para todos los demás problemas de NP-Complete, que, como sucede, son problemas importantes en todas las disciplinas de la ciencia.

Definir dureza

Digamos que el estudiante de secundaria adopta un enfoque de fuerza bruta y aplica cada número natural en la ecuación para ver si funciona. Con este algoritmo, tarda un día más en resolver cada variable adicional en nuestro problema ab. Entonces, si le pedimos que resuelva dos variables, tarda cuatro días. Para tres, lleva seis días. Por cuatro variables, ocho días, y así sucesivamente. Eso es difícil Nivel 1. [Supongamos que somos lo suficientemente amables como para no dar ecuaciones con solución en diez dígitos]

Cuando le damos un problema diferente:
[matemáticas] x ^ y = 25 [/ matemáticas]
Y aumentar el número de variables, toma el doble de tiempo con cada variable adicional. Entonces, si le pedimos que resuelva dos variables, tarda cuatro días. Por tres, él toma ocho días. Por cuatro variables, dieciséis días, y así sucesivamente. Eso es difícil Nivel 2.

Más difícil, en este contexto, solo significa, computacionalmente más caro, principalmente en términos de tiempo.

Es por eso que usan el término tiempo polinómico. El tiempo requerido por nuestras computadoras para resolver estos problemas complejos puede ser aproximado al número de pasos que necesita tomar cuando reducimos el problema usando un algoritmo. A partir de ese momento, podemos hablar fácilmente sobre un número como [matemática] n [/ matemática] o [matemática] n ^ 2 [/ matemática] o [matemática] n ^ 3 [/ matemática], que es un sustituto de el tiempo que tomará calcular la respuesta.

En el ejemplo anterior, el nivel difícil 1 es en realidad [matemáticas] n [/ matemáticas], el nivel difícil 2 es en realidad [matemáticas] n ^ 2 [/ matemáticas]. El nivel 2 se considera más difícil que el nivel 1.

Ahora, imagina a tu estudiante de la escuela diciendo: o, esto tomará una eternidad en resolver . ¿Puedes ver que alcanzará esa etapa más rápido en el segundo caso que en el primero?

Eso es más difícil: los problemas con mayor complejidad comienzan a tomar más y más tiempo para resolver en niveles cada vez más pequeños.

NP-Hard

Nuestro estudiante de secundaria clasificará todo por encima del álgebra básica como NP-Hard simplemente porque le tomará una eternidad resolver esos problemas.

A veces podrá confirmar si ciertas respuestas son correctas, aunque no pueda resolver el problema por sí mismo. Eso es NP-Complete y NP-Hard.

A veces ni siquiera podrá confirmar si las respuestas son correctas en menos de una eternidad. El problema no se clasificará como NP, sino que se seguirá clasificando como NP-hard.

Todos los problemas NP-Complete son problemas NP-hard.
Un problema NP-Hard no necesita ser NP.

Resumen

Esto no es un tldr. Si no leyó la respuesta anterior, el resumen no se aplicará.

Para cualquier problema hacemos dos preguntas:

  1. ¿Es una solución xa?
  2. ¿Cuál es la solución?

Si podemos responder ambas preguntas, es P.

Si no podemos responder ninguna de las preguntas, es NP-Hard.

Si podemos responder la primera, pero no la segunda, es NP. Ahora, tenemos que hacer una pregunta más: ¿qué tan difícil es? Si es tan difícil como el NP más duro (o más), entonces es NP-Completo y NP-Duro.

El caso de no poder responder la primera pregunta pero poder responder la segunda no tiene sentido.

Advertencias importantes:

Cada vez que digo, si podemos responder, significa que podemos responder en tiempo polinómico; un laico puede pensar en menos de un tiempo para siempre.

A veces no podemos responder en tiempo polinómico significa que no podemos demostrar que podemos responder en tiempo polinómico. Esta es una distinción importante, pero tomé la llamada para que sea simple.

En el nivel de abstracción de las clases problemáticas, no estamos buscando una solución específica. Estamos buscando una respuesta a “si existe una solución”.


Layman es la palabra clave. Esta es la explicación de un laico. Las matemáticas no dicen “menos que para siempre”. Todo está rigurosamente definido. La clasificación del problema se hace mucho más rigurosamente de lo que parece en mi respuesta. Toma esta publicación con un puñado de sal.

Observe que la clasificación del problema depende menos del problema en sí que del conocimiento de la persona / máquina / algoritmo que lo resuelve.

Cuando alguien clasifica el problema en un libro o en Wikipedia, lo está haciendo con el conocimiento colectivo de la humanidad, con los mejores algoritmos aplicados. Cuando decimos que algo es un problema de NP, no están hablando de estudiantes de secundaria, sino de toda la comunidad matemática, lo que significa que no podemos responder la segunda pregunta usando nuestras muchas computadoras y algoritmos inteligentes. Ya no se trata de aprender una nueva herramienta, se trata de descubrir una. Mantiene a muchas personas inteligentes despiertas por la noche.


Es P = NP es uno de los problemas del Milenio. Aquí está la descripción de su sitio y es muy clara, si ha leído la respuesta anterior:

Suponga que está organizando alojamiento para un grupo de cuatrocientos estudiantes universitarios. El espacio es limitado y solo cien de los estudiantes recibirán lugares en el dormitorio. Para complicar las cosas, el Decano le proporcionó una lista de pares de estudiantes incompatibles y solicitó que ningún par de esta lista aparezca en su elección final. Este es un ejemplo de lo que los informáticos llaman un problema NP, ya que es fácil verificar si una elección dada de cien estudiantes propuesta por un compañero de trabajo es satisfactoria (es decir, ningún par tomado de la lista de su compañero de trabajo también aparece en la lista de la oficina del decano), sin embargo, la tarea de generar dicha lista desde cero parece ser tan difícil como poco práctica. De hecho, ¡el número total de formas de elegir cien estudiantes de los cuatrocientos solicitantes es mayor que el número de átomos en el universo conocido! Por lo tanto, ninguna civilización futura podría esperar construir una supercomputadora capaz de resolver el problema por la fuerza bruta; es decir, comprobando cada combinación posible de 100 estudiantes. Sin embargo, esta aparente dificultad solo puede reflejar la falta de ingenio de su programador. De hecho, uno de los problemas pendientes en la informática es determinar si existen preguntas cuya respuesta puede verificarse rápidamente, pero que requieren un tiempo increíblemente largo para resolver mediante cualquier procedimiento directo. Los problemas como el mencionado anteriormente ciertamente parecen ser de este tipo, pero hasta ahora nadie ha logrado demostrar que ninguno de ellos es realmente tan difícil como parece, es decir, que realmente no hay una manera factible de generar una respuesta con el ayuda de una computadora. Stephen Cook y Leonid Levin formularon el problema P (es decir, fácil de encontrar) versus NP (es decir, fácil de verificar) de forma independiente en 1971.

Descripción oficial del problema: Página en claymath.org

Ya tiene 33 respuestas, ¡aquí hay una más con algunas actualizaciones contemporáneas!

Comenzaré con algunas definiciones y terminaré con algún pronóstico.

1) P y NP

P y NP son medidas de la complejidad computacional de un problema. La P tanto en P como en NP significa polinomio. P afirma que para resolver el problema se requiere un número de operaciones polinomiales en n, donde n es el “tamaño” del problema. NP ( N significa polinomio no determinista) es la complejidad de verificar una respuesta una vez que se da. NP dice que no importa cómo obtenga la respuesta, puede verificar la respuesta en complejidad polinómica.

Hablando libremente, P = NP indicaría que verificar una respuesta es, en cierta medida limitada, no más difícil que encontrar la respuesta en primer lugar. Esto suena loco en la superficie, por supuesto, ¡probar es más fácil que resolverlo! Por esta razón, la mayoría de las personas, incluido yo, creemos [matemáticas] {\ bf {P \ neq NP}}. [/ math] (Más sobre esto más adelante, a continuación).

¿Conoces álgebra lineal? Si es así, podemos tomar eso como un ejemplo. Si le doy un vector xy un vector b y le pregunto si es o no una solución para Ax = b para alguna matriz A, ¿cuántas operaciones requiere? [matemática] Respuesta: N ^ 2 [/ matemática] para una matriz N por N arbitraria. ¿Cuánto se tarda en encontrar x en primer lugar? Se necesita aproximadamente O ([matemática] N ^ 3) [/ matemática] donde O representa el orden, es decir, el costo va proporcional al cubo de N para el N. grande

Este ejemplo es muy común, donde el problema cuesta [matemática] N ^ k [/ matemática] para algún valor de k, y la verificación cuesta [matemática] N ^ l [/ matemática]. Está claro que [math] l \ leq k [/ math], en la práctica generalmente [math] l

Para los casos descritos en el párrafo anterior, el problema sería tanto P como NP . El NP = P? la conjetura pregunta: ¿Es siempre cierto que si podemos validar una respuesta con el recuento de operaciones polinomiales debemos ser capaces de resolverla en el recuento de operaciones polinomiales? Tenga en cuenta que a menudo es más difícil encontrar una respuesta que verificar una respuesta, ¿ N = NP ? la pregunta pregunta si el “más duro” que el pequeño es en el sentido de ser un polinomio. (Tenga en cuenta que un polinomio en N menos un polinomio en N es otro polinomio en N.)

En el borde exterior de P, justo debajo de EXP, se encuentra una clase llamada “cuasi-polinomial”, definida como exponencial con exponente log (N). Se mostró el año pasado, Algoritmo de referencia rompe la impasse de 30 años | Quanta Magazine dice que el problema del isomorfismo gráfico es cuasi polinomial. El problema aquí es: dado dos N por M matrices A y B es A = PB para alguna N por N matriz de permutación P? Esto es claramente NP . ¿Por qué? Debido a que la solución P está representada en las variables O ([matemáticas] N ^ 2) [/ matemáticas], pero dado que el tamaño (P) = N! se pensó que tal vez este era un problema de EXP .

2) NP completo

Los problemas completos de NP se encuentran en una clase interesante de problemas dentro de NP que si alguno de ellos puede resolverse en tiempo polinómico, entonces hemos demostrado que P = NP.

3) EXP: complejidad exponencial

Un problema es de complejidad exponencial si el recuento de la operación de solución es exponencial en el orden del problema. Un caso interesante es cuando resolver es de complejidad N !, donde! denota el factorial. (Esto es exponencial como se puede ver en la aproximación de Sterling).

4) BPP

Esta clase es una extensión de P, donde la solución se obtiene con probabilidad limitada en tiempo polinomial.

5) BQP

Esta clase es la extensión de BPP a las computadoras cuánticas.

Es obvio (después de reflexionar) que:

[matemáticas] {\ bf {P \ en NP, P \ en BPP \ en BQP}} [/ matemáticas]

El último es un poco no obvio, pero resulta que siempre se puede hacer que una computadora cuántica realice cálculos clásicos, aunque de manera ineficiente.

A menudo se dice que BPP es la clase de problemas “solucionables” en el mundo clásico y BQP es la clase de problemas “solucionables” en el mundo cuántico.


Pronóstico: la teoría de la complejidad es bastante obtusa. En el mundo real con problemas reales, existen algunas complejidades serias (uggh! Mal juego de palabras) al aplicar la teoría de la complejidad:

0) ¡Errores de redondeo! Por supuesto, encontrar la raíz cuadrada de un solo número no tiene solución, ¡ni siquiera es EXP! ¡Por lo tanto, tenemos que jugar para reasignar nuestros problemas reales en problemas “abstractos” para incluso comenzar a hablar de complejidad! Es importante recordar esto. Un ejemplo simple: si una matriz densa tiene un radio espectral de 10 ^ 100, ¡buena suerte para encontrar su inverso exacto!

1) Finito N: nada en las definiciones habla del recuento real de la operación, simplemente la complejidad asintótica. Por ejemplo, si N es grande, entonces, si un algoritmo está en EXP , debe ser más costoso desde el punto de vista computacional que si está en P. Esto se debe a que para cualquier constante real positiva a, b, c, d y número entero l tenemos [matemática] \ lim_ {N \ rightarrow \ infty} \ frac {a +… .. + bN ^ l} ​​{c exp (dN)} \ rightarrow 0. [/ math] Entonces, desde una perspectiva práctica, identificar a qué clase pertenece un algoritmo puede darte te consuela saber que lo difícil será resolverlo, pero no una convicción absoluta .

2) ¿ Wither Quantum? Bueno, la mayoría de las personas, incluido yo, creemos que BPP en otras palabras, es más fácil resolver algunos problemas con las computadoras cuánticas. En la actualidad, suponiendo que wikipedia es actual, vea, BQP, todavía no sabemos si Quantum es en la práctica demostrablemente mejor que clásico. La razón por la cual esta desigualdad es tan difícil de demostrar es que debe demostrar que no existe un algoritmo en uno de los espacios para un problema determinado. Por ejemplo, el algoritmo de Shor para factorizar es mucho más rápido que la factorización clásica utilizando los métodos más conocidos. Pero demostrar que ningún algoritmo clásico puede coincidir con Shor asintóticamente está abierto. Scott Aaronsen ha estado bromeando en los bordes aquí recientemente, y lo mejor que puedo decir es que ha demostrado BPP http://www.scottaaronson.com/pap … http: // http://www.scottaaronson.com/talks/bqpph.ppt , Complexity Zoo: problema de BA que separa óptimamente la computación cuántica de la informática clásica

3) Entonces, ¿P = NP? Creo que la respuesta es 1) no o 2) si se demuestra que la respuesta es sí, habrá algún aspecto patológico en la prueba que lo haga “poco interesante”. Es posible, por ejemplo, que se pueda demostrar que un problema de NP completo siempre se puede resolver en 2 ^ 699991 N ^ 1123123123123123123123 operaciones. ¡Eso sería una hazaña increíble de gimnasia mental pero sin ningún valor práctico en este universo!

Suposición: mamá conoce el Sudoku

(PAGS)

Tú: ¿Puedes ordenar estos cubos por color?
Mamá: Claro, es muy fácil.

(NP-Hard)

Tú: resuelve este rompecabezas de Sudoku
Mamá: está bien
Después de mucho tiempo ..
Lo resolví, pero fue difícil, me llevó mucho tiempo.

(NOTARIO PÚBLICO)

Usted: ¿Puede verificar si esta solución para el Sudoku es válida o correcta?
Mamá: eso es fácil

Los informáticos intentan agrupar los problemas basándose en lo “fácil” que es resolverlos con una computadora. Dado que hay una gran cantidad de problemas, para simplificar las cosas, los han agrupado en varias clases y los analizan.
Una de las clases de problemas se llama “Polinomio”, donde los problemas pueden resolverse de una manera “fácil”. Solo necesita potencia de cálculo proporcional a los datos de entrada. Por ejemplo, si tengo que organizar una lista de nombres en orden ascendente, puedo usar un algoritmo de clasificación que resolvería el problema sin muchos problemas. Si el número de nombres aumenta de 1 millón a 10 millones, solo necesito comprar un hardware adicional y las cosas irían.

Hay otra clase importante llamada “Polinomio no determinista” (NP) donde es fácil verificar la solución, pero difícil de resolver por sí mismo. La mayoría de los problemas interesantes para la humanidad pertenecen a esta clase. Digamos que estás tratando de resolver un problema para tu clase de matemáticas. Por lo general, el tiempo necesario para resolverlo sería mucho mayor que el tiempo necesario para verificar su prueba al final. En un caso extraordinario, el último teorema de Fermat tardó 358 años para que alguien lo resolviera, mientras que se necesitó mucho menos para que otro verificara que la prueba era correcta.

El ajedrez es otro ejemplo. Es fácil encontrar si hay jaque mate o no en el movimiento actual, pero es difícil encontrar una lista de movimientos que conduzcan a un jaque mate. En todos estos casos, resolver el problema lleva un tiempo no determinista, mientras que verificar la prueba solo lleva un tiempo polinómico.

La pregunta realmente es ¿podemos resolver estos problemas de NP en tiempo polinomial al igual que podemos verificar estos problemas en tiempo polinomial? Si bien muchos creen que no hay forma de resolver estos problemas en tiempo polinómico, no hay forma de demostrarlo hasta ahora. P versus NP es, por lo tanto, un desafío venir con una prueba matemática para afirmar que la clase de problemas bajo NP puede resolverse en tiempo polinómico o no puede resolverse en tiempo polinómico.

Si pudiéramos mostrar P = NP, podría ocurrir una revolución completamente nueva en la informática, donde se podrían resolver varios problemas importantes para la humanidad con algoritmos deterministas en lugar de heurísticos.

No voy a definir el término técnico “tiempo polinómico”, aunque la definición es bastante importante técnicamente. Puedes considerarlo más o menos como si significara que la ley de Moore finalmente se pondrá al día incluso con los casos más problemáticos. Me referiré a él como “tiempo razonable”, durante el resto de esta respuesta.

P y NP son clases de complejidad. Las clases de complejidad son conjuntos de problemas que (al menos en teoría) tienen soluciones que satisfacen ciertas condiciones.

La condición para que un problema esté en P es que debe tener una solución que tome un tiempo razonable. La condición de que haya un problema en NP es que debe tener un método para verificar que una solución propuesta sea correcta y que tome un tiempo razonable.

Todos los problemas en P también están en NP ; si un problema puede resolverse en un tiempo razonable, no tomará un tiempo irrazonable para verificarlo; cualquier ejemplo de P es también un ejemplo de NP.

Puede darse el caso de que también todos los problemas NP sean también problemas P ; en este caso, si la solución de un problema se puede verificar en un tiempo razonable, entonces el problema en sí también se puede resolver en un tiempo razonable. Esto es lo que se entiende por P = NP.

Existen ideas erróneas generalizadas de que NP solo significa “difícil” y P simplemente significa “fácil”. Esto probablemente se deba a los nombres de otras dos clases de complejidad, NP-Hard y NP-Complete.

Los problemas NP-Hard son “al menos tan difíciles como los más difíciles en NP”. Hay problemas NP-Hard que no están en NP.

Los problemas NP-Hard que se encuentran en NP se llaman NP-Complete. En términos generales, cualquier problema en NP puede reformularse como un problema en NP-Complete en un tiempo razonable. Por lo tanto, si se encuentra una solución de tiempo razonable para cualquier problema en NP-Complete, entonces P = NP. No se han descubierto tales soluciones.

NP-Complete contiene todos los problemas NP famosos, como el problema del embalaje, el vendedor ambulante, el sudoku (es decir, la coloración de gráficos), la búsqueda de camarillas (es decir, grupos donde todos se conocen) en las redes sociales, etc.

Determinar si P = NP no es algo que en sí mismo debe afectar la vida cotidiana de las personas que no están interesadas en la pregunta por sí misma. Los detalles de la prueba podrían tener un gran impacto. Específicamente, si P = NP se prueba porque alguien encuentra una solución de tiempo razonable para, por ejemplo, sudoku, entonces también podemos crear una solución de tiempo razonable para todos esos otros problemas desafiantes.

He escrito una explicación intuitiva para P vs NP en este artículo: 40 conceptos clave de informática explicados en términos simples. Aquí está mi intento:

Digamos que te doy una pregunta de multiplicación como:

Q1: 7 x 17 = p

La respuesta es 119. Fácil de resolver, ¿verdad? ¿Qué pasa si revierto la pregunta:

Q2: p x q = 119 ( p & q no pueden ser 1 y 119)

Para resolver Q2, suponiendo que no haya visto Q1, es probable que tenga que pasar por todos los números posibles del 2 al 118. Todavía tenemos que descubrir un algoritmo eficiente que pueda encontrar fácilmente los factores de un número.

¿Qué pasa si te pregunto: podría ser p posiblemente 7? Puedes verificar fácilmente la respuesta ¿verdad? ¡Solo divide 119 por 7!

La multiplicación es fácil. Encontrar los factores originales de un número es difícil.
Entonces Q1 es un problema P (polinomial) porque es fácil de resolver . La computadora puede multiplicar fácilmente 2 números súper grandes sin gastar mucho más tiempo de computadora que los números pequeños.

Q2 es un problema NP (polinomio no determinista) porque es fácil de verificar , pero difícil de resolver . Encontrar los factores de 119 sigue siendo bastante fácil de resolver para la computadora, pero ¿qué tal un número de 500 dígitos? Es imposible para cualquier computadora en este momento.

Aquí está la parte importante: ¿Son los problemas de NP (por ejemplo, factorización) también problemas de P (por ejemplo, multiplicación), solo que no hemos descubierto la manera eficiente de resolver los problemas de NP? ¿Son realmente difíciles de resolver los problemas de NP, o simplemente necesitamos un “momento de aha” de un científico brillante (¿o usted?) Para obtener un algoritmo eficiente? ¿O tal vez los humanos son demasiado tontos? Imagine que existe una máquina o vida que posee una inteligencia mucho mayor que la humana. Nos ven como vemos a las hormigas. Nuestro nivel de inteligencia es demasiado insignificante para ellos. ¡Resolver el problema P vs NP es como resolverles 1 + 1!

Entonces, ¿por qué es importante el problema P vs NP? Si podemos probar P = NP, eso significa que todos los problemas de NP pueden resolverse fácilmente dentro de un tiempo razonable de la computadora. Podremos curar el cáncer, romper contraseñas, etc. Cambia el mundo.

Un ejemplo canónico de un problema P es la ordenación. Los escenarios comunes que involucran la clasificación incluyen ordenar una mano de cartas por rango o ordenar páginas impresas por número de página.

Los problemas de NP existen en la vida diaria, pero son menos evidentes. Vienen en forma de problemas en los que debe tomar la decisión de optimizar algunos recursos. Al hacer mandados, puede estar tratando de resolver el problema del vendedor ambulante, que puede considerarse como: “Dada una lista de tiendas y sus distancias por pares, encuentre el recorrido más corto posible que visite cada tienda exactamente una vez”. Desea ahorrar en kilometraje en su automóvil y desea hacer todos sus recados sin tener que volver a una tienda sin ningún motivo.

Cuando se mueva entre apartamentos / casas, intentará resolver un problema de embalaje del contenedor, otro problema de NP. En tal problema, “los objetos de diferentes volúmenes deben empaquetarse en un número finito de contenedores de capacidad V de una manera que minimice el número de contenedores utilizados”.

Para comprender las clases P y NP, debe tener una comprensión básica de un par de cosas.

Un problema de decisión es un problema que siempre puede responder “sí” o “no”. Por ejemplo, “¿Tienes un hermano?”. Siempre puede responder “sí” o “no” para tales preguntas. Tales problemas son lo que llamamos problemas de decisión.

Una máquina determinista de Turing es la máquina a la que estamos acostumbrados normalmente. Una computadora es una máquina de Turing determinista. Una máquina de Turing no determinista es una máquina que viene con paralelismo ilimitado. Por ejemplo, si llega a una bifurcación en una carretera, puede tomar la carretera izquierda o la carretera derecha. Así es como funciona la máquina determinista de Turing. Pero como la máquina de Turing no determinista tiene un paralelismo ilimitado, puede tomar ambos caminos. Es similar a ejecutar múltiples subprocesos en una computadora. Las máquinas de Turing no deterministas no pueden realizarse en la práctica.

Un problema de decisión está en la clase P, si podemos resolver el problema en tiempo polinómico usando una máquina de Turing determinista. Significa que podemos resolver el problema muy rápidamente. Terminará el problema en algún momento n ^ k, donde k es alguna constante. Por ejemplo, encontrar el elemento max en una matriz, verificar si una cadena es palíndromo o no, verificar si un número es primo o no, y así sucesivamente.

Un problema de decisión está en la clase NP, si podemos resolverlo en tiempo polinómico usando una máquina de Turing no determinista para obtener la respuesta “sí” a su problema. (La respuesta “no” se considera en clase co-NP). Eso significa que no podemos resolver el problema en tiempo polinómico usando una máquina de Turing determinista. Pero siempre podemos verificar si nuestra solución es correcta en el tiempo polinómico. Entonces, si alguien le da un problema NP y la respuesta es “sí”, podemos verificar si la respuesta es correcta o no en el tiempo polinómico. Pero tenga en cuenta que no podemos encontrar la respuesta en el tiempo polinómico (solo verifique si la respuesta es correcta).

También un problema de clase P también debe residir en la clase NP, ya que cualquier problema que pueda ser resuelto por una máquina de Turing determinista en tiempo polinómico, también puede ser resuelto por una máquina de Turing no determinista en tiempo polinómico. Pero tenga en cuenta que lo contrario puede no ser cierto. Esa es la carne de la famosa declaración P = NP . En caso de que resulte ser cierto, tendrá profundas implicaciones en campos como la criptografía. Podemos descifrar un cifrado usando solo su clave pública. Pero la mayoría de los científicos opinan que PNP . ¡En caso de que resuelva el problema anterior, puede ganar $ 1 millón!

“Si P = NP, entonces el mundo sería un lugar profundamente diferente de lo que generalmente suponemos. No habría ningún valor especial en ‘saltos creativos’, no habría una brecha fundamental entre resolver un problema y reconocer la solución una vez que se encuentra. Todos los que podrían apreciar una sinfonía serían Mozart; todos los que pudieran seguir un argumento paso a paso serían Gauss … “ – Scott Aaronson

Digamos que planeaste una velada perfecta con tu pareja y dejaste una nota en tu sala que decía:


Estoy esperando en el dormitorio
La llave está sobre la mesa.
Amor,
METRO

Pero para hacerlo interesante, habías dejado un montón de llaves en la mesa y solo una de ellas abre el dormitorio.

Ahora estás acostado en la cama, esposado a los rieles, (presumiblemente desnudo) contemplando si lo has hecho demasiado difícil para tu pareja.

Te das cuenta de que aunque dejaste muchas llaves diferentes, una mirada al tamaño y la forma del ojo de la cerradura en la puerta será suficiente para reducir la llave correcta a una.

Sin embargo, no recuerdas si dejaste las luces afuera de la puerta, para que tu pareja incluso vea el ojo de la cerradura, en cuyo caso, tu pareja tendrá que probar las llaves una por una para encontrar la correcta.

Pero estás atado a una cama y solo te queda contemplar el problema en cuestión. Siendo un nerd, ¿te preguntas si los dos casos son el mismo tipo de problemas?

El segundo caso de “luces apagadas” definitivamente parece más difícil que el primero.

¿Pero son ambos igualmente duros o igualmente fáciles?

Todo se reduce a la pregunta más importante de todas … ¿tendré sexo esta noche?

Hay muchos problemas que queremos resolver, y algunos son más difíciles que otros. Por ejemplo, ordenar un mazo de cartas es bastante fácil, y sabemos cómo hacerlo rápido. Este conjunto fácil de problemas es P;
Hay una serie de problemas más difíciles, en los que, si le di la pregunta y la respuesta, verificar que la respuesta es correcta es fácil. Este conjunto de problemas es NP Obviamente, los problemas fáciles entran en esta categoría; si puedo encontrar fácilmente la respuesta, puedo decir fácilmente si su respuesta es correcta, encontrando la respuesta yo mismo si no hay una manera más simple.
La pregunta es si la capacidad de reconocer fácilmente la solución a un problema significa que es fácil descubrir cuál es la solución desde cero. Si lo hace, significa que P = NP, cada problema con una solución fácilmente identificable se resuelve fácilmente. Si P! = NP, significa que hay problemas para los que podemos identificar respuestas correctas, pero es realmente difícil encontrar esa respuesta desde cero.
Hasta ahora, no hemos podido demostrarlo de una forma u otra.

Esto se trata de complejidad. Hay dos formas de describir un cierto aspecto de la complejidad de un problema, y ​​la pregunta es si esas dos descripciones aparentemente diferentes son realmente diferentes.

Antes de continuar, algunas personas podrían preguntarse cómo en la Tierra dos descripciones aparentemente diferentes pueden ser realmente diferentes. Considere este ejemplo no matemático: acaba de mudarse a una nueva ciudad y dos personas le dicen que hay un restaurante increíble que solo tiene que probar. Ambos olvidan el nombre, pero te dan instrucciones. El primer tipo dice que se dirija al norte por Main Street, tome la segunda a la izquierda, etc. El segundo tipo le dice que se dirija al oeste por State Street, tome la tercera a la derecha, etc. Es posible que ambos le estén dando dos rutas hacia el mismo restaurante, pero no se sabe hasta que aprendes un poco mejor la ciudad.

Con respecto a P = NP, todavía estamos en la fase en la que estamos aprendiendo mejor la ciudad. (Resulta que es una ciudad complicada).

Bien, hay dos formas de definir la complejidad de un problema: P y NP.

En términos simples, “P” se refiere a problemas cuyas soluciones se pueden llegar rápidamente. Por supuesto, “rápidamente” puede hacerse mucho más preciso, pero eso podría sacarnos del territorio de los “términos simples”. Pero podemos ser un poco más precisos sin necesidad de extraer fórmulas.

Quizás la aclaración más útil para hacer por adelantado es que no estamos hablando de qué tan rápido se ejecuta un programa de computadora en particular en un hardware en particular. Obviamente, la misma “solución” se implementará más rápido en una supercomputadora que en un teléfono inteligente. En cambio, cuando hablamos de un problema “fácil” o una solución “rápida”, estamos comparando la cantidad de trabajo que tiene que hacer en función de la entrada .

Por ejemplo, ordenar un montón de palabras en orden alfabético es un problema rápido. Hay muchas maneras de hacerlo, pero hablando en términos generales, se hacen muchas comparaciones de palabras con otras palabras, y la cantidad de comparaciones no se sale de control demasiado. Es decir, si tiene diez palabras para ordenar, es posible que necesite hacer diez o veinte comparaciones. Si no tienes suerte, es posible que incluso necesites hacer 100 comparaciones, pero no mucho más que eso. Pero si agrega una palabra y ahora tiene 11 palabras, de repente no tendrá que hacer 1,000,000 de comparaciones. Aún necesita hacer una serie de comparaciones en el mismo estadio que el tamaño de la lista con la que comenzó.

Compare eso con el famoso “problema del vendedor ambulante”: dado un montón de puntos (que representan, por ejemplo, ciudades), encuentre una ruta de distancia mínima que recorra cada ciudad al menos una vez. Quizás pueda ver cómo esto se sale de control rápidamente. Si adoptas un enfoque ingenuo y de fuerza bruta, cada nueva ciudad ofrece un número cada vez mayor de nuevas rutas para probar.

Así que eso es P: problemas cuyas soluciones no crecen mucho más rápido que el tamaño de su entrada. (Y no puedo resistirme: aunque puede que no sean términos simples, “no demasiado rápido” significa polinomio. Por ejemplo, ordenar una lista de longitud n requiere del orden de n ^ 2 comparaciones. El problema del vendedor viajero con n ciudades involucra n ! rutas, que crece más rápido que cualquier polinomio. Si todo eso es engullido, ignóralo.)

Bien, ¿y qué hay de NP? Estos son problemas cuyas soluciones propuestas son fáciles de verificar como correctas o incorrectas . Por ejemplo, considere los dos problemas que discutimos anteriormente: el problema del vendedor ambulante y la clasificación de una lista.

Con una lista, es fácil verificar si una lista propuesta ya está ordenada. Simplemente escanea la lista y asegúrate de que nada esté fuera de lugar. Si hay 10 cosas en la lista, tendrá que hacer 10 comprobaciones. (Si hay 10,000 cosas en la lista, solo tiene que hacer 10,000 cheques).

Compare eso con el problema del vendedor ambulante. Si te doy una ruta entre 20 ciudades y te pregunto si es la ruta más corta posible, ¿cómo haces para verificar eso? No hay nada intrínseco en la ruta que anuncia su óptimo. En este caso, verificar si tienes la ruta más corta posible solo implica resolver el maldito problema desde cero, y tener suerte y encontrar una ruta más corta antes de tiempo, o verificar que la ruta que te dieron para comenzar era, de hecho, la ruta más corta posible . (Hurra.)

Resumiendo … ordenar una lista no es muy complejo de dos maneras. Primero, es fácil ordenar una lista. En segundo lugar, es fácil (incluso más fácil, de hecho) verificar si una lista que alguien le entrega está ordenada. El problema del vendedor ambulante es muy complejo de dos maneras. Primero, el trabajo que tiene que hacer crece muy rápido con el tamaño de la entrada. Y segundo, incluso clasificar una solución propuesta como correcta o incorrecta requiere mucho trabajo (casi tanto como resolver el problema original desde cero).

La gran pregunta P = NP es si esas descripciones son redundantes: ¿ cada problema que es muy complejo (o no) en el primer sentido también es muy complejo (o no) en el segundo sentido?

Siempre es más difícil buscar tu juguete perdido (NP) que decirme cómo se ve (P).

Por lo tanto, hasta nuevo aviso, buscar agujas en los pajares siempre llevará más tiempo que verificar si el objeto que tiene en la mano es, de hecho, una aguja.

suponga que está buscando definiciones intuitivas, ya que las definiciones técnicas requieren bastante tiempo para comprender. En primer lugar, recordemos un concepto preliminar necesario para comprender esas definiciones.

  • Problema de decisión : un problema con una respuesta de sí o no .

Ahora, definamos esas clases de complejidad .

PAGS

P es una clase de complejidad que representa el conjunto de todos los problemas de decisión que se pueden resolver en tiempo polinómico . Es decir, dada una instancia del problema, la respuesta sí o no se puede decidir en tiempo polinómico.
Ejemplo
Dado un gráfico conectado G, ¿se pueden colorear sus vértices usando dos colores para que ningún borde sea monocromático?
Algoritmo: comience con un vértice arbitrario, coloréelo en rojo y todos sus vecinos en azul y continúe. Deténgase cuando se quede sin vértices o se vea obligado a hacer que un borde tenga sus dos puntos finales del mismo color.

notario público

NP es una clase de complejidad que representa el conjunto de todos los problemas de decisión para los cuales las instancias donde la respuesta es “sí” tienen pruebas que pueden verificarse en tiempo polinómico.
Esto significa que si alguien nos da una instancia del problema y un certificado (a veces llamado testigo) de la respuesta afirmativa, podemos verificar que sea correcto en el tiempo polinómico.
Ejemplo
La factorización entera está en NP. Este es el problema que da a los enteros n y m, ¿hay un entero f con 1 Este es un problema de decisión porque las respuestas son sí o no. Si alguien nos entrega una instancia del problema (por lo que nos da números enteros n y m) y un número entero f con 1 tiempo polinomial realizando la división n / f.

NP-Complete

NP-Complete es una clase de complejidad que representa el conjunto de todos los problemas X en NP para los cuales es posible reducir cualquier otro problema NP Y a X en tiempo polinómico.
Intuitivamente, esto significa que podemos resolver Y rápidamente si sabemos cómo resolver X rápidamente. Precisamente, Y es reducible a X, si hay un algoritmo de tiempo polinomial f para transformar instancias y de Y en instancias x = f (y) de X en tiempo polinomial, con la propiedad de que la respuesta a y es sí, si y solo si La respuesta a f (y) es sí.
Ejemplo
3-SAT. Este es el problema en el que se nos da una conjunción (AND) de disyunciones de 3 cláusulas (OR), declaraciones de la forma
(x_v11 O x_v21 O x_v31) Y (x_v12 O x_v22 O x_v32) Y … Y (x_v1n O x_v2n O x_v3n)
donde cada x_vij es una variable booleana o la negación de una variable de una lista predefinida finita (x_1, x_2, … x_n).
Se puede demostrar que cada problema de NP puede reducirse a 3-SAT . La prueba de esto es técnica y requiere el uso de la definición técnica de NP ( basada en máquinas de Turing no deterministas ). Esto se conoce como el teorema de Cook .
Lo que hace que los problemas NP-completos sean importantes es que si se puede encontrar un algoritmo determinista de tiempo polinómico para resolver uno de ellos, cada problema NP puede resolverse en tiempo polinómico (un problema para gobernarlos todos).

NP-hard

Intuitivamente, estos son los problemas que son al menos tan difíciles como los problemas NP-completos . Tenga en cuenta que los problemas NP-hard no tienen que estar en NP , y no tienen que ser problemas de decisión .
La definición precisa aquí es que un problema X es NP-duro, si hay un problema NP completo Y, de modo que Y es reducible a X en tiempo polinomial .
Pero dado que cualquier problema NP-completo puede reducirse a cualquier otro problema NP-completo en tiempo polinómico, todos los problemas NP-completos pueden reducirse a cualquier problema NP-difícil en tiempo polinómico. Entonces, si hay una solución a un problema NP-duro en tiempo polinómico, hay una solución a todos los problemas NP en tiempo polinómico.
Ejemplo
El problema de detención es el clásico problema NP-hard. Este es el problema que, dado un programa P y una entrada I, ¿se detendrá? Este es un problema de decisión pero no está en NP. Está claro que cualquier problema de NP completo se puede reducir a este.
Mi problema NP-complete favorito es el problema del Buscaminas.

P = NP

Este es uno de los problemas más famosos de la informática y una de las preguntas pendientes más importantes en las ciencias matemáticas. De hecho, el Instituto Clay está ofreciendo un millón de dólares para una solución al problema (el informe de Stephen Cook en el sitio web de Clay es bastante bueno).
Está claro que P es un subconjunto de NP. La pregunta abierta es si los problemas de NP tienen o no soluciones deterministas de tiempo polinomial. Se cree en gran medida que no lo hacen. Aquí hay un artículo reciente sobresaliente sobre el último (y la importancia) del problema P = NP: El estado del problema P versus NP.
El mejor libro sobre el tema es Computadoras e Intractabilidad de Garey y Johnson.

Fuente: ¿Cuáles son las diferencias entre NP, NP-Complete y NP-Hard? (desbordamiento de pila)

Aunque esta explicación puede hacerse significativamente más compleja, atendiendo a los requisitos de la pregunta que pide una explicación amigable, déjenme intentar explicar esto con ejemplos simples y principalmente texto sin cálculos.

El concepto de P, NP-Hard y NP-Complete trata de encontrar soluciones a los problemas y verificar si una solución determinada resuelve un problema o no.

P se refiere al tiempo polinomial y se relaciona con el tiempo (cada paso en la solución se considera una unidad de tiempo) tomado para resolver un problema por una máquina determinada. Si una máquina resuelve un problema específico que tiene n valores de entrada en n ^ k pasos, donde k es un número entero no negativo, se dice que esa máquina puede resolver el problema en tiempo polinómico.

Consideremos un problema en el que un vendedor tiene que visitar un gran grupo de ciudades, donde cada ciudad está conectada con algunas otras del grupo. Una condición para visitar las ciudades es que cada ciudad debe ser visitada exactamente una vez.

Asuma dos máquinas construidas para resolver este problema. La máquina 1 puede comprender las condiciones del problema y cada vez que llega a un punto de decisión con respecto a qué ciudad visitar a continuación, elige una ciudad para viajar. Al mismo tiempo que la máquina 1 tarda en elegir una ciudad, la Máquina 2, por otro lado, es capaz de atravesar cada ciudad en todas las combinaciones posibles, es decir, la Máquina 2 es capaz de tomar todas las decisiones / pasos posibles y elegir la mejor ruta absoluta.

En otras palabras, la Máquina 2 también comprende las reglas del juego, pero cada vez que hay que elegir en el juego, la máquina 2 hace una copia de sí mismo que sigue cada opción disponible al tomar esa decisión. El problema P vs NP en términos muy simples está relacionado con probar que el comportamiento de la Máquina 2 (Máquina no determinista) se puede simular / Alcanzar con la Máquina 1 (Máquina determinista).

En este ejemplo, el proceso real de encontrar una solución a este problema se vuelve cada vez más difícil a medida que aumenta el número de ciudades y no puede ser resuelto en tiempo polinómico por la máquina 1. Tal problema solo puede ser resuelto en tiempo polinómico por una máquina no determinista que puede explorar múltiples caminos de decisión a la vez. Tales problemas se conocen como problemas NP-Hard.

Sin embargo, con este problema, una vez que se presenta una solución, es mucho más simple verificar si la solución es correcta o no y si la Máquina 1 puede hacerlo en tiempo polinómico. Tales problemas pertenecen a un subconjunto de problemas NP-Hard, llamado NP-Complete.

Los problemas a diferencia de esto, como ordenar o agregar un grupo de números, que la máquina 1 puede resolver y verificar en tiempo polinómico, pertenecen al conjunto P.

Las computadoras, incluso las más rápidas que se usan actualmente son típicamente de la Máquina 1 y no pueden resolver bien los problemas NP-Hard a diferencia de la Máquina teórica 2. El argumento P vs NP es muy relevante ya que muchos algoritmos importantes que utilizamos, como los que protegen su las contraseñas y las transacciones bancarias a través de Internet dependen de que las computadoras no puedan resolver los problemas NP-Hard de manera eficiente. Por ejemplo, si se prueba P a NP, significa que una computadora puede verificar todos los valores cifrados posibles de una contraseña específica en el tiempo necesario para verificar un valor. Esto haría que la mayoría de los algoritmos y medidas de seguridad sean inútiles de la noche a la mañana.

P = el conjunto de problemas que son fáciles de resolver (es decir, se puede resolver en tiempo polinómico con el tamaño de la entrada)

NP = el conjunto de problemas cuyas soluciones son fáciles de verificar (es decir, pueden verificarse en tiempo polinómico con el tamaño de la entrada)

Entonces, el problema P versus NP dice esencialmente: si podemos verificar la solución fácilmente, ¿significa que también podemos resolver el problema fácilmente?

Los fluidos y las corrientes eléctricas en la naturaleza y el laboratorio tienden a encontrar por sí mismos el camino de menor resistencia [ o mínimo de configuración o equilibrio de energía] .
¿Cómo le enseñas a un robot [o computadora] haciendo eso y cosas así? .
¿Te imaginas que con circuitos más complicados será más difícil y tomará más y más pasos para la computadora?
Resolverlo a mano es una tarea desalentadora que es propensa a errores. ¿Cuántas veces te has olvidado de llevar un dos o pensaste que 3 + 4 de alguna manera equivalía a 8? Es mejor dejarlo en manos de un algoritmo informático para que lo resuelva. Si bien podría encontrar rápidamente la mejor ruta para un pequeño número de ciudades, agregar más ciudades hace que encontrar una solución sea más difícil. Aumenta a una velocidad polinómica, por lo que en lugar de algo [matemática] x ^ 2 [/ matemática] número de pasos, podría tomar [matemática] x ^ 3, x ^ 4 [/ matemática], y así sucesivamente, comer más y más tiempo computacional con cada potencia más alta
Existe un enfoque científico que intenta categorizar una dificultad tan popular como la teoría de la complejidad. P y np son algunas de esas categorías.
.
P = NP busca equivalencia entre estos grados de dureza
y ha habido intentos muy interesantes de hacerlo
a la
una conocida pieza del folklore de la informática sostiene que, si dos placas de vidrio con clavijas entre ellas se sumergen en agua jabonosa, las burbujas de jabón formarán rápidamente un árbol Steiner [1] que conectará las clavijas, siendo esta la configuración de energía mínima .
por el bien de la familiaridad

¿Qué videojuego juegas?

  1. El recorrido de ubicación y los senderos de un solo uso, ala Pac-Man , son NP-hard.
  2. Las placas de presión, a la Prince of Persia o Portal , son duras para PSPACE si hay dos placas de presión, y duras para NP si solo se requiere una para abrir una puerta.
  3. En el caso de los interruptores, un interruptor es P-hard, dos es NP-hard y tres o más son PSPACE-hard.

Pregunta porque ?
[1] http://en.wikipedia.org/wiki/Ste…
[2] http://www.technologyreview.in/b…
[3] http://www.scottaaronson.com/pap…