Donné une somme cible et un ensemble d'entiers, trouver le plus proche sous-ensemble de nombres qu'ajouter à la cible

J'ai un ensemble d'entiers M et une somme cible k. Je veux trouver le sous-ensemble de M qui est la plus proche de k sans.

Par exemple:

M = {1, 3, 5, 5, 14}

k = 12

answer = {1, 5, 5}

because 1 + 5 + 5 = 11 and there is no way to make 12.

J'ai la contrainte supplémentaire que le sous-ensemble peut contenir au plus 4 éléments.

Dans mon application, la taille de |M| peut être de grande taille (de l'ordre de plusieurs milliers d'éléments). Si il n'est pas possible de trouver les paramètres optimaux de réponse dans un délai raisonnable, je suis intéressé par des solutions qui, au moins, donner une "bonne" réponse.

Maintenant je suis à la résolution de ce problème en générant de 10 000 sous-ensembles aléatoires et de la sélection la plus proche, celui qui fonctionne le mieux que l'on pourrait attendre mais est très lent. Je ne suis pas sûr de savoir comment loin d'être optimale, ce qui est réellement, mais aucune indication sur qui serait intéressant pour moi en tant que bien.

Et juste pour confirmer, vous voulez que le réel sous-ensemble, et pas seulement la somme?
Quelle est la taille de l'individu valeurs entières? Existe-il des négatifs d'entre eux?
Les entiers sont tous positifs. Ils s'étendent sur environ 7 ordres de grandeur (c'est à dire de 1 à 1M), mais la plupart sont [1...10000].
Oui, je suis à la recherche de la plus proche sous-ensemble avec le max de l'ordre de 4.

OriginalL'auteur John Shedletsky | 2013-10-24