对于我的项目,我需要非常有效地对大量字符串进行重复数据删除。即,给定一个可能包含重复项的字符串列表,我想生成该列表中所有字符串的列表,但不包含任何重复项。
这是简化的伪代码:
set = # empty set
deduped = []
for string in strings:
if !set.contains(string):
set.add(string)
deduped.add(string)
这是简化的C ++(大致):
std::unordered_set <const char *>set;
for (auto &string : strings) {
// do some non-trivial work here that is difficult to parallelize
auto result = set.try_emplace(string);
}
// afterwards, iterate over set and dump strings into vector
但是,这还不够快,无法满足我的需求(我已经对其进行了基准测试)。这里有一些想法可以使其更快:
strcmp
)。我发现,所有这些解决方案都过于棘手,或者无法提供如此大的加速效果。对快速重复数据删除有什么想法吗?理想情况下,不需要并行化或文件缓存的东西。
您可以尝试各种算法和数据结构来解决您的问题:
不幸的是,没有解决该问题的通用方法。在很大程度上,决定取决于正在处理的数据的性质。在我看来,清单上的第二项是最有前途的。始终尝试减少计算量以使用较小的数据集。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句