Trovare la combinazione più simile in un insieme di numeri

xak1
Salve,
avrei un problema di tipo combinatorio da risolvere:
Dato un insieme casuale di 36 numeri interi positivi, devo trovare la combinazione di uno o più numeri che sommati tra loro sia più vicina ad un dato valore S.

esempio con 7 numeri:
insieme=(14, 8, 1, 4 , 9, 8, 32) S=6 in questo caso la soluzione sarebbe:(1+4)

Ovviamente la cosa più semplice che viene in mente è: provare tutte le combinazione e prendere la migliore.
Purtroppo nel mio caso ho ben 36 numeri nell'insieme e quindi bisognerebbe fare 2^36 tentativi che sono troppi anche per un computer veloce.
Se qualcuno sa darmi qualche consiglio o indicarmi che tipo di algoritmo (se esiste) possa risolvere tale problema in modo più rapido mi sarebbe molto utile.

grazie

Risposte
hamming_burst

xak1
Grazie per la risposta,
comunque avevo già dato un'occhiata al "subset sum problem" ed anche se in effetti riporta una situazione abbastanza similare, sotto alcuni aspetti è diversa perchè nel mio caso non devo solo trovare se esiste o no il sottoinsieme ma anche sapere quale è.
Altra differenza è che ho solo numeri positivi e che non devo trovare l'uguaglianza della somma, ma quale combinazione è la più vicina al valore voluto.
Quindi leggendo la spiegazione mi risulta difficile capire se è possibile ed eventualmente come poter variare gli algoritmi spiegati per adattarli al mio caso.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.