Ich möchte eine Reihe von Permutationen von n
bells in m
bins erzeugen. Die folgende Gruppe von verschachtelten Listen generiert diese Permutationen.
Was die Lösung ausdruckt:
%Vor% Die Gesamtzahl der Permutationen ist choose(n+m-1,m-1)
, und die Reihenfolge der Permutationen ist mir egal. Aber es fällt mir schwer, dies zu einer Funktion zu machen, die eine beliebige Anzahl von Behältern aufnehmen kann. (Ich werde den Brunnen nicht mit meinen Versuchen verderben, es ist nur ein Durcheinander von verschachtelten Schleifen.) Wenn also jemand, der mehr Saavy ist als ich, die geschachtelten Schleifen oben in eine Funktion übersetzen könnte, würde ich das schätzen.
Oder wenn bereits eine Funktion zur Verfügung steht, um diese Art von Permutation durchzuführen (oder ein anderer Algorithmus, dem ich folge), würde ich mich freuen darüber informiert zu werden. Ich würde einen Ansatz bevorzugen, der keine überflüssigen Permutationen erzeugt (hier solche, die nicht zu n
addieren) und dann diese ablegt, aber für kleine Probleme wie diese wäre eine Lösung, die das tut, akzeptabel.
Im Folgenden finden Sie eine etwas andere, aber äquivalente Antwort, indem Sie ein allgemeineres Paket iterpc
Die Ausgabe ist die Fachnummer für die n Bälle.
%Vor%Die erste Zeile bedeutet, dass die 3 Bälle alle aus dem Behälter 1 stammen, während die letzte Zeile bedeutet, dass die 3 Bälle alle aus dem Behälter 4 stammen.
Sie können leicht Ihr gewünschtes Ergebnis erzeugen, indem Sie Zahlen von 1, 2, 3 und 4 zählen. Und Sie können auch den Iterator verwenden, um das Ergebnis sequenziell zu generieren.
%Vor%Tags und Links r permutation