J'ai une liste de produits qui ont un ID et une quantité, et j'ai besoin de trouver une liste de combinaisons de produits qui rempliront une certaine quantité.Trouver des permutations uniques pour l'objet
E.g.
ProductID | Quantity
1 | 5
2 | 5
3 | 8
4 | 15
Si je requiers une quantité de 15 alors je veux obtenir une liste avec les combinaisons suivantes:
Products: {1, 2, 3}, {1, 3, 2}, {1, 2, 4}, {1, 3, 4}, {1, 4}
{2, 1, 3}, {2, 1, 4}, {2, 3, 1}, {2, 3, 4}, {2, 4}
{3, 1, 2}, {3, 1, 4}, {3, 2, 1}, {3, 2, 4}, {3, 4}
{4}
Il est presque une permutation, mais il est filtré sur les entrées pour arri plus que ce est requis. Je dois arrêter de prendre d'autres articles, si à tout moment, la somme totale actuelle des valeurs dépasse 15. De cette manière, si j'avais toutes les permutations, j'aurais 24 résultats, mais j'en ai seulement 16.
E.g. si je prends le produit 4 alors je n'ai pas besoin de le combiner avec quoi que ce soit pour faire 15. De même, si je prends le produit 1 alors prends le produit 4, je n'ai plus besoin de ramasser le produit 5 + 15 = 20). J'ai pu faire fonctionner le code en obtenant toutes les permutations (par exemple, here), puis en filtrant ceux qui m'intéressent, mais une fois que vous commencez à obtenir un grand nombre de produits (par exemple 30), vous finissez par avec 4,3 milliards de combinaisons qui provoque des exceptions de mémoire insuffisante.
Comment puis-je créer uniquement les permutations requises en C#?
Vous voudrez peut-être passer par https://stackoverflow.com/questions/tagged/knapsack-problem et d'autres articles/recherche correspondant au problème ... –
Selon votre problème [{1,2, 3}, {1,3,2}, {2,3,1}, {2,1,3}, {3,2,1}, {3,1,2}] ces 6 combinaisons ne devraient pas être là comme l'un d'eux est bon pour toi non? –
@AmanSahni - Je veux toutes les combinaisons. Fondamentalement, il est dit que je devrais prendre tout de 1, 2 et un peu de 3, ou tout de 1, 3 et un peu de 2, ou tout de 2, 3 et un peu de 1 et ainsi de suite. – Greg