J'ai une liste d'éléments qui ont des valeurs numériques et j'ai besoin de faire une somme en utilisant ces éléments. J'ai besoin de votre aide pour construire un tel algorithme. Ci-dessous, il est un exemple qui décrit mon problème, écrit en C#:Sélection d'éléments dans une liste pour obtenir une somme
int sum = 21;
List<Item> list = new List<Item>();
list.Add(new Item() { Id = Guid.NewGuid(), Value = 3 });
list.Add(new Item() { Id = Guid.NewGuid(), Value = 5 });
list.Add(new Item() { Id = Guid.NewGuid(), Value = 12 });
list.Add(new Item() { Id = Guid.NewGuid(), Value = 3 });
list.Add(new Item() { Id = Guid.NewGuid(), Value = 2 });
list.Add(new Item() { Id = Guid.NewGuid(), Value = 7 });
List<Item> result = // the items in the list that has the defined sum.
Note: Je n'ai aucune contrainte sur le nombre d'éléments dans le résultat.
Ceci est NP-complet: C'est ce qu'on appelle le problème de somme de sous-ensemble. http://en.wikipedia.org/wiki/Subset_sum_problem. Vous ne trouverez malheureusement aucune solution * facile * - la meilleure solution trouvée à ce jour est 'O (2^(N/2))'. – Ani
Les valeurs doivent-elles être les plus importantes parmi celles disponibles? –
L'étiquette de devoirs est-elle manquante? –