¿Por qué los problemas NP completos son más difíciles que los problemas NP si un problema NP puede reducirse a un problema NP completo?

Muchos estudiantes tienen la idea errónea de que una reducción (como se usa en la teoría de la computabilidad y en la teoría de la complejidad computacional) es de alguna manera una simplificación.

Ese problema de decisión [matemática] L_1 [/ matemática] se reduce al problema de decisión [matemática] L_2 [/ matemática], escrita [matemática] L_1 \ leq L_2 [/ matemática] significa algo más y muy preciso: que existe un fiel, traducción computable [matemática] f [/ matemática] de instancias de [matemática] L_1 [/ matemática] a instancias de [matemática] L_2 [/ matemática] tal que [matemática] w [/ matemática] es un sí-instancia de [matemática ] L_1 [/ math] si y solo si [math] f (w) [/ math] es una instancia de sí de [math] L_2 [/ math]. Que [math] f [/ math] es computable significa que existe un algoritmo [math] F [/ math] que puede, en cualquier caso [math] w [/ math], calcular [math] f (w) [/ mates]. [math] f [/ math] es una reducción de tiempo polinomial si [math] F [/ math] tiene complejidad de tiempo polinomial (wrt. el tamaño de [math] w [/ math]). Luego escribimos [math] L_1 \ leq _ {\ mathrm {P}} L_2 [/ math].

Un problema de decisión difícil de NP [matemática] L [/ matemática] es un problema de decisión tal que [matemática] L_1 \ leq _ {\ mathrm {P}} L [/ matemática] por cada [matemática] L_1 \ in \ mathrm {NP }[/mates]. Si [math] L [/ math] es polinomial-time decidible con un decisor [math] M_L [/ math], entonces podemos encontrar fácilmente un decisor de tiempo polinomial para cualquier [math] L_1 \ in \ mathrm {NP} [ / math] utilizando la reducción de tiempo polinomial [math] f [/ math] de [math] L_1 [/ math] a [math] L [/ math] que debe existir:

En la entrada [matemática] w [/ matemática]

1. Calcular [matemática] f (w) [/ matemática]

2. Ejecute [math] M_L [/ math] con [math] f (w) [/ math] como entrada y responda lo que respondió

La complejidad temporal de este algoritmo es polinomial, ya que el paso 1 produjo una cadena cuyo tamaño puede ser como máximo polinomial en el tamaño de [math] w [/ math] y dado que el paso 2 usa esta cadena como entrada para un algoritmo de tiempo polinomial: y dado que la composición de dos polinomios es nuevamente un polinomio.

Entonces, debido a que podemos encontrar un decisor de tiempo polinómico para cualquier [matemática] L_1 \ in \ mathrm {NP} [/ matemática] dado un decisor para nuestro NP-difícil [matemática] L [/ matemática], tiene sentido decir que [matemáticas] L [/ matemáticas] es un problema más difícil en NP. Piense en la relación de reducción [matemática] L_1 \ leq L_2 [/ matemática] como diciendo que [matemática] L_2 [/ matemática] es tan difícil como [matemática] L_1 [/ matemática].

Los problemas NP completos no son más difíciles que los problemas NP. Los problemas NP completos son los problemas más difíciles que pertenecen a NP.

Los problemas fáciles se pueden reducir a problemas difíciles , pero no al revés.

En el mismo sentido, mi respuesta simple puede reducirse a cualquiera de las respuestas completas más elaboradas que otros han escrito.

Los problemas de NP completo son un subconjunto de los problemas de NP. Por lo tanto, no puede decir que los problemas de NP completo son más difíciles que los problemas de NP: ¡todos los problemas de NP completo también son problemas de NP!

También caes en la trampa eterna de equivocarte en la dirección de las reducciones. Absolutamente todos se confunden con esto en algún momento. Pero la idea es que si puede reducir el problema A al problema B, eso significa que si puede resolver B, también puede resolver A. Por lo tanto, si B es fácil, entonces A también debe ser fácil. Si A es difícil, entonces B también debe ser difícil. ¡B es al menos tan duro como A!

