查找等于单个数字的数字子集

时间:2009-08-25 17:52:27

标签: set subset-sum

我发布这篇文章的原因是我希望调和客户应收账款账户,其中“付款”过帐到账户而不是与未结发票匹配并清算。所以这是我的问题:

有一个数字(付款)应该等于一组给定数字(发票金额)的子集。简单的例子:

付款$ 10,002

发票值:

5001 2932 876 98 21 9923 2069 123 432 765

我想要一种从这个集合中拉出5001,2932和2069的方法。

作为非程序员,Excel电子表格应用程序对我来说最容易创建。想法?

2 个答案:

答案 0 :(得分:2)

您正在谈论名为Subset-sum的NP-Complete问题。

基本上,这意味着一般来说计算与总计相加的价格子集在计算上非常困难。但是,检查你的答案非常容易,因为你只是总结了你的答案。

我的猜测是,如果你想检查N个价格,你将不得不在Excel中使用大约2 ^ N个单元来计算它。上面链接的wikiepdia文章提供了一些启发式来近似这个。

底线是,如果你需要大规模地这样做(N,比如说,数百),你应该重新考虑为什么需要这样做。

如果您能找到一种非常有效的方法,可能会涉及prize

答案 1 :(得分:0)

我在一个非常相似的Java应用程序上工作,该应用程序将收据映射到应收帐款交易。出于多种原因,我们没有尝试以编程方式将汇总收据链接到单个交易,反之亦然。但是,我们确实允许用户手动执行该映射。我们只是将收据数据映射到匹配的交易数据,如果有多个收据和具有相同金额的交易,我们仅在存在相同数量的重复数量时进行匹配。