Anzahl von Möglichkeiten zur Verteilung von Kugeln in Behälter

jungh

Neues Mitglied
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):
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!
 

jungh

Neues Mitglied
Nachtrag: Ein möglicher Lösungsansatz wäre, nicht direkt die Anzahl der Möglichkeiten mit Beachtung des Fassungsvermögens zu berechnen, sondern erst einmal jede Kombination ohne Behältervolumen, da danach ja einfach alle ausgeschlossen werden können, die das Volumen in einem der Behälter überschreiten...; ich habe jedoch keine Idee, wie man an so etwas herangehen sollte, außer mit einer rekursiven Funktion die sich entsprechend der Anzahl von Behältern selbst aufruft
 

Neumi5694

Top Contributor
(in deiner Liste oben fehlen noch mindestens 2 Kombinationen: 202 und 220)
Das mathematische Problem kenne ich nicht, kann dir deswegen auch nichts über die direkte Lösung sagen
Für eine Simulation hätte ich hingegen eine Lösung.
Erstelle hierzu folgende rekursibe Funktion:
Java:
    /**
     * Annahmen ohne Fehlerbehandlung: containers ist nicht null, alle Werte in containers sind >= 0, nBalls >=0
     * @param nBalls Zu verteilende Elemente
     * @param containers Liste der Container-Fassungsvermögen
     * @return Alle möglichen Kombinationen, die Elemente auf die Container aufzuteilen
     */
private static ArrayList<ArrayList<Integer>> splitBallsInto(int nBalls, List<Integer> containers) {
        ArrayList<ArrayList<Integer>> result = new ArrayList<>();
//Prüfung 1: nBalls < 1?
//dann ist das einzige Ergebnis eine ArrayList<Intger> der Länge containers.size() mit lauter 0.
//Prüfung 2: nBalls > Summe aller Container ?
//dann gibt es keine Lösung
//Prüfung 3 (Auch Abbruch der Rekursion): Gibt es weniger als 2 Container?
//Dann müssen alle Bälle zwangsläufig im ersten liegen, es gibt also nur eine Lösung
//ansonsten:
//int maxBallsInContainer = Math.min(nBalls, containers.get(0));
        for (int ballsInContainer = 0; ballsInContainer <= maxBallsInContainer ; ballsInContainer++) {
            int restBalls  = nBalls - ballsInContainer;
            for (ArrayList<Integer> oneResult :
    splitBallsInto(restBalls, containers.subList(1, nBalls))) {
        //jedem Ergebnis den Wert ballsInContainer  voranstellen (per add(0, ballsInContainer)) und das Ergebnis danach der Liste result hinzufügen
   }
}
    return result;
}
Ich hatte das fertig ausprogrammiert, nachträglich hab ich ein paar Zeilen rausgelöscht und durch Kommentare ersetzt, damit du auch noch was zu tun hast.
 

Neumi5694

