可比较的数据设计模式合并

时间:2013-11-15 11:54:16

标签: c# algorithm design-patterns

在以下场景中是否存在比较数据的模式或最佳实践:

每个字母代表一大块数据,在我的例子中是XML。

a+b+c+d

这些合并为一个并返回。如果我事先已经合并了一个+ b + c,那么识别这个“包”然后添加d将非常简单。但是,如果我已经缓存了

a+c+d

然后发出了对+ b + c + d的请求,那么通过所有这些可能的组合以确定将a添加到a + c + d包中的最佳方法是否会得到所需的结果?< / p>

合并数据的顺序并不重要。虽然它可能对答案没有任何影响,但代码是用C#4.0编写的。

编辑还有一个例子:

可能的元素:a,b,c,d,e,f

假设我收到了一个请求:a + c + d + e表示数组0=a,1=c,2=d,3=e

在我的“缓存”中,我有以下内容:c + d + e已合并

然后根据要求,我必须找到一种方法来做:

if(cache.Contains(request.elements[0]+request.elements[1] etc...))
else(cache.Contains(request.elements[1] + request.elements[2] etc...))

它可能需要某种递归for循环,但由于我的情况下可能的元素最终在2-5000范围内,因此它需要尽可能快速有效。

1 个答案:

答案 0 :(得分:1)

根据这个:

&#34;然后发出了+ b + c + d的请求,这是运行所有这些可能组合以确定将b添加到a + c + d包的最佳方法会得到理想的结果吗?&#34;

我假设订单无关紧要,因此可以合并&#34; b&#34;用&#34; acd&#34;如果你想要&#34; abcd&#34;。唯一重要的是包含哪些元素。

现在,我不知道你使用什么XML或者你如何合并它,所以我用合并字符串编写了这个,并通过简单地连接它们来合并。您将不得不重写Merge方法来执行您想要做的任何事情(并将string更改为您正在使用的任何地方)。我也使用整数而不是a,b,c因为我假设你会比字母表中的字母更多。

此外,例如,当您正在寻找a + b + c + d + e + f + g时,缓存中的最佳匹配为c + e + g + f,那么它也会在缓存中查找余数的最佳匹配,{{ 1}}等等,以进一步减少合并次数。如果您不想要这个(如果使用您的xml,则无法将a + b + da + b合并到c + d),您可以轻松地重写它,但不能将平均进行更多合并。

这应该非常快。查看main函数中的注释以了解它的作用。

a + b + c + d