¿Qué es NP-hard y NP-complete?

Supongo que está decentemente familiarizado con la noción básica de clases de complejidad.

Observa esta foto.

Usted sabe que los problemas de NP son aquellos que no tienen una solución eficiente. Ahora, habrá una variación en la eficiencia algorítmica de las soluciones en los problemas bajo la clase NP, por lo que es muy probable que algunos problemas en NP sean más difíciles que sus contrapartes (en NP). Entonces, para distinguir tales problemas, la clase NP se divide en NP-Complete y NP-Hard. (Algunos problemas de NP podrían no estar en ninguna categoría).

Mira el círculo más grande. Eso es NP. Ahora imagine algunos problemas súper difíciles que son incluso más difíciles que los problemas más difíciles en NP. Esa es la parábola en la foto de arriba. Puede ver que no hay límite superior en los problemas NP-Hard, lo que claramente significa que hay muchos problemas para los que no hay una solución conocida, incluso en el Tiempo Recursivo. Esto aclara la noción sobre la clase de complejidad NP-Hard, que esencialmente contiene los problemas que son más difíciles que todos los problemas en NP.

Además, observará que hay una intersección significativa entre el círculo y la parábola, que es el área que contiene los problemas más difíciles de NP. Sí, los problemas que están certificados para estar en NP (su verificación es posible en tiempo lineal) pero son más difíciles que el resto de los problemas en NP. Forman una capa delgada del círculo que contiene todos los problemas de NP. Pero también están en NP-hard. ¿Cómo es eso? ¡Porque ellos también son más difíciles que los problemas más difíciles (los problemas en NP)!

Ahora puede que se pregunte cuál es la necesidad de separar NP-hard de NP y obtener una clase NP-Complete completamente nueva. Ciertamente, esto parece estar aumentando el desorden ya existente … Pero hay una trampa. Los problemas NP-Hard son especiales. ¡De una manera que una solución a los problemas NP-Hard daría una solución a todos los problemas en NP! .

Ya sabe que la mayoría de los problemas en NP-Hard no se pueden resolver. Entonces, ¿de qué sirve si ni siquiera sabemos cómo resolverlos? Ahí es donde entran los problemas de NP-Complete. Sabemos que su solución existe, aunque en un tiempo ineficiente. Pero se pueden resolver. Entonces, si de alguna manera, encontramos una solución de tiempo polinomial para cualquier problema en NP-Complete, significaría que todos y cada uno de los problemas en NP pueden resolverse en tiempo polinómico, de manera eficiente. Y eso probablemente terminará este punto muerto en P vs NP.

More Interesting

¿Es este algoritmo para la predicción de acciones bueno o lógico? ¿Es original?

¿Cómo funcionan los algoritmos genéticos en la programación?

¿Cuál es el mejor algoritmo de aprendizaje profundo sin supervisión para aprender características de los datos de secuencia biológica?

¿Cuál es el mejor algoritmo para encontrar la ruta más corta en un gráfico orientado, donde algunos bordes están bloqueados y las teclas están en algún lugar de los nodos?

¿Qué técnicas se utilizan para calcular las probabilidades de caída de elementos en los juegos?

¿Cuáles son los algoritmos de búsqueda paralelos más importantes? ¿Qué ventajas tienen sobre los algoritmos de búsqueda clásicos?

¿Qué compañías necesitan algoritmos de flujo óptico fuertes?

¿Cuál es la mejor manera de aprender el comercio algorítmico en Python y probar modelos?

¿Hay algún algoritmo de compresión de texto con pérdida?

¿Cuál es la técnica de clasificación eficiente para organizar los libros en una biblioteca?

¿HackerRank es un buen entrenamiento para el IOI?

¿Cuál es la última actualización en el algoritmo SEO de Google en 2017 para un rango de sitio web?

¿Cómo puedo encontrar la ruta más larga de un gráfico bidireccional utilizando el algoritmo BFS?

No soy bueno con los algoritmos y no puedo encontrar una solución hasta que alguien me lo diga. ¿Cómo puedo arreglar esto?

¿Debería un desarrollador autodidacta centrarse en algoritmos o proyectos paralelos para conseguir un trabajo?