Скажите, у нас есть N
количество счетов с положительными остатками B_1, ..., B_n
.Алгоритм балансировки для выравнивания различий?
Мы можем сделать перевод T(from,to,amount)
, который перемещает определенную сумму баланса между счетами.
У нас есть знания об оптимальном распределении остатков O_1, ..., O_n
.
Вопрос: Как мы можем найти минимальный набор передач, которые достигают оптимального распределения? Можем ли мы всегда уйти с N-1
переводами в лучшем случае?
Пример:
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
Да. Потому что вы никогда не будете вынуждены делать более «N-1» переводы для учетных записей «N». Зачем? Нужно быть несбалансированным, чтобы требовать балансировки. Вы можете графически отображать линейные требования с помощью [Линейное программирование] (http://en.wikipedia.org/wiki/Linear_programming). –
Сделайте свой выбор обманов: http://stackoverflow.com/questions/1163116/algorithm-to-determine-minimum-payments-amongst-a-group или http://stackoverflow.com/questions/4554655/who-owes -who-money-optim или http://stackoverflow.com/questions/15723165/algorithm-to-simplify-a-weighted-directed-graph-of-debts –