Programmierproblem

DJ Doena

Admiral
Teammitglied
ich habe das Problem, dass ich Geld umschichten will und zwar in so wenig Transaktionen wie möglich.

Jetzt könnte man natürlich das Geld von oben nach unten umverteilen. (der mit den meisten Schulden gibt dem mit den meisten Gewinn solange bis einer von beiden 0 Stand erreicht hat.

Szenario: Wir haben 5 Spieler. 3 haben gewonnen und 2 verloren.

Spieler I steht mit 10 Credits in der Kreide. Spieler II steht mit 2 Credits in der Kreide. Spieler III hat 9 Credits gewonnen. Spieler IV hat 2 Credits gewonnen. Spieler V hat 1 Credit gewonnen.

Spieler I gibt Spieler III 9 Credits und Spieler IV einen Credit. Spieler II gibt Spieler IV einen Credit und Spieler V einen Credit.

Idealerweise würde man natürlich von I nach III 9 Credits und von I nach V 1 Credit geben und II gibt IV seine 2 Credits.

Szenario 2:

Wir haben 5 Spieler. 2 haben gewonnen und 3 verloren.

Spieler I steht mit 8 Credits in der Kreide. Spieler II steht mit 2 Credits in der Kreide. Spieler III steht mit 1 Credit in der Kreide. Spieler IV hat 9 Credits gewonnen. Spieler V hat 2 Credit gewonnen.

Wieder von oben nach unten würde I an IV 8 geben, dann II an IV einen und an V noch einen und III an V einen.

Idealerweise natürlich I an IV 8, II an V 2 und III and IV 1.

Gibt es da Algorithmen, die sowas darstellen?
 
A hat 5 Schulden
B hat 3 Schulden
C hat 1 Außenstand
D hat 2 Außenstände
E hat 5 Außenstände

Zuerst sortierst du nach der Höhe der Schulden bzw. Außenstände. Der Einfachheit halber hab ich das hier schon gemacht.

A gibt B seine 5 Schulden und ist somit im Reinen.
Jetzt hat B 8 Schulden
B gibt C seine 8 Schulden und ist auch im Reinen.
C hat 1 Außenstand und gibt deshalb den Rest (7) an D.
Da D selbst 2 zu bekommen hat behält er diese und gibt den Rest (5) an E.

Alle sind zufrieden. Macht insgesamt 4 Transaktionen.
 
Stefan schrieb:
A hat 5 Schulden
B hat 3 Schulden
C hat 1 Außenstand
D hat 2 Außenstände
E hat 5 Außenstände

Zuerst sortierst du nach der Höhe der Schulden bzw. Außenstände. Der Einfachheit halber hab ich das hier schon gemacht.

A gibt B seine 5 Schulden und ist somit im Reinen.
Jetzt hat B 8 Schulden
B gibt C seine 8 Schulden und ist auch im Reinen.
C hat 1 Außenstand und gibt deshalb den Rest (7) an D.
Da D selbst 2 zu bekommen hat behält er diese und gibt den Rest (5) an E.

Alle sind zufrieden. Macht insgesamt 4 Transaktionen.

wobei nur 3 notwendig wären

A->E 5
B->C 1
B->D 2
 
Ja vorher kannst du die Liste optimieren.

1. Alle raus deren Konto auf 0 steht.
2. Alle die einen Betrag X zu bekommen haben und die den gleichen Betrag abzugeben haben zahlen sich gegenseitig aus.
3.-n. denk dir was aus ;)
n+1. meine oben beschriebene Methode
 
Zurück
Oben