Den Kuchen aufteilen - aber wie? (Rebalancing-Algorithmus)

ungenau

Mitglied
Moin Moin,
man stelle sich einen Kuchen vor und 4 Personen. Jede Person soll immer gleich viel vom Kuchen haben (25%). Ein Kuchenteil kann verputzt werden oder produziert werden. Am Anfang hat jede Person 25% des Gesamtkuchen. Nach und nach ergibt sich aber folgendes Bild: A, B, C und D haben 26%, 24,5%, 25,75% und 23,75% des Gesamtkuchen. Jetzt soll umverteilt werden, mit der Bedingung, wenn eine Person um mehr als +-0,5% von 25% abweicht. Das ist bei Person B nicht der Fall (abs(25-24,5)<=0,5). Deswegen fällt Person B aus der Umverteilung heraus. Frage: Wie sollte der Umverteilungsalgorithmus lauten?
Vielen Dank für euren fachlichen Rat :)
 
K

kneitzel

Gast
Was hast Du denn für Ideen, wie man sowas machen kann?

Das ist ja schon ein bildliches Beispiel. Also wie gehst Du vor, wenn Du nun an dem Tisch bist und diesen Zustand siehst?
 

ungenau

Mitglied
Ich würde einmal durch 4 Teilen (25%) und dann jeweils ein Drittel der Differenz zu 25% addieren oder subtrahieren. Nur was passiert dann mit B?
 

Jw456

Top Contributor
wenn du B nicht beachten willst wirtst du wohl den Rest duch drei teilen müssen.

Rest ist 74.5% vom ganzen in deinem Fall
bei den +- 0,5%
bekommen immer zwei 25,5 und zwei 24,5
 
K

kneitzel

Gast
Also irgendwie wollt ihr irgendwas machen ohne jede Analyse? Und eine Taktik ist noch nicht zu erkennen.

Oder vielleicht fangen wir erst einmal an, da etwas zu Klassifizieren: Was für Fälle gibt es denn für eine Portion Kuchen?
 
K

kneitzel

Gast
Ja, weil Du auch genau in diese Kerbe diskutiert hast und zu einem Teilen durch drei rätst:
wenn du B nicht beachten willst wirtst du wohl den Rest duch drei teilen müssen.

Für kneitzel sind alle anderen dümmer als er. ;) Er wurde schon als Programmierer geboren...
Und das kann ich nicht verstehen. Du erwartest doch Hilfe, aber du versuchst noch nicht einmal, auf eine mögliche Führung heran zu gehen.

Also ob es hier um Programmieren geht. Es geht um einen vernünftigen Ansatz und der ist eigentlich immer gleich! Das hat nichts mit Programmieren zu tun!

Wieso kannst Du nicht vernünftig antworten? Wie kann man denn die Kuchenstücke einteilen ("Klassifizieren" - falls Du das nicht verstanden haben solltest.) Was für drei mögliche Fälle haben wir denn?
- Ein Fall ist ja explizit erwähnt: Denn wenn eben nicht um mehr als 0,5% abgewichen wird, dann soll nichts mit dem Kuchenstück gemacht werden.
Damit sind jetzt noch zwei Fälle zu finden. Findest Du die? Oder bist Du jetzt an einem Punkt angelangt, an dem Du nicht mehr an einer Lösung interessiert bist?
 
K

kneitzel

Gast
Aber wenn Du das mit dem Klassifizieren nicht hin bekommst und dir das zu abstrakt ist:

Dann stell es Dir doch einfach mal bildlich vor! Wie könntest Du denn vorgehen um das Schritt für Schritt auszugleichen?
Du kannst Die da ja vielleicht mal das größte und das kleinste Stück ansehen - was könnte man da ausgleichen?
Und wenn man das gemacht hat: Wie ginge es dann ggf. weiter?

Vielleicht kannst Du ja mit den Gedanken eine Lösungsweg formulieren...
 

White_Fox

Top Contributor
Ich würde einmal durch 4 Teilen (25%) und dann jeweils ein Drittel der Differenz zu 25% addieren oder subtrahieren. Nur was passiert dann mit B?
Ich sag mal so: Wenn du eine Toleranz zulassen willst, aber trotzdem nur exakt 100% (und nicht 97% oder 102% als Obergrenze) haben willst, dann mußt den anderen Personen ebenfalls eine Toleranz zugestehen. Dann kannst du nicht auf Biegen und Brechen jeden wieder auf 25% bringen, sondern im Toleranzbereich von 25% ±0,5% halten.
 
K

kneitzel

Gast
Einfach nur, damit der Thread dann ein Ende hat: Zwei doch einfache Ansätze:

1. Ansatz:

