¿Por qué está completo el problema de la mochila NP incluso cuando tiene complejidad O (nW)?

Es un poco complicado tener esta idea.
Déjame explicarte con una simple conversación entre p1 y p2.
p1: “¿Qué es la complejidad del tiempo? – Sumar dos números”
p2: “Es un solo paso, entonces O (1)”.
p1: “No es exactamente qué pasa si tengo un número muy grande, por lo que me llevará algún tiempo”.
p2: “Sí, depende del número. Depende de la longitud del número. Por lo tanto, será O (log N), tiene una complejidad de tiempo logarítmico”.
p1: “O deberíamos decir O (M) donde M = longitud de entrada, por lo que es además un algoritmo de tiempo lineal no un algoritmo de tiempo logarítmico”.
P2: “Ambos son lo mismo, solo una forma diferente de decir”.
p1: “Sí, pero para obtener una respuesta correcta, deberíamos revisar la definición de la notación O grande. Dice: la notación O grande se usa para clasificar los algoritmos según cómo responden a los cambios en el tamaño de entrada “.
p2: “¡Oh!”
p1: “¿Entonces si N como 130 o 200 afectará el tiempo de ejecución del algoritmo?”
p2: “No”
p1: “¿Entonces si N como 130 o 200000 afectará el tiempo de ejecución del algoritmo?”
p2: “Sí”
P1: “Entonces podemos decir que el tamaño de la entrada no es el valor de N sino el número de bits necesarios para representar N (aquí, representación binaria de N)”.
p2: “Entiendo el punto que está tratando de hacer. Así que la respuesta correcta debería ser lineal porque, según la definición, la gran O depende del tamaño de la entrada, no del valor de esas variables de entrada”.
p1: “Por lo tanto, es incorrecto usar una variable en notación O grande que no significa el tamaño de la entrada sino solo el valor de una de las entradas. Así que recuerde que cuando alguien le dice que la suma es operaciones O (n), no quiere decir n es el valor de la entrada, pero n denota el tamaño de la entrada (bits necesarios para representar N) “.

De manera similar, en este caso estamos diciendo que la complejidad temporal de la mochila es O (nW). Por lo tanto, el uso de W en la notación O grande debería generar señales de alerta porque W es solo un valor de una de las variables en la entrada y no tiene nada que ver (directamente) con el tamaño de la entrada.
Por lo tanto, la forma correcta de decir la complejidad de la mochila sería O (n * 2 ^ m) donde m es el número de bits en W. Ahora puede ver que la mochila tiene una complejidad exponencial.
Incluso cuando decimos que el problema de la mochila tiene complejidad O (nW) tenemos un término especial cuando usamos un valor de una variable, tiempo pseudo-polinomial.

El algoritmo se ejecuta en tiempo exponencial en el tamaño de la entrada W, pero se ejecuta en tiempo polinómico en valor de W (el valor de W es diferente del tamaño de W).

Si usamos notación decimal:

si W = 10 => tamaño (W) = 2 bits

si W = 100 => tamaño (W) = 3 bits

si W = 1000 => tamaño (W) = 4 bits

si W = 10000 => tamaño (W) = 5 bits

entonces, cuando el tamaño se incrementa en 1, el valor de W se multiplica por 10 y el tiempo de ejecución del algoritmo se multiplica por 10

El problema de la mochila es una aplicación de programación dinámica.
Si resolvemos este problema usando la recursividad, la relación recursiva será esta:

Donde m = peso restante
Y n = número de artículos.
Este es el árbol resultante para el problema dado:


Si utilizamos esta relación si resolvemos algún problema, generará un árbol de nivel n.
Pero si suponemos que ese árbol es un árbol binario completo, obtendremos 2 ^ n nodos ( las llamadas de función toman el límite superior).
Por lo tanto, la complejidad del tiempo es 0 (2 ^ n).


Pero si resolvemos este problema usando la programación dinámica ( como sabemos que en la programación dinámica las llamadas a funciones repetitivas se calculan solo una vez y se almacenan en una tabla para su uso posterior).
( Aquí está el punto) Ahora, si contamos el número de llamadas a funciones repetitivas, veremos que se repiten muy pocas funciones.
Aunque la complejidad de tiempo usando la programación dinámica es 0 (mn). Pero será matemáticamente igual al 0 (2 ^ n). ( Debido a que se repiten menos llamadas a funciones).
Por lo tanto, podemos concluir que el problema de la mochila es un problema np completo ya que también la programación dinámica no puede reducir su tiempo.
Gracias:;


Solucionador de tiempo polinomial NP-Complete Solucionador de cubierta exacto