Los problemas de la mochila se resuelven fácilmente mediante programación dinámica. La programación dinámica se ejecuta en tiempo polinomial; Por eso lo hacemos, ¿verdad?
Sin embargo, he leído que en realidad es un problema NP-completo, lo que significaría que resolver el problema en un problema polinómico es probablemente imposible.
¿Dónde está mi error?
Respuestas:
El problema de la mochila es cuando los números se dan como números binarios . En este caso, la programación dinámica tomará exponencialmente muchos pasos (en el tamaño de la entrada, es decir, el número de bits en la entrada) para terminar .NP-complete ††
Por otro lado, si los números en la entrada se dan en unario, la programación dinámica funcionará en tiempo polinómico (en el tamaño de la entrada).
Este tipo de problemas se llama débilmenteNP-complete .
Este tipo de algoritmo, es decir, polinomio en el mayor número que es parte de la entrada, pero exponencial en la longitud de entrada se llama pseudo-polinomio .
fuente
m
(tamaño del paquete) yn
(número de artículos) es totalmente desconocida, ¿verdad? Y re "cuando los números se dan como números binarios" ... pero ¿no podrías decir eso para nada? Con la mayoría de los algoritmos, hablamos del tamaño de entrada en la base 10. ¿Por qué hablar de binario aquí? Y si codifica en binario, octal, decimal, etc., elactual
número de veces que itera a través de su bucle de algoritmo principal depende directamente de ambosn
yW
.La principal confusión radica en la diferencia entre " tamaño " y " valor ".
" Tiempo polinomial " implica polinomio wrt el tamaño de la entrada.
" Tiempo pseudopolinomial " implica polinomio wrt el valor de la entrada. Se puede mostrar (a continuación) que esto es equivalente a ser exponencial wrt el tamaño de la entrada.
En otras palabras: deje que represente el tamaño de la entrada y represente el valor de la entrada. N v a lNsize Nval
Tiempo polinómico: parax ∈ NO(Nxsize) x∈N
Pseudopolía. Tiempo: parax ∈ NO(Nxval) x∈N
Ahora, el problema de la mochila tiene una solución pseudopolinómica, no polinómica , porque la solución de programación dinámica proporciona un tiempo de ejecución dependiente de un valor , es decir, , donde es un valor que representa la capacidad máxima.WO(nW) W
Ahora, un valor se puede convertir a un tamaño representándolo en términos de # de dígitos que se necesitan para representarlo. te dice cuántos dígitos son necesarios para representar usando la base . Esto se puede resolver para para dar:N v a l b N v a lNsize=Logb(Nval) Nval b Nval
Conectar esto a la definición de tiempo pseudopolinomial muestra que es exponencial wrt :Nsize
fuente
Sin embargo, existen diferentes variantes (p. Ej., 0-1 Mochila y otras ) que pueden tener o no soluciones de tiempo polinómico o buenas aproximaciones. Pero esto no es lo mismo que el problema general de la mochila. Además, puede haber algoritmos eficientes que funcionen para instancias específicas (familias de) , pero estos algoritmos tardarán más en otras instancias.
fuente