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 🙂
 
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?
 
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?
 
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
 
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?
 
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?
 
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...
 
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.
 
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. 😉
 

Zurück
Oben