Algorithm 贪婪事务最小化算法的最优性
最近我读到了一篇关于拆分问题的文章,其中一组人之间有债务,目标是用最少的交易数量来解决这些债务。它也可以被建模为一个有向加权图,边将被减少 我经常遇到的解决方案是,首先计算每个人的净结果(他欠的钱-他欠的钱),然后重复以下步骤:Algorithm 贪婪事务最小化算法的最优性,algorithm,optimization,minimize,Algorithm,Optimization,Minimize,最近我读到了一篇关于拆分问题的文章,其中一组人之间有债务,目标是用最少的交易数量来解决这些债务。它也可以被建模为一个有向加权图,边将被减少 我经常遇到的解决方案是,首先计算每个人的净结果(他欠的钱-他欠的钱),然后重复以下步骤: 1. take max. debtor X and max. creditor Y 2. if X owes more than Y is owed then X pays Y Y's value reduce X's debt by Y'
1. take max. debtor X and max. creditor Y
2. if X owes more than Y is owed
then X pays Y Y's value
reduce X's debt by Y's value
set Y's value to 0
else X pays Y X's value
reduce Y's value by X's debt
set X's debt to 0
…直到每个人的值都为0
我的问题:
- 该算法在其产生的交易量方面真的是最优的吗?如果是,如何证明这一点
- 如果不是,该算法的最优性的反例是什么,即债务可以用少于其输出的交易最小化的情况
>> [-3, -2, -2, 3, 4]
>> [0, -2, -2, 3, 1] ([0] pays [4])
>> [0, 0, -2, 1, 1] ([1] pays [3])
>> [0, 0, -1, 1, 0] ([2] pays [4])
>> [0, 0, 0, 0, 0] ([2] pays [3])
但是你可以看到,债务可以通过三种交易来清偿:欠3美元的人支付贷记3美元的人,然后欠2美元的两个人分别支付欠4美元的人
事实上,我相信所描述的算法的目标是最小化交易的总金额,而不是交易的数量,它做到了这一点,并且可以证明这一点(尽管我不会在这里尝试)。谢谢。关于algo最小化的内容:对于我来说,它在事务数量方面不是最优的就足够了。