Acesta este mai mult un răspuns la motivul pentru care unicitatea sumelor afectează atât de mult dimensiunea încât este cazul $52485332$ devine banal (modul său de a tânji după un comentariu).
Când toate sumele trebuie să fie unice, atunci ele trebuie să rezulte în numere întregi diferite.
Pentru ca sunt acolo $500^{1000}$ sume posibile, există și $500^{1000}$ rezultate întregi diferite pentru asta. cel mai mic caz ar fi toate numerele întregi din $0$ la $500^{1000}-1$.
De exemplu,
$S_1 = \{0, 1, 2, ..., 499\}$
$S_2 = \{0, 500, 1000, ..., 249500\}$
$S_3 = \{0, 250000, 500000, ..., 124750000\}$
...
$S_{1000} = \{0, 500^{999}, 2*500^{999}, ..., 499*500^{999}\}$
ar fi o modalitate de a asigura unicitatea rezultatului. După cum puteți vedea, numerele devin foarte mari, foarte repede.
În acest exemplu particular, este ușor să găsiți rezultatul (doar alegeți întotdeauna cel mai mare număr care se potrivește de la ultimul până la primul set). Chiar și majoritatea numerelor este $S_3$ sunt mai mari decât $52485332$ și, prin urmare, poate fi ignorat.
Probabil că ați dori valori relativ aleatorii în seturile dvs. În acest caz, intervalul de valori trebuie să fie cel puțin puțin mai mare.
Cu toate acestea, este foarte puțin probabil ca vreo valoare să fie mai mică sau egală cu $52485332$ (când alegi uniform $500000$ valori din $500^{1000}$)
Programarea dinamică, așa cum a sugerat @poncho, într-adevăr funcționează doar pentru numere mici și performanța sa nu este cu mult mai bună decât căutarea exhaustivă (diferența liniară a numărului de seturi), deoarece sub-suma, care pot fi refolosite sunt unice, avantajul a nu se uita la alte posibilități nu există.
Timpul de rulare ar trebui să fie în aceeași ordine ca și căutarea exhaustivă. Doar îmbunătățirea este să vă integrați atunci când valorile sunt prea mari sau mici pentru a atinge ținta, dar pentru ținte rezonabile, acest lucru nu reprezintă un mare avantaj.
Activat ar putea reduce cu ușurință problema sumei subsetului sau problema rucsacului la aceasta, folosind doar același set de câte ori numărul cu care doriți să însumați.Problema cu aceasta este că aceasta nu este o reducere de timp polinomială și, prin urmare, nu este suficientă pentru a demonstra dacă problema este NP grea.