首页 > 解决方案 > 平均分配一组总数的最佳方法是什么?

问题描述

我试图将总额平均分配给每个相关人员。

例如我会用钱。

示例 1

人 A 有 20 美元

B 人有 40 美元

人 C 有 60 美元

因此,要使所有事情都成为解决方案,就是 C 人给 A 人 20 美元。

示例 2

人 A 有 36 美元

B 人有 15 美元

人 C 有 9 美元

为了让这种情况更...

A 给 B 16 美元,然后 B 给 C 11 美元,

或者 A 给 B 5 美元和 C 11 美元

示例 3

人 A 有 53 美元

B 人有 95 美元

人 C 有 24 美元

D 人有 98 美元

人 E 有 30 美元

每个人需要 60 美元,我怎样才能找到涉及最少转移资金的方法呢?

标签: javascriptnode.jsalgorithm

解决方案


一个自然的做法是:多的人给少的人;然后重复。

具体来说:你可以计算出每个人最后应该拥有的数量V(这只是每个人起始数量的平均值)。然后,如果拥有最多的人拥有 M,拥有最少的人拥有 L,则从拥有最多的人到拥有最少的人,给出 min(MV,VL)。在那次移动之后,这两个人中至少有一个人的数量是正确的。现在重复,直到每个人都有所需的数量。

移动的数量最多将是人数。

我怀疑这可能是最佳的,但你应该自己检查一下。您可以尝试应用https://cs.stackexchange.com/q/59964/755中的方法,看看是否可以找到反例或证明它是正确的。


推荐阅读