a. Wir holen uns das größte und das kleinste Stück.
b. ist eines der beiden Stücke nicht mehr zu verändern? -> wir sind fertig.
c) Wir ermitteln die Abweichung bei beiden Stücken. Die kleinere Abweichung wird dem größeren Stück weggenommen und dem kleinsten Stück gegeben.
d) Es geht bei a) weiter

2. Ansatz (ähnlich):
Wir filtern:
- die größten Stücke in eine Liste
- die kleinsten Stücke in eine Liste
==> So lange in beiden Listen Elemente sind, nehmen wir jeweils das erste Element, ermitteln die Abweichung, nehmen die kleinere Abweichung um diese dem größeren Element wegzunehmen und dem kleineren Element zu geben. Anschließend prüfen wir beide Elemente. Mindestens eins erfüllt das Kriterium nicht mehr und wird aus der jeweiligen Liste entfernt.

Generell ist anzumerken: Es ist möglich, dass wir Elemente haben, die nicht ausgeglichen werden.
Beispiel: 3 mal 0.4% zu wenig, der 4te hat 1.2% zu viel. Da die ersten 3 Stücke aber nicht ausgeglichen werden sollen ist es nicht möglich, das 4te Element auszugleichen. (Ich hatte es so verstanden, das Stücke mit < 0.5% Abweichung nicht verändert werden sollen. )

Sollte die Aufgabe es aber anders meinen, so dass die Stücke nicht verändert werden müssen es aber durchaus erlaubt ist: Dann sind die Algorithmen zu verändern.

Bei 1.: Wir ändern nur die Abbruchbedingung: Erst wenn kein Element mehr anzupassen ist, brechen wir ab.

Bei dem 2. Ansatz ist es nicht ganz so trivial. Da muss die Liste, die noch Elemente hat, halt weiter bearbeitet werden. Dazu könnte man statt zwei Listen eben 4 Listen führen. größere Elemente außerhalb / innerhalb der Toleranz und das auch mit kleineren Elementen. Sobald eine Liste leer ist, wird dort mit der Liste innerhalb der Toleranz weiter gemacht bis auch die zweite Liste erledigt ist.

Und weil es so schön ist, einfach noch einen 3. Ansatz:
Ich sortiere die Liste nach Größe.
Dann summiere ich die Abweichung bei den zu veränderten Elementen:
Dann habe ich ein Delta zu Gross und ein Delta zu klein. Das größere Delta wird genommen und alle Elemente werden direkt auf 25 gesetzt.
Das andere Delta wird genommen als Vorrat und ich gehe die Liste von der anderen Seite durch:
- Für jedes Element schaue ich mir das Delta zur 25 an und vergleiche mit meinem Vorrat. Das kleinere Element wird genommen, der Vorrat reduziert und das Element ausgeglichen.
- Abbruch ist: Vorrat ist leer.

