La respuesta de Aryabhata se puede solucionar haciendo uso del hecho de que podemos multiplicar todos los números por una c grande , y luego agregar algo pequeño a cada uno para actuar como una "etiqueta de presencia", y luego proporcionar algunos números adicionales que permitirán nosotros llegar a cero si pudiéramos llegar a cK sin ellos. Específicamente, usaremos c=2(n+1) y 1 como la etiqueta de presencia.
Dada una instancia (S={x1,…,xn},K) del problema general con el valor objetivo K , crearemos una instancia del problema específico (con valor objetivo 0) que contenga:
- Y={y1,…,yn} , dondeyi=2(n+1)xi+1 .
- El número z=−2K(n+1)−n .
- n−1 copias del número 1, que se denominarán números "pull-up".
Asumiré como Aryabhatta hace que K es positivo. (Como han pasado 6 años, responderé su ejercicio para el lector: la razón por la que podemos hacer esto es que si intercambiamos los signos de todos los números en una instancia del problema general, incluido K , entonces terminamos con un nueva instancia de problema equivalente. Eso significa que un algoritmo para resolver instancias positivas de K suficiente para resolver cualquier problema: para resolver una instancia con K negativa , podríamos realizar este intercambio de signos, ejecutar ese algoritmo y reenviar su respuesta como la respuesta a la pregunta original y, por supuesto, si K=0 ¡entonces no necesitamos realizar ninguna transformación del caso general en el caso especial!)
Primero, demostremos que una respuesta SÍ a la instancia dada del problema general implica una respuesta SÍ a la instancia construida del problema especial. Aquí podemos asumir que alguna solución {xj1,…,xjm} para el problema general existe: es decir, esta colección no vacía de m números sumas a K . Entonces, si tomamos los valores y correspondientes {yj1,…,yjm} en nuestra solución a la instancia construida, sumarán 2K(n+1)+m . Entonces podemos elegir incluir−2K(n+1)−n en la solución, dejándonos con una suma dem−n . Dado que1≤m≤n , esto está en el rango[−n+1,0] , que podemos extraer con éxito hasta 0 al incluir algún subconjunto de los números desplegables.
Ahora demostremos que una respuesta SÍ a la instancia construida implica una respuesta SÍ a la instancia dada original. Aquí es donde la multiplicación por 2(n+1) vuelve importante: es lo que nos permite estar seguros de que los números adicionales que incluimos no pueden "hacer demasiado".
Aquí podemos suponer que existe alguna solución {yj′1,…,yj′m′} para la instancia construida: es decir, esta colección no vacía de números m′ se suma a 0. Según los requisitos del problema, esta solución contiene en menos un elemento Además, debe contener al menos un elemento de Y , ya que sin esto es imposible alcanzar un total de 0: si solo hay números desplegables, entonces la suma está necesariamente en el rango [1,n−1] ( tenga en cuenta que en este caso al menos unoel número desplegable debe estar presente, y todos ellos son estrictamente positivos, por lo que la suma no puede ser 0); mientras que si la solución consiste solo en z y algunos números desplegables, entonces el total es necesariamente negativo porque z=−2K(n+1)−n≤−n lo máximo que los números desplegables pueden aumentar la suma by es n−1 .
zY2(n+1)nYn−1Yn+n−1=2n−12(n+1)z2(n+1)Y2(n+1)2(n+1)z=−2K(n+1)−n
z
(−2K(n+1)−n)+∑m′i′=1(2(n+1)xj′i′+1)+∑pull-ups=0
y podemos reorganizar los términos:
−2K(n+1)+∑m′i′=1(2(n+1)xj′i′)−(n+∑m′i′=11+∑pull-ups)=0
−2K(n+1)+∑m′i′=1(2(n+1)xj′i′)−(n+m′+∑pull-ups)=0
2(n+1)(−K+∑m′i′=1xj′i′)−(n+m′+∑pull-ups)=0
2(n+1)2(n+1)
−(n+m′+∑pull-ups)=0
Esto se puede sustituir directamente de nuevo en la ecuación anterior para obtener
2(n+1)(−K+∑m′i′=1xj′i′)=0
2(n+1)
−K+∑m′i′=1xj′i′=0
que da una solución a la instancia original del problema general.