仅弄清楚接收者和给予者是不够的。虽然我认为这种策略是正确的,但它也无法确保找到最低付款额的算法。
例如,
- 人欠25
- 人欠50
- 人欠75
- 欠人D 100
- 欠人50
很明显,这可以用3次付款完成(A和C到D,B到E)。我想不出一个能满足所有问题集的高效算法。
更好的例子
- 人欠10
- 人欠49
- 人欠50
- 人欠65
- 欠人E 75
- 欠F人99
如果我们采用让D付给F的贪婪方法,我们将得到次优解而不是最优解(A&D到E,B&C到F)。
这个问题与Bin
Packing问题有很多相似之处,而Bin
Packing问题已被证明是NP难的。唯一的区别是我们有多个大小不同的纸箱,而且条件是所有纸箱中的总空间等于所有物品的总大小。这使我相信该问题可能是NP难题,但加上更多的限制,有可能在多项式时间内解决。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)