Sagen wir, wir haben N
Anzahl der Konten mit positiven Salden B_1, ..., B_n
.Balancing-Algorithmus, um Unterschiede auszugleichen?
Wir können eine Überweisung T(from,to,amount)
machen, die einen bestimmten Betrag des Guthabens zwischen den Konten verschiebt.
Wir haben Kenntnisse über eine optimale Verteilung von Waagen O_1, ..., O_n
.
Die Frage ist: Wie können wir die minimale Anzahl von Übertragungen finden, die die optimale Verteilung erreichen? Können wir immer mit N-1
Übertragungen kommen?
Beispiel:
Balances {0}: 10, {1}: 40, {2}: 50
Optimal {0}: 20, {1}: 60, {2}: 20
T(2,0,10) => {0}: 20, {1}: 40, {2}: 40
T(2,1,20) => {0}: 20, {1}: 60, {2}: 20
Ja. Weil Sie nie gezwungen sein werden, mehr als "N-1" Übertragungen für "N" Konten zu machen. Warum? Man muss unausgewogen sein, um den Auswuchtvorgang zu erfordern. Sie können die linearen Anforderungen mit [Linear Programming] (http://en.wikipedia.org/wiki/Linear_programming) grafisch darstellen. –
Wählen Sie die Dupes aus: http://stackoverflow.com/questions/1163116/algorithm-to-determine-minimum-payments-amongst-a-group oder http://stackoverflow.com/questions/4554655/who-owes -who-money-optimization oder http://stackoverflow.com/questions/15723165/algorithm-to-simplify-a-gewichtete-directed-graph-of-debts –