Dites qu'il y a x nombre de boîtes, chaque boîte contient un "inventaire" des lettres A-Z, chaque inventaire de lettres étant 1 ou plus.Comment implémenter un tel algorithme?
Maintenant, dis-je besoin:
- 6 Comme
- 2 hôtes
- 1 C
Comment puis-je obtenir une liste de toutes les combinaisons possibles/permutation des boîtes cela peut me fournir les lettres dont j'ai besoin?
L'algorithme doit également produire une combinaison de boîtes pour répondre à mes besoins. Par exemple: disons que Box-1 n'a que 4 As et que Box-2 a 1 A et que Box-3 a 1 A, j'ai besoin du résultat de l'algorithme pour spécifier que le 6 As peut être rempli sur les 3 cases.
Quelle est la logique de base à la solution d'un tel problème. Y a-t-il des algorithmes particuliers que je dois examiner pour cela?
EDIT 1:
par la suggestion de dcp, voici ma tentative que la mise en œuvre de PHP:
$boxes = array(
// box 1
array(
'A' => 6,
'B' => 4,
'C' => 10
),
// box 2
array(
'A' => 8,
'B' => 4,
'C' => 2
),
// box 3
array(
'A' => 1,
'B' => 1,
'C' => 0
)
);
$n = count($boxes);
for ($mask = 0; $mask <= (1 << $n) - 1; $mask++)
{
$tots = array();
for ($i = 0; $i < $n; $i++)
{
if (((1 << $i) & $mask) != 0)
{
// this is a selected box for this mask, add the A's, B's etc. for this box to the total
$tots[0] += $boxes[$i]['A'];
$tots[1] += $boxes[$i]['B'];
$tots[2] += $boxes[$i]['C'];
}
// check the tots array to see if it meets the letter requirements. If it does,
// then this is a valid combination of boxes.
}
}
Pourriez-vous fournir un certain arrière-plan? Pourquoi voulez-vous TOUTES les combinaisons? Cela ne semble pas utile, car après avoir listé les cas, vous n'avez pas de critère pour en sélectionner un. À moins que ce soit de la curiosité ... ou des devoirs. –
@belisarius: il ne doit pas y avoir de critère pour en sélectionner un. Peut-être que le problème est résolu avec toutes les combinaisons identifiées. Aussi, pourquoi les deux seules raisons possibles pour lesquelles je pose cette question sont "curiosité" ou "devoirs"? Cela ne pourrait-il pas être un problème réel sur lequel je travaille? – StackOverflowNewbie
Oh oui !, bien sûr! Comme il s'agit d'un site «donnant-donnant», je vous demande simplement de partager la partie la plus publique de la raison d'être de votre question, juste pour aider les autres à reconnaître le genre de problème que les réponses que vous obtenez pourraient être appliquées. Les réponses valides sont {mon problème est ...}, {curiosité}, {pas votre entreprise}. Le dernier n'aide pas beaucoup, cependant. –