我需要调和银行交易。匹配是指一组交易的总和为零。如果匹配较小,则匹配等级较高。 这是子集和问题的变体(NP完整)。 然而: 没有那么多交易(通常高达10K) 总和限制在10M左右,因此在这些条件下有一个实用的解决方案。 最大组大小可以限制为10笔交易。
感谢任何帮助过的人。
答案 0 :(得分:1)
你可以使用sudomakeinstall2提到的动态编程。您将需要为每个总和存储用于获取它的总和(因此您可以回溯到事务,构建实际组,而不仅仅是回答true / false)。
如果一个总和有太多的路径(得到这个总和的可能性太多),那么它没有意义(太多可能的协调),你可能会忽略长路径。
计算总和时,对具有类似参考/日期/详细信息的交易使用过滤器。
您可能想要进行一些迭代。首先尝试只查找小组。这应该很快,然后您可以删除此组中的所有事务,然后再去更大的组。
希望这有帮助。