Las clases de complejidad son una forma de hablar sobre lo difícil o fácil que es un problema. La teoría de la complejidad se vuelve muy técnica, pero los conceptos básicos son realmente extraordinariamente intuitivos, y es posible entender el problema P versus NP con muy pocos antecedentes matemáticos.
Los tipos de problemas que tratamos en la teoría de la complejidad vienen en pares: una versión de “búsqueda” y una versión de “verificación”. Por ejemplo –
- Problema : clasificación.
Buscar versión : ingrese una lista de números X y envíe la misma lista en orden ordenado (llámelo Y).
Versión de verificación : ingrese una lista de números X y otra lista Y, y envíe “SÍ” si Y es la versión ordenada de X y “NO” de lo contrario. - Problema : coloración gráfica.
Versión de búsqueda : ingrese una red de nodos y aristas X, y genere colores Y para cada nodo de manera que no haya nodos adyacentes que tengan el mismo color.
Versión de verificación : ingrese una red X y un conjunto de colores Y y envíe “SÍ” si todos los nodos adyacentes tienen colores diferentes y “NO” en caso contrario. - Problema : partición.
Buscar versión : ingrese algunos números X y divídalos en dos grupos que sumen exactamente el mismo valor (llame a la asignación de números a su grupo Y).
Versión de verificación : ingrese algunos números X y las agrupaciones Y y envíe “SÍ” si los dos grupos suman el mismo valor, o “NO” en caso contrario.
Este es el problema P versus NP:
- ¿El conocimiento de algoritmos codiciosos a veces influye en la forma de tomar decisiones?
- Cómo calcular el producto máximo de una cadena entera usando k multiplicaciones
- ¿Qué algoritmo puedo usar para generar enteros (pseudo) aleatorios con una duración de ciclo infinito?
- ¿Pueden algunos explicarme la lógica detrás del siguiente problema El oso hambriento?
- ¿Por qué la notación O grande no se parece más a O (c) y O (cn) en lugar de a O (1) y O (n), esto último no tiene sentido?
¿Hay algún problema para el que la versión de verificación se pueda resolver de manera eficiente pero para el que no haya una solución eficiente para la versión de búsqueda?
Si hay una solución rápida para la versión de búsqueda de un problema, entonces se dice que el problema es tiempo polinómico o P para abreviar. Si hay una solución rápida para la versión de verificación de un problema, entonces se dice que el problema es el tiempo polinómico no-determinista , o NP para abreviar. La cuestión de “P = NP” es entonces la cuestión de si estos conjuntos son idénticos.
(La terminología de “tiempo polinomial no determinista” es terriblemente contraintuitiva en mi opinión. Se usó originalmente porque siempre que una máquina de Turing puede resolver eficientemente la versión de verificación de un problema, una máquina de Turing no determinista puede resolver eficientemente el problema de búsqueda correspondiente Pero esto realmente no es del todo importante para entender P vs NP).
En el caso del problema de clasificación anterior, existen algoritmos rápidos para las versiones de búsqueda y verificación . Pero para los otros dos problemas, las versiones de verificación son fáciles (diablos, mi abuela probablemente podría escribir un programa de computadora para verificar que dos listas de números sumen el mismo valor), pero las versiones de búsqueda son difíciles y, de hecho, no son rápidas Soluciones conocidas. Entonces, los tres problemas están en NP , pero solo el primero está (se sabe que está) en P.
Algunos problemas pueden traducirse entre sí de tal manera que una solución rápida a un problema nos daría automáticamente una solución rápida al otro. Hay algunos problemas en los que se puede traducir cada problema en NP, y una solución rápida a dicho problema nos daría automáticamente una solución rápida a cada problema en NP. Este grupo de problemas se conoce como NP-Hard . Algunos problemas en NP-Hard en realidad no son ellos mismos en NP; El grupo de problemas que están en NP y NP-Hard se llama NP-Complete .
Usted comienza a ver las implicaciones de largo alcance de una solución rápida para cualquier problema en NP-Hard: automáticamente obtendríamos una solución rápida para cada problema en NP, lo que significaría que siempre que haya una solución rápida para la versión de verificación de un problema, entonces siempre hay una solución rápida para la versión de búsqueda correspondiente.
¿Recuerdas cómo las versiones de verificación de esos problemas parecían fáciles pero las versiones de búsqueda parecían difíciles? Una solución rápida a cualquier problema de NP-Complete significaría que, siempre que pueda verificar las soluciones propuestas para un problema, nunca necesitará buscar en una fracción sustancial del espacio de búsqueda para encontrar soluciones; siempre habría una manera más rápida. Esto parece inverosímil para la mayoría de los matemáticos (y por razones más profundas que he enumerado aquí) y es por eso que la mayoría de los matemáticos piensan que no hay soluciones rápidas para los problemas de NP completo. Pero aún no lo hemos probado.