Piense en la oración “A reducida a B” como “si conoce una rutina para resolver B y si puede encontrar un algoritmo rápido (*) para representar A dentro del dominio B, entonces A puede resolverse en la mayoría de los casos”.

Dicho esto, “reducir” los problemas de NP a problemas de NP completo significa que los problemas de NP son tan difíciles como los problemas de NP completos.

(*) Esa transformación (gadget) no debería ser más lenta que el dominio B.

Creo que puede tener alguna confusión sobre la definición de reducciones.

Cuando decimos “A puede reducirse a B en tiempo polinómico”, implica que dado un algoritmo de tiempo polinómico para B, automáticamente tenemos uno para A. Dada una instancia de A, usamos la reducción para obtener una instancia de B, resolver B y así obtener una respuesta para A.

Un problema de NP completo es uno de los que está en NP y cada problema de NP puede reducirse a él, lo que implica que dado un algoritmo de tiempo polinómico para él, automáticamente tenemos uno para cada problema de NP. Esto hace que sea al menos tan difícil de resolver como cualquier otro problema de NP.

Para agregar a las otras excelentes respuestas aquí, solo diré que nadie ha dicho que los problemas de NP completo son más difíciles que los problemas de NP. Dado que los problemas NP completos también están en NP, decir que son más difíciles que los problemas NP sería como decir que Mt. El Everest es más alto que cualquier montaña. Es igual de ilógico. Lo que podemos decir es que ningún problema NP-hard puede resolverse más rápidamente que cualquier problema NP-complete, y que ningún problema en NP es más difícil (por complejidad de tiempo) que cualquier problema NP-complete. Aquí hay un diagrama ASCII Venn:

_______ _______
/ \ / \
/ / \ \
/ / \ \
/ / NP- \ \
El | NP | compl- | NP-hard |
El | El | ete | El |
\ \ / /
\ \ / /
\ \ / /
\ _______ / \ _______ /

More Interesting

¿Cuál sería el plan de trabajo general o el calendario para as en programación competitiva?

¿Puedo construir un algoritmo de negociación basado en una estrategia de tendencia y usarlo para comerciar divisas durante diez años, por ejemplo?

¿Cuál es el libro de estructura de datos mejor y más fácil de entender para un estudiante promedio?

Si hay una matriz de 101 números que consiste en números del 1 al 100 con el número repetido, ¿cómo encuentra el número repetido en el número mínimo de iteraciones (en el programa C)?

¿El aprendizaje automático es todo sobre software? ¿Qué tipo de hardware se requiere para simular algoritmos de aprendizaje automático?

Cómo abordar el problema 'Mapa intergaláctico' (IM) en SPOJ usando Max Flow

¿Cuáles son algunas diferencias entre los campos de la investigación algorítmica y la investigación de operaciones?

¿Cuál es la mejor manera de ordenar un terabyte de matriz de datos, cuando tiene RAM limitada (500k), y cada elemento de la matriz tiene un par de elementos de datos, de aproximadamente 1-10k cada uno?

Cómo crear un sistema de clasificación que dependa de tres variables (nivel, resultado y tiempo) cuanto más altas sean las dos primeras, mejor, mientras que por un tiempo, un valor menor es mejor

¿Cuál es un ejemplo de un algoritmo iterativo que se ejecuta en [matemáticas] O (2 ^ n) [/ matemáticas]?

¿Por qué la clasificación rápida se considera una clasificación inestable?

¿Cómo se determina la longitud de una matriz en C?

¿Alguien puede dar un ejemplo en Java de pasar una matriz unidimensional, una matriz bidimensional y una matriz tridimensional por referencia y luego manipularlos?

¿Existen algoritmos que estructuran datos previamente no estructurados utilizando 'etiquetas' definidas por el usuario?

¿Cómo funciona el algoritmo de búsqueda de ciclo de Floyd? ¿De qué manera mover la tortuga al comienzo de la lista vinculada, mientras se mantiene a la liebre en el lugar de reunión, seguido de mover un paso a la vez, hace que se encuentren en el punto de inicio del ciclo?