代码之家  ›  专栏  ›  技术社区  ›  John

求一个等于一个数的数的子集

  •  2
  • John  · 技术社区  · 17 年前

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

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

    付款$10002

    发票价值:

    五千零一 二千九百三十二 八百七十六 九十八 二十一 九千九百二十三 二千零六十九 一百二十三 四百三十二 七百六十五

    我想要一种方法从这一组中取出50012932和2069。

    作为一个非程序员,excel电子表格应用程序对我来说是最容易创建的。思想?

    2 回复  |  直到 15 年前
        1
  •  2
  •   Jeremy Powell    17 年前

    你说的是一个np完全问题 Subset-sum .

    基本上,这意味着在一般情况下,很难计算价格的子集和您的总金额。然而,检查你的答案是很容易的,因为你只是把答案加在一起。

    我的猜测是,如果你想检查n个价格,你需要在excel中使用大约2^n个单元格来计算。上面链接的wikiepdia文章给出了一些近似的启发。

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

    如果你能找到一种高效的方法,可能会有 prize 卷入的。

        2
  •  0
  •   Jay    17 年前

    我研究了一个非常类似的Java应用程序,它将收据映射到应收账款交易。出于多种原因,我们没有试图将汇总收入与单个交易或相反的交易联系起来。但是,我们确实允许用户手动进行映射。我们只是将收据数字映射到匹配的交易数字,如果有多个收据和相同金额的交易,我们只在相同数量的重复金额时匹配。