La risposta di Aryabhata può essere risolta sfruttando il fatto che possiamo moltiplicare tutti i numeri per qualche grande c , quindi aggiungere qualcosa di piccolo a ciascuno per agire come un "tag di presenza", e quindi fornire alcuni numeri extra che consentiranno per arrivare a zero se potessimo arrivare a c K senza di loro. In particolare, useremo c = 2 ( n + 1 ) e 1 come tag di presenza.
Data un'istanza ( S= { x1, ... , xn} , K) del problema generale con valore target K , creeremo un'istanza del problema specifico (con valore target 0) che contiene:
- Y= { y1, ... , yn} , doveyio= 2 ( n + 1 ) xio+ 1 .
- Il numero z= - 2K( n + 1 ) - n .
- n - 1 copie del numero 1, da chiamare numeri "pull-up".
Presumo che Aryabhatta faccia che K è positivo. (Dato che sono passati 6 anni, risponderò al suo esercizio per il lettore: la ragione per cui possiamo farlo è che se scambiamo i segni di tutti i numeri in un'istanza del problema generale, incluso K , allora finiamo con un nuova istanza del problema equivalente. Ciò significa che un algoritmo per risolvere istanze K positive è sufficiente per risolvere qualsiasi problema: per risolvere un'istanza con K negativa , potremmo eseguire questo scambio di segni, eseguire quell'algoritmo e inoltrare la sua risposta come la risposta alla domanda originale. E ovviamente se K= 0 quindi non è necessario eseguire alcuna trasformazione del caso generale nel caso speciale!)
Innanzitutto mostriamo che una risposta SÌ alla determinata istanza del problema generale implica una risposta SÌ all'istanza costruita del problema speciale. Qui possiamo supporre che qualche soluzione { xj1, ... , xjm} al problema generale esiste: che è, questa collezione non vuoto di m numeri somme a K . Quindi se prendiamo i corrispondenti valori y{ yj1, ... , yjm} nella nostra soluzione all'istanza costruita, si sommeranno a 2K(n+1)+m . Possiamo quindi scegliere di includere−2K(n+1)−n nella soluzione, lasciandoci con una somma dim−n . Dal momento che1≤m≤n , questo è compreso nell'intervallo[−n+1,0] , che possiamo estrarre con successo fino a 0 includendo alcuni sottogruppi dei numeri di pull-up.
Ora mostriamo che una risposta SÌ all'istanza costruita implica una risposta SÌ all'istanza data originale. È qui che la moltiplicazione per 2(n+1) diventa importante - è ciò che ci consente di essere certi che i numeri extra che abbiamo incluso non possano "fare troppo".
Qui possiamo supporre che esista qualche soluzione {yj′1,…,yj′m′} all'istanza costruita: ovvero, questa raccolta non vuota di m′ numeri si somma a 0. Per i requisiti del problema, questa soluzione contiene almeno un elemento. Inoltre, deve contenere almeno un elemento di Y , poiché senza questo è impossibile raggiungere un totale di 0: se sono presenti solo numeri pull-up, la somma è necessariamente nell'intervallo [1,n−1] ( notare che in questo caso almeno unoil numero di pull-up deve essere presente e tutti sono strettamente positivi, quindi la somma non può essere 0); mentre se la soluzione consiste solo di z e di alcuni numeri di pull-up, allora il totale è necessariamente negativo perché z=−2K( n + 1 )−n≤−n e il più che i numeri di pull-up possono aumentare la somma da è n - 1 .
Supponiamo ora alla contraddizione che la soluzione non contenga z . Ogni elemento in Y costituito da due termini: un multiplo di 2 ( n + 1 ) e un +1 "tag presenza". Si noti che il termine +1 su ciascuno degli n elementi di Y aumenta la somma di 1 se si sceglie quell'elemento, così come ciascuno dei numeri pull-up fino a n - 1 scelti, quindi il totale contribuito da questi 2 le fonti per qualsiasi soluzione sono almeno 1 (perché abbiamo stabilito nel paragrafo precedente che deve essere scelto almeno un elemento di Y ) e al massimo n + n - 1 = 2 n - 1 . In particolare, ciò implica che la somma di questi due insiemi di termini,se presa modulo2 ( n + 1 ) , è diversa da zero. Partendo dal presupposto che la soluzione non contengaz , gli unici altri componenti di questa somma sono i multipli di2 ( n + 1 ) forniti dai membri scelti diY , che non influiscono sul valore della somma quando presa modulo2 ( n + 1 ) . Quindi la somma di tutti i termini nella soluzione, se presa modulo2 ( n + 1 ) , è diverso da zero, il che significa che non può essere uguale alla somma target di 0, il che significa che non può essere affatto una soluzione valida: abbiamo trovato una contraddizione, nel senso che deve essere chez= - 2K( n + 1 ) - n è presente in ogni soluzione dopo tutto.
Quindi ogni soluzione contiene z . Lo sappiamo
( - 2K( n + 1 ) - n ) + ∑m'io'= 1( 2 ( n + 1 ) xj'io'+ 1 ) + ∑ pull-up = 0 ,
e possiamo riorganizzare i termini:
- 2 K( n + 1 ) + ∑m'io'= 1( 2 ( n + 1 ) xj'io') - ( n + ∑m'io'= 11 + ∑ pull-up ) = 0
- 2K( n + 1 ) + ∑m'io'= 1( 2 ( n + 1 ) xj'io') - ( n + m'+∑ pull-up ) = 0
2 ( n + 1 ) ( - K+ ∑m'io'= 1Xj'io') - ( n + m'+ ∑ pull-up ) = 0 .
Dato che la somma è 0, deve rimanere 0 se presa modulo 2 ( n + 1 ) , il che implica che possiamo scartare tutti i termini contenenti un multiplo di 2 ( n + 1 ) per ottenere la nuova equazione
- ( n + m'+ ∑ pull-up ) = 0 .
Questo può essere sostituito direttamente nell'equazione precedente per ottenere
2 ( n + 1 ) ( - K+ ∑m'io'= 1Xj'io') = 0 .
Infine, dividendo entrambi i lati per 2 ( n + 1 ) foglie
- K+ ∑m'io'= 1Xj'io'= 0 ,
che fornisce una soluzione all'istanza del problema generale originale.