在以下场景中是否存在比较数据的模式或最佳实践:
每个字母代表一大块数据,在我的例子中是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范围内,因此它需要尽可能快速有效。
答案 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 + d
与a + b
合并到c + d
),您可以轻松地重写它,但不能将平均进行更多合并。
这应该非常快。查看main函数中的注释以了解它的作用。
a + b + c + d