我正在开发一款应用程序,需要基于各种标准(包括来自每个集合的任意数量的项目的总和)匹配两组数据。 我把问题简化为以下语句:
给定一组项目和交易,找到最小的项目集,使其总和等于最小交易集的总和。 (本帖子忽略了一些复杂性,但现在我只关心总金额匹配,而不是日期、描述、结算差异等)
或者,数学上:给定两个数字集合,找到每个数字集合中的最小集合,使它们的总和相等。
我看过的其他类似的SO问题假设您事先知道总和,或者知道来自每个集合的要求数量。
以下是一个测试(我认为)可以说明我的意图。
给定一组项目和交易,找到最小的项目集,使其总和等于最小交易集的总和。 (本帖子忽略了一些复杂性,但现在我只关心总金额匹配,而不是日期、描述、结算差异等)
或者,数学上:给定两个数字集合,找到每个数字集合中的最小集合,使它们的总和相等。
我看过的其他类似的SO问题假设您事先知道总和,或者知道来自每个集合的要求数量。
以下是一个测试(我认为)可以说明我的意图。
[TestMethod]
public void StackOverflowTest()
{
var seta = new[]{10, 20, 30, 40, 50};
var setb = new[]{ 45, 45, 100, 200 };
var result = Magic(seta, setb);
Assert.AreEqual(new[]{40,50},result.SetA);
Assert.AreEqual(new[] { 45, 45 }, result.SetB);
}
class MagicResult
{
public int[] SetA { get; set; }
public int[] SetB { get; set; }
}
private MagicResult Magic(int[] seta, int[] setb)
{
throw new NotImplementedException();
}
我正在寻找一个优雅的解决方案,使其通过,但是任何伪代码或建议都可以让我达到目标 ;)