Hallo,
ich suche schon seit einigen Stunden ohne mehr oder weniger passende Ergebnisse; ich versuche, die Anzahl von Möglichkeiten zu finden, eine gegebene Anzahl nicht unterscheidbarer Bälle auf unterscheidbare Behälter, die jeweils ein unterschiedliches Fassungsvermögen haben, zu verteilen. Den passenden Ansatz dazu habe ich nach einigen Minuten schon gefunden, jedoch habe ich keine Idee, wie (und ob) man das in Java umsetzen kann: http://narkive.com/9a0CvErb.2 . Bisher habe ich ein nicht ganz komplettes Programm, es kann zwar die Möglichkeiten, die Bälle auf Gefäße aufzuteilen, errechnen, jedoch wird dabei noch kein Limit für die Größe/das Fassungsvermögen der Behälter beachtet.
Beispiel: 4 Bälle, 3 Behälter (Behälter 1 kann max. 2 Bälle beinhalten, B2 und B3 max. 3 Stück)
Die Möglichkeiten wären dann:
2 1 1
1 2 1
1 1 2
1 3 0
1 0 3
0 3 1
0 1 3
0 2 2
Mein bisheriger Code (der jedoch vermutlich komplett auseinandergenommen werden muss):
Vielen Dank für Antworten!
ich suche schon seit einigen Stunden ohne mehr oder weniger passende Ergebnisse; ich versuche, die Anzahl von Möglichkeiten zu finden, eine gegebene Anzahl nicht unterscheidbarer Bälle auf unterscheidbare Behälter, die jeweils ein unterschiedliches Fassungsvermögen haben, zu verteilen. Den passenden Ansatz dazu habe ich nach einigen Minuten schon gefunden, jedoch habe ich keine Idee, wie (und ob) man das in Java umsetzen kann: http://narkive.com/9a0CvErb.2 . Bisher habe ich ein nicht ganz komplettes Programm, es kann zwar die Möglichkeiten, die Bälle auf Gefäße aufzuteilen, errechnen, jedoch wird dabei noch kein Limit für die Größe/das Fassungsvermögen der Behälter beachtet.
Beispiel: 4 Bälle, 3 Behälter (Behälter 1 kann max. 2 Bälle beinhalten, B2 und B3 max. 3 Stück)
Die Möglichkeiten wären dann:
2 1 1
1 2 1
1 1 2
1 3 0
1 0 3
0 3 1
0 1 3
0 2 2
Mein bisheriger Code (der jedoch vermutlich komplett auseinandergenommen werden muss):
Code:
public static void main(String[] args){
int kugeln = 4, behaelter = 3;
long start = System.currentTimeMillis();
BigInteger counter = new BigInteger("0"), bi1, bi2, bi3;
bi1 = fakultaet(kugeln+behaelter-1);
bi2 = fakultaet(behaelter-1);
bi3 = fakultaet(kugeln);
counter = bi1.divide(bi2.multiply(bi3));
long end = System.currentTimeMillis()-start;
System.out.printf("Kugeln: %d, Behälter: %d, Permutationen: %d | ", kugeln, behaelter, counter);
}
private static BigInteger fakultaet(int n){
BigInteger fakultaet = new BigInteger("1");
for(int i = 1; i <= n; i++)
fakultaet = fakultaet.multiply(new BigInteger(Integer.toString(i)));
return fakultaet;
}
Vielen Dank für Antworten!