Esperaba que alguien pudiera explicarme por qué exactamente el problema del producto del subconjunto es fuertemente NP-duro, mientras que el problema de la suma del subconjunto es débilmente NP-duro.
Subconjunto Suma: Dada y , ¿existe un subconjunto tal que .
Subconjunto del producto: Dada y , ¿existe un subconjunto tal que .
Siempre pensé que los dos problemas eran equivalentes: una instancia de SS podría transformarse en una instancia de SP mediante exponenciación y una instancia de SP a SS mediante logaritmos. Esto me llevó a concluir que ambos pertenecían a la misma clase de NP-hard, es decir, ambos eran débilmente NP-hard.
Además, parece que la misma recurrencia podría usarse para resolver ambos problemas usando la programación dinámica con un cambio muy pequeño (reemplazando la resta en SS con la división en SP).
Eso fue hasta que leí el capítulo 8 de "Teoría de la computación" de Bernard Moret (para aquellos que no tienen el libro, tiene una prueba de la dureza del producto del subconjunto a través de X3C, un problema fuertemente NP-duro).
Entiendo la reducción, pero no puedo entender qué estaba mal con mi conclusión anterior (equivalencia de los dos problemas).
ACTUALIZACIÓN : Resulta que el producto del subconjunto solo es débilmente NP-completo (el producto objetivo es exponencial en ). Gary y Johnson publicaron esto en su columna de completitud NP en 1981 , pero supongo que era menos visible que su reclamo anterior en su libro.
Respuestas:
Con respecto al problema de equivalencia de Subset Sum y Subset Product Hay un tecnicismo con respecto a Subset Product. ¡El producto de x's = T es en realidad Psuedopolynomial si T no es exponencial! Por lo tanto, las pruebas de que el producto del subconjunto es NP Hard no son (¡por razones técnicas!) ¡Bastante correctas!
Sin embargo, dada la promesa de que T es grande. ¡Entonces la reducción a través de Logaritmos a Subset Sum da una SUMA DE SUBSET NO ESTÁNDAR que supera los reales! Esto significa que el algoritmo Psuedopolynomial para Subset Sum no se aplica. Aunque los logaritmos son pequeños, ¡los lugares decimales estropean la programación dinámica psuedopolinómica!
espero que esto ayude
Zelah
fuente
En primer lugar, usar la exponenciación para pasar de SS a SP funciona (usando la base 2 en lugar de la base ), pero explota el tamaño de los números involucrados. Una dureza NP débil significa que si los números son pequeños (o más precisamente, indicados en unario), el problema ya no es difícil. Por lo tanto, el uso de la exponenciación crea instancias de SP de tamaño exponencial incluso para las instancias fáciles de SS, donde los números se escriben en unario.mi
En segundo lugar, el uso de logaritmos para pasar de SP a SS no funciona, ya que los logaritmos generalmente generan valores no enteros. SS y SP se definen usando números enteros, y los logaritmos a menudo resultan en valores trascendentales, que son difíciles de representar o hacer cálculos matemáticos.
Sea un número entero, A > 0 , luego log 2 A es racional si y solo si A es una potencia de 2, y trascendental en caso contrario. En primer lugar, si log 2 A = pUN A > 0 Iniciar sesión2UN UN para enteros distintos de ceropyq, entoncesA=2 pIniciar sesión2A = pq pag q ,Aq=2p. Por lo tanto, tenemos queA=2rpor descomposición primaria. Además,Arq=2p, por lo tanto, dada unaA, podemos elegirq=1yp=rpara demostrar quelog2Aes racional.A = 2pagq UNq= 2pag A = 2r UNr q= 2pag UN q= 1 p = r Iniciar sesión2UN
Solo tenemos que mostrar que nunca es trascendental de lo contrario. Esto se desprende del teorema de Gelfond-Schneider , para una formulación equivalente (como se puede encontrar en la página Wiki) es "si α y γ son números algebraicos distintos de cero, y tomamos cualquier logaritmo no α de α , entonces ( log γ ) / ( log α ) = log α γ es racional o trascendental ". También es fácil de verificar tomando el inverso del teorema y estableciendo α β = γ y, por lo tanto, βIniciar sesión2UN α γ α ( registroγ) / ( logα ) = logαγ αβ= γ .β= logαγ
Por último, considere lo que sucede cuando probamos el algoritmo de programación dinámica de SS en SP. Debido a que usamos productos en lugar de sumas, los números involucrados aumentan enormemente, y la precisión matemática arbitraria requerida de repente se convierte en un factor en el tiempo de ejecución. Es por eso que el algoritmo no puede resolver instancias de SP rápidamente, incluso si los números están en unario.
fuente
La explicación literal es que el problema del Producto del subconjunto es NP completo por una reducción de un problema fuertemente NP completo, como la cobertura exacta por 3 juegos. En tal reducción "fuerte", los enteros de entrada están delimitados por alguna función polinómica en el número de enteros en la instancia resultante del problema del Subconjunto de productos.
Tal reducción "fuerte" es imposible de cualquier problema fuertemente NP-completa a Subset Sum problema a menos que . Tenemos un algoritmo de programación dinámica de tiempo polinómico para resolver el problema de la suma de subconjuntos si los enteros de entrada están limitados por un polinomio.PAG= NPAG
fuente