平衡多个参与者之间的集体费用

时间:2012-06-05 17:43:03

标签: algorithm

假设有三个人为旅行费用做出了贡献:Adam支付了150美元的酒店费用,Bob支付了60美元的费用,而Charlie提供的食品费用为120美元。旅行结束后,他们想要平衡费用。

简单的解决方案是每个费用在三个人之间分配,并由其他参与者单独支付给购买商品的人。

当然,如果亚当欠鲍勃20美元,鲍勃欠亚当50美元,这相当于鲍勃欠亚当30美元。继续这个逻辑,鲍勃欠亚当30美元和查理20美元,查理欠亚当10美元。

以下是捕获:此解决方案不是最佳。交易数量可以减少。从鲍勃到查理然后从查理到亚当首先支付10美元。相反,鲍勃可以将10美元加到他已经向亚当支付的金额上。

最后,鲍勃向查理支付10美元,向亚当支付40美元。现在每个人都已支付相同数额的110美元。


我的问题是:

  • 当目标是找到费用与绝对最小交易量平衡的方式时, n 演员的这个问题的一般解决方案是什么?由于欠款最多,遍历路径可能会变得非常昂贵,因此它并非无足轻重。

  • NP完全问题可以解决这个问题吗?

  • 这个问题是否有一个众所周知的名称?

2 个答案:

答案 0 :(得分:1)

c人支付的费用超过了他们的份额(债权人),而d人的支付额低于他们的份额(债务人)。根据您的定义,如果解决方案意味着最小数量的交易,则解决方案是最优的,理想情况是每个债务人只需要进行一次转移(他们显然必须至少生成一次)。那么问题是,欠债权人1的欠款X1可以通过欠款的确切金额获得吗? X2可以通过剩余金额的确切总和获得吗?等等Xc。在这个意义上,问题与子集和问题有关,如n.m所述(有点简洁)。

答案 1 :(得分:0)

是的,它是subset sum problem