Top Contributor
Edit: Die Sublist muss natürlich als EndIndex die Länge der ursprünglichen Containerliste verwenden und nicht die Ballanzahl
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
BeginnerJava Anzahl der 5 % - Zuwächse ausgeben Allgemeine Java-Themen 6
M Wie übergebe ich den Zähler für die Anzahl Rekursionsschritte korrekt? Allgemeine Java-Themen 2
S BlockingQueue mit dynamischer Anpassung der Anzahl von Producer und Consumer Threads Allgemeine Java-Themen 1
S Iterable<?> anzahl der Element Allgemeine Java-Themen 14
M Java- Bild gewissen Anzahl von Sekunden anzeigen?! Allgemeine Java-Themen 4
F Best Practice Große Anzahl an Objekten speichern und lesen Allgemeine Java-Themen 19
M Relative Anzahl an verschachtelten Forschleifen Allgemeine Java-Themen 8
The Pi Anzahl der Gewichtscheiben berechnen Allgemeine Java-Themen 11
P Threads Parallelisierte DB-Abfragen mit variabler Anzahl an Threads Allgemeine Java-Themen 4
Soloeco BubbleSort Anzahl der Vertauschungen Allgemeine Java-Themen 9
J Anzahl geöffneter Plugins Allgemeine Java-Themen 3
A Anzahl an Threads Systemweit Allgemeine Java-Themen 2
P Erste Schritte Dynamische Anzahl von verschachtelten Schleifen Allgemeine Java-Themen 5
E ArrayList Anzahl der gleichen Elemente Allgemeine Java-Themen 4
R Int werte vergleichen und Anzahl Paare ausgeben Allgemeine Java-Themen 4
L Ermitteln der Anzahl an Lösungen von quatratischen Gleichungen (Sieb von Atkin) Allgemeine Java-Themen 1
L Anzahl der Tage eines Monats Allgemeine Java-Themen 3
P Auf die Anzahl der Joins achten beim WS design Allgemeine Java-Themen 1
J Anzahl der Zeichen bei Eingabe begrenzen Allgemeine Java-Themen 5
S Zur Laufzeit Klasse mit einer anzahl von X Objekten erstellen Allgemeine Java-Themen 5
M Eingabe von Arrays geht über gewünschte Anzahl hinaus Allgemeine Java-Themen 2
G Liste anzahl der gleichen Objekte Allgemeine Java-Themen 6
P Anzahl vo Einträgen in verschiedenen Sets Allgemeine Java-Themen 3
R Anzahl der gerade gedrückten Tasten Allgemeine Java-Themen 6
J ermitteln der Anzahl der Monate Allgemeine Java-Themen 7
M Anzahl der Durchläufe einer Funktion errechnen Allgemeine Java-Themen 6
G Anzahl Primzahlen im Intervall Allgemeine Java-Themen 3
X Textdatei auf gewünschte Anzahl der Zeilen kürzen Allgemeine Java-Themen 2
M Anzahl Farbwerte (RGB) im Array speichern - Problem Allgemeine Java-Themen 13
N variable Anzahl von Objektinstanzen zur Laufzeit erstellen Allgemeine Java-Themen 4
D unbekannte Anzahl checkboxes Allgemeine Java-Themen 2
TiME-SPLiNTER Unbekannte Anzahl serialisierter Objekte lesen Allgemeine Java-Themen 2
Iron Monkey Anzahl der Monate ermitteln Allgemeine Java-Themen 17
neonfly Anzahl Zeichen pro Zeile auf der Konsole Allgemeine Java-Themen 8
R ArrayList -- Maximale Anzahl an Elementen Allgemeine Java-Themen 2
O Große Anzahl Bilder laden Allgemeine Java-Themen 7
S Array: Anzahl Elemente mit best. Wert zählen Allgemeine Java-Themen 4
V Java-Objekt. wie groß maximal ? anzahl der einträge Allgemeine Java-Themen 4
M Aus Anzahl Tagen Datum ermitteln Allgemeine Java-Themen 8
M JTable: Anzahl Zeichen bei Eingabe Allgemeine Java-Themen 2
T Anzahl Tage zwischen zwei Daten - Stunde fehlt? Allgemeine Java-Themen 2
S Anzahl der Stunden in Excel Datei schreiben Allgemeine Java-Themen 2
G Anzahl an Tagen auf Datum addieren Allgemeine Java-Themen 4
MQue Anzahl der Ziffern Allgemeine Java-Themen 13
G Anzahl Tage in Datum umwandeln Allgemeine Java-Themen 13
MQue Anzahl der Kommastellen Allgemeine Java-Themen 6
L Anzahl Tage zwischen zwei Kalenderdaten Allgemeine Java-Themen 5
F Anzahl der nachkommastellen bestimmen nur wie? Allgemeine Java-Themen 10
M Aktualisieren eines Chatprofils (Anzahl Minuten) Allgemeine Java-Themen 4
G Variable Anzahl JTextfleder Allgemeine Java-Themen 3
S Bandbreite/Anzahl Pakete messen Allgemeine Java-Themen 3
V String formatiert ausgeben ( gleiche Anzahl von Ziffern ) Allgemeine Java-Themen 5
padde479 Anzahl Methodenaufrufe Allgemeine Java-Themen 7
J Matrix mit unterschiedlicher Anzahl von Spalten pro Zeile? Allgemeine Java-Themen 4
F Datum mit anzahl tagen berechnen Allgemeine Java-Themen 3
W PrepareStatement und Anzahl der Datensätze Allgemeine Java-Themen 2
rambozola anzahl zeichen in konsole eclipse begrenzt? Allgemeine Java-Themen 5
G anzahl "verwendeter" elemente eines arrays ermitte Allgemeine Java-Themen 2
M Anzahl der Threads pro Programm? Allgemeine Java-Themen 3
R java.lang.String maximale Anzahl der Zeichen Allgemeine Java-Themen 7
V Anzahl der Zeilen in einem File Allgemeine Java-Themen 3
K anzahl laufender Threads Allgemeine Java-Themen 3
E Java Programm mit Clients erweitern - Möglichkeiten? Allgemeine Java-Themen 2
J Videokonferenz mittel Java ? Welche Möglichkeiten habe ich ? Allgemeine Java-Themen 2
D HTMLUnit Möglichkeiten? Allgemeine Java-Themen 3
S Einschätzen der Möglichkeiten Allgemeine Java-Themen 5
A Möglichkeiten, ein Bild schnell auszuwerten Allgemeine Java-Themen 56
G Möglichkeiten aufliste - Wie? Allgemeine Java-Themen 25
T Möglichkeiten der Kommunikatin zwischen Plugins in Ecl. RCP Allgemeine Java-Themen 3
B Möglichkeiten ein Java Programm auf einem Server auszuführen Allgemeine Java-Themen 30
I Welche Möglichkeiten bietet Java um Records in Dateien zu sp Allgemeine Java-Themen 10
G Alle Möglichkeiten n Elemente Anzuordnen. Allgemeine Java-Themen 13
J Funktion alle Möglichkeiten berücksichtigen Allgemeine Java-Themen 5
F SuppressWarnings("xxx") - welche Möglichkeiten gib Allgemeine Java-Themen 4
G möglichkeiten java? Allgemeine Java-Themen 4
K F-Verteilung FINV in Java berechnen Allgemeine Java-Themen 4
M Logikaufgabe: Beste Verteilung Allgemeine Java-Themen 11
C Exponentielle Verteilung in einer Liste Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben