Encontré el problema P vs NP hace algún tiempo y recientemente he trabajado en el problema de la suma de subconjuntos. He leído el artículo de Wikipedia sobre el problema de la suma de subconjuntos, así como la pregunta Algoritmo de suma de subconjuntos
He analizado el problema y encontrado algunas soluciones, pero hasta ahora parecen ser NP, creo que puedo hacer un algoritmo suficientemente rápido en tiempo NP.
Mi problema es que no soy bueno en teoría, por lo que no me ayuda mucho hablar sobre el teorema de Cook-Levin o las máquinas de Turing no deterministas.
Lo que me gustaría es una explicación del subconjunto de programación dinámica de tiempo pseudo-polinomial que se suma en Wikipedia.
Lo he leído y creo que entiendo el concepto general de por qué es NP en lugar de P (relacionado con el tamaño de la entrada en lugar de las operaciones con él), pero no entiendo el algoritmo.
Agradecería que alguien pusiera un ejemplo con algunos números y cómo funciona. Me ayudaría mucho porque:
- Dame ideas para mejorar mi algoritmo futuro
- Ayúdame a entender intuitivamente cuando un algoritmo es pseudopolonmial en lugar de NP.
fuente
Respuestas:
Reformulando el comentario de Kaveh como respuesta:
Si limita el tamaño de los valores en la entrada (limita el número de bits para que cada valor sea logarítmico en el número total de bits de la entrada), entonces el problema puede resolverse en tiempo polinómico usando programación dinámica. Si no están acotados, pueden tener valores que son exponencialmente grandes y el tamaño de la tabla para la programación dinámica sería exponencial.
fuente