¿P = NP sería algo bueno?

Hay muchos tipos diferentes de formas en que P podría ser igual a NP.

Para elaborar, hay un artículo bien conocido de Impagliazzo (descrito en los cinco mundos de Impagliazzo) que describe cinco “mundos” diferentes, cada uno con diferentes grados de P = NP. Recomiendo encarecidamente leer el documento en sí, pero aquí hay una breve descripción del artículo vinculado:

  • Algorítmica: P = NP o algo “moralmente equivalente” como algoritmos probabilísticos rápidos para NP. Este era el mundo que describí la semana pasada, pero mirando hacia atrás en el artículo de Impagliazzo, hace un trabajo mejor.
  • Heuristica: los problemas de NP son difíciles en el peor de los casos, pero fáciles en promedio.
  • Pessiland: los problemas de NP son difíciles en promedio, pero no existen funciones unidireccionales. Podemos crear fácilmente problemas NP difíciles, pero no problemas NP difíciles cuando conocemos la solución. Este es el peor de todos los mundos posibles, ya que no solo no podemos resolver problemas difíciles en promedio, sino que aparentemente no obtenemos ninguna ventaja criptográfica de la dureza de estos problemas.
  • Minicrypt: existen funciones unidireccionales pero no tenemos criptografía de clave pública.
  • Criptomanía: es posible la criptografía de clave pública, es decir, dos partes pueden intercambiar mensajes secretos a través de canales abiertos.

Está bastante claro que si P = NP en un sentido razonable (es decir, [matemáticas] NP \ subseteq BPP [/ matemáticas]) tenemos un problema real de criptografía. Ahora es fácil calcular cosas que pensamos que eran difíciles de calcular (como la función totient [math] \ varphi [/ math] de Euler utilizada en el esquema de cifrado RSA).

Sinceramente, no sé cómo evolucionaría la criptografía a partir de ahí. Lo más importante que queremos de un esquema de cifrado es que el mensaje es fácil de cifrar, pero difícil de descifrar. Tener [math] NP \ subseteq BPP [/ math] pondría un serio obstáculo en la existencia de problemas como ese.

Sin embargo, también podríamos tener P = NP, pero los algoritmos de tiempo polinomiales que encontramos para los problemas de NP son terriblemente lentos, con factores constantes y exponentes masivos. En este caso, no cambiaría mucho.

Sería una cosa Habría elementos del bien: hay cosas que nos gustaría poder resolver de manera más eficiente, especialmente en escalas más grandes, y la perspectiva de un algoritmo mejor que el tiempo no polinómico sería bienvenida. También habría elementos malos: hay cosas que estamos explotando actualmente por lo difícil que son resolverlas, especialmente en escalas más grandes, y la perspectiva de un algoritmo mejor que el tiempo no polinómico para algunas de esas cosas sería alarmante. No sería en general bueno, o en general malo, o de hecho necesariamente ninguno de los dos para empezar.

Lo que importa para nuestras necesidades prácticas diarias no son qué algoritmos son posibles de descubrir, sino qué algoritmos tenemos. Los algoritmos de tiempo no polinómico pueden ser perfectamente útiles siempre que tengamos cuidado a qué problemas los aplicamos. Algunos algoritmos de tiempo polinómico son tan lentos que no son prácticos. Nada de eso cambiaría inmediatamente si alguien descubriera P = NP, a menos que su prueba también incluyera un mecanismo para derivar un algoritmo de tiempo polinómico para cualquiera o algunos problemas de NP al mismo tiempo. E incluso si lo hace, esos problemas pueden seguir siendo “difíciles” si los algoritmos siguen siendo muy lentos. Muchas de las funciones “unidireccionales” que utilizamos han resistido décadas de investigación y escrutinio, y existe la posibilidad de que permanezcan prácticamente unidireccionales, incluso si surge que técnicamente no son “unidireccionales” en el sentido de NP.

Una cosa que nos hemos dado cuenta es que NP no es un escudo de invencibilidad contra la penetración de nuestros algoritmos de cifrado. El cifrado tiene un costo, y eso limita la longitud de las claves que podemos usar prácticamente con la tecnología actual. El descifrado no es imposible, solo difícil, y será progresivamente más fácil con la tecnología futura, incluso si los conceptos en los que se basa no son P. Necesitamos estar preparados para el hecho de que las cosas que ciframos hoy serán legibles en una década. y fácilmente legible en dos o más o menos. El tiempo y el progreso son un enemigo más grande en este campo que cualquier cosa que los matemáticos y los informáticos puedan hacer con la teoría de los algoritmos.

Incluyendo 3 respuestas en esta pregunta, quiero agregar también que si tenemos P = NP, entonces la computadora podrá probar o refutar todas las teorías matemáticas que conocemos.

Absolutamente sí: para aquellos que logran demostrarlo.

More Interesting

¿Cuáles son los algoritmos más versátiles para resolver problemas de empaque 3D?

¿Qué otras cosas debo probar aparte de programar o codificar?

¿Cuál es la base matemática necesaria para la programación competitiva?

¿Cómo puedes escribir en C una función que devuelve el punto fijo de una función?

¿Cómo puedo resolver la relación de recurrencia [matemática] F (n) = F (n-1) + 2F (n-2) [/ matemática] dada la siguiente función por partes: F (n) = 1, n = 1 F (n) = 5, n = 2 F (n) = F (n-1) + 2F (n-2), n> = 3?

¿Hay algún problema que requiera más tiempo exponencial de resolución (por ejemplo, doble exp.) Pero que pueda verificarse en tiempo polinómico determinista?

¿Cómo funciona el grupo electrógeno diesel?

¿Cuál es el método para encontrar el valor aproximado de la potencia de dos (2 ^ x) sin usar una calculadora?

Hice un programa en C que nos da la tabla de distribución normal, pero debo hacer un archivo Excel desde C. ¿Cómo puedo hacer esto?

¿Existe un algoritmo eficiente para encontrar el primo más pequeño mayor que N?

¿Cuándo no se puede usar el combinador Y para definir la recursividad en el cálculo lambda?

¿Por qué diferenciamos entre máquinas Turing universales y máquinas Turing normales?

¿Son los algoritmos y las fórmulas dos cosas diferentes y mutuamente excluyentes? ¿Cuál es o no es la diferencia?

¿Cuánto conocimiento de matemáticas se requiere para ser un programador?

¿Se puede programar una computadora para probar problemas matemáticos complejos no resueltos?