Und das alles hat nichts mit Programmieren zu tun. Dies hat einfach damit zu tun, dass man ein Problem hat und dieses irgendwie lösen muss.
Kuchenstücke ist doch anschaulich. Man kann aber auch Bonbons nehmen. Jeder soll 250 Bonbons haben. +/- 5 Bonbons ist ok.
Was macht man dann um das auszugleichen? Das ist - ganz nebenbei - ein Problem, das Kinder schon lösen können in der Grundschule. ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Zu langen String aufteilen - bequeme Methode? Java Basics - Anfänger-Themen 14
W String einer Textdatei in einzelne Stringobjekte pro Zeile aufteilen Java Basics - Anfänger-Themen 14
M Wie kann ich ein Array in zwei Hälften aufteilen? Java Basics - Anfänger-Themen 12
A Files aufteilen Java Basics - Anfänger-Themen 4
C Integer in Vierer-Zahlblöcke aufteilen Java Basics - Anfänger-Themen 11
Z Satz aufteilen und die Wörter zählen (HashMap) Java Basics - Anfänger-Themen 15
C Klassen objektorientiert aufteilen Java Basics - Anfänger-Themen 6
D OOP- Eine Klasse in mehrere Klassen aufteilen Java Basics - Anfänger-Themen 7
G String mit mehreren Attributen aufteilen Java Basics - Anfänger-Themen 6
CptK Variablen ArrayList aufteilen Java Basics - Anfänger-Themen 2
T Zahlen aufteilen Java Basics - Anfänger-Themen 2
R Frage: Aufteilen der GUI Java Basics - Anfänger-Themen 3
Z Threads Executor Framework - Aufgabe auf n Threads aufteilen Java Basics - Anfänger-Themen 10
F Methoden Java String aufteilen Java Basics - Anfänger-Themen 17
MiMa Aufteilen in Classen Java Basics - Anfänger-Themen 5
J Hochzahlen aufteilen Java Basics - Anfänger-Themen 3
N Input/Output .txt-Datei einlesen, aufteilen und seperat abspeichern Java Basics - Anfänger-Themen 3
D String in Integer Array aufteilen Java Basics - Anfänger-Themen 12
K arraylist zufällig aufteilen Java Basics - Anfänger-Themen 5
L Array aufteilen Java Basics - Anfänger-Themen 3
L Matrizen aufteilen Java Basics - Anfänger-Themen 3
L Array aufteilen Java Basics - Anfänger-Themen 13
D Java Download in mehrere Parts aufteilen Java Basics - Anfänger-Themen 2
D 100.0% gleichmäßig aufteilen, so dass Summe 100.0% sind, nicht 99,9% oder 100,1% Java Basics - Anfänger-Themen 3
H String/StringBuffer nach zeilen aufteilen Java Basics - Anfänger-Themen 2
M Programm in zwei Klassen aufteilen? Java Basics - Anfänger-Themen 8
M Betrag in Münzen aufteilen Java Basics - Anfänger-Themen 15
M Sekunden aufteilen Java Basics - Anfänger-Themen 5
S Nach Namen sortieren und diese in 3 Gruppen aufteilen Java Basics - Anfänger-Themen 16
K String aufteilen Java Basics - Anfänger-Themen 11
L In metoden/classen aufteilen (weniger im main) Java Basics - Anfänger-Themen 17
I Exception wird gefangen, aber trotzdem in Error Log? Java Basics - Anfänger-Themen 10
K Programm compilierbar aber nicht ausführbar... Java Basics - Anfänger-Themen 21
N Hey Leute und zwar versuche ich gerade ein 2D Spiel zu Programmieren aber die Figur will sich nicht nach links oder rechts bewegen :( Java Basics - Anfänger-Themen 12
T float soll durch schleife die größte mögliche Zahl herausfinden, Ausgabe ist aber "Infinity" Java Basics - Anfänger-Themen 1
monsterherz Fehler Semikolon fehlt - ich weiss aber nicht wo da noch eines hin sollte... Java Basics - Anfänger-Themen 21
M Konstruktor-Aufruf im Konstruktor, aber nicht am Anfang? Java Basics - Anfänger-Themen 4
N Programm Funktioniert mit .txt Datei aber nicht mit .rtf Datei Java Basics - Anfänger-Themen 2
N Interpreter-Fehler Compiler zeigt keine Fehler an, aber das Programm läuft nicht (BlueJ) Java Basics - Anfänger-Themen 2
H Kapselung protected aber in einer Kindklasse nicht zugänglich Java Basics - Anfänger-Themen 5
L Hilfe! Liste mit Items werden ausgegeben aber nicht in zufälliger Reihenfolge Java Basics - Anfänger-Themen 6
P Installation JRE 8u321 startet, geht aber nicht weiter Java Basics - Anfänger-Themen 1
berserkerdq2 Ich gebe eine ArrayList als List zurück per MEthode, wie kann ich nun aber die ArrayList speichern? Java Basics - Anfänger-Themen 46
L Mergesort (aber anders) Java Basics - Anfänger-Themen 2
P Mein Programm wird zwar erfolgreich Compiliert, öffnet sich aber nicht Java Basics - Anfänger-Themen 6
HelpInneed Baum ausgeben (aber mal anders) Java Basics - Anfänger-Themen 3
U Kann man bei Java gleich mehrere Bedingungen prüfen in der If, aber in einem "Satz"? Java Basics - Anfänger-Themen 1
H Kapselung JProgressBar in JTable, aber getValueAt() greift nicht Java Basics - Anfänger-Themen 7
OSchriever Jar-Programm läuft auf Windows aber nicht auf Linux(Raspberri Pi4) Java Basics - Anfänger-Themen 22
R Fehlermeldung aber WO liegt der Fehler? Java Basics - Anfänger-Themen 7
I DecimalFormat in Zahlenformat für Währung, habe 7,99, bekomme aber 7 Java Basics - Anfänger-Themen 4
CptK Generics: Klassen die Interface implementieren, aber selbst nicht das Interface sind Java Basics - Anfänger-Themen 8
AGW App programmiert lassen, aber Änderungen vornehmen Java Basics - Anfänger-Themen 13
B Interface List - Objekt übergeben? Einzelnes Objekt geht, aber Liste nicht? Java Basics - Anfänger-Themen 4
B Fehler, aber ich weiß nicht warum Java Basics - Anfänger-Themen 3
J Fehler im Code, aber ich weiß nicht wieso! Java Basics - Anfänger-Themen 6
B Java Mail -> Mail senden, ist aber nich in IMAP unter "Gesendet" Java Basics - Anfänger-Themen 3
A Figur erkennen, aber Abweichung falsch Java Basics - Anfänger-Themen 2
A Haben KNNs ein Gedächtnis, lernen etwas oder verändern sich, während sie nicht trainieren, aber aktiv sind? Java Basics - Anfänger-Themen 3
C "HelloWorld" - Dateien erstellt, aber ist es eine class-Datei? Java Basics - Anfänger-Themen 2
S Programmierung simulieren - aber wie?! Java Basics - Anfänger-Themen 3
S Interpreter-Fehler Endlosschleife zur Laufzeit aber warum? Java Basics - Anfänger-Themen 15
J Mit OpenJDK entwickeln aber Oracle SE Runtime installieren? Java Basics - Anfänger-Themen 6
X Threads Zwei Threads, aber doppelte Ausgabe verhindern (synchronized) Java Basics - Anfänger-Themen 54
A Java-Programm läuft bei installierter JDK aber nicht mit JRE? Java Basics - Anfänger-Themen 5
C Statischer Typ aber Variable nicht statisch? Java Basics - Anfänger-Themen 5
J ShortCut erstellen aber wie die dll einbinden Java Basics - Anfänger-Themen 3
I "\n" aus ArrayList enfernen, aber wie?! Java Basics - Anfänger-Themen 4
B Türme von Hanoi mit einer beliebigen aber gültigen Eingabe lösen Java Basics - Anfänger-Themen 5
S JDK 9 für Windows 32 bit installiert, aber es funktioniert nix Java Basics - Anfänger-Themen 6
D Zwei Strings sind gleich bei if aber nicht true Java Basics - Anfänger-Themen 2
U Null Exception aber keine Ahnung warum Java Basics - Anfänger-Themen 5
J Strings sind gleich werden aber ungleich ausgewertet Java Basics - Anfänger-Themen 2
A Kfz - Händler Klasse. JUnit-Test gibt noch Fehler an, aber finde Ursache nicht Java Basics - Anfänger-Themen 7
J JavaEditor kompiliert aber startet nicht Java Basics - Anfänger-Themen 1
B Email versand - aber akzeptiert auch falscher Username und Passwort??? Java Basics - Anfänger-Themen 1
O Array benutzen aber WIE? Java Basics - Anfänger-Themen 18
E Mastermind programmieren, wie den falschen Platz aber richtige Farbe schecken? Java Basics - Anfänger-Themen 23
A Variabler Rekursionsaufruf, aber wie? Java Basics - Anfänger-Themen 6
N Ausführung gibt keinen Fehler an, Return wird aber nicht ausgegeben Java Basics - Anfänger-Themen 22
M Methoden Zwei Methoden in einem Program laufen lassen...aber wie? Java Basics - Anfänger-Themen 2
K Armstrong Programm geht nur bis 1000, aber nicht weiter Java Basics - Anfänger-Themen 2
pkm Best Practice BufferedImage in JPane darstellen - aber wie? Java Basics - Anfänger-Themen 22
it_is_all Bild-Pfad wird gefunden, nicht aber Textdatei-Pfad Java Basics - Anfänger-Themen 8
B Fakultätsfunktion Rekursiv Berechnen aber mit Array Java Basics - Anfänger-Themen 10
D int x in System.out.println(), aber wie? Java Basics - Anfänger-Themen 1
J Serialisieren, aber wie? Java Basics - Anfänger-Themen 3
A Warum funktioniert switch aber nicht if/else? Java Basics - Anfänger-Themen 23
T Datum wird auf der Konsole richtig ausgegeben, aber im Textarea kommt ERROR Java Basics - Anfänger-Themen 8
snipesss Java-Code gedownloaded, funktioniert aber nicht? Java Basics - Anfänger-Themen 9
H NullPointerException, aber wieso? Java Basics - Anfänger-Themen 5
P Irgendein billiger Fehler aber ich find ihn nicht Java Basics - Anfänger-Themen 16
Thallius Date für DatePicker formatieren aber wie? Java Basics - Anfänger-Themen 9
J Nullpointer aber wo? Java Basics - Anfänger-Themen 12
E Dumme Frage, aber... Java Basics - Anfänger-Themen 15
S Erste Schritte Generische Klassen sind toll ....aber warum sollte ich das je benutzen? Java Basics - Anfänger-Themen 3
Z Erste Schritte Versuche ein Labyrinth in einem Terminal zu erstellen, aber kann die properties Datei nicht einlesen Java Basics - Anfänger-Themen 3
Tacofan Schleife aber nur wie? Java Basics - Anfänger-Themen 10
V char Eingabe aber nur für Buchstaben Java Basics - Anfänger-Themen 4
J Eine Art verkettete Liste aber mit teils mehr als einem Nachfolger Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben