有什么有效的方法可以对一组大于一百万的字符串进行重复数据删除?

迈塞尔

对于我的项目,我需要非常有效地对大量字符串进行重复数据删除。即,给定一个可能包含重复项的字符串列表,我想生成该列表中所有字符串的列表,但不包含任何重复项。

这是简化的伪代码:

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

但是,这还不够快,无法满足我的需求(我已经对其进行了基准测试)。这里有一些想法可以使其更快:

  • 使用其他C ++集实现(例如,abseil的)
  • 同时插入到集合中(但是,根据C ++实现中的注释,这很困难。此外,并行化会带来性能开销)
  • 由于字符串集在运行期间变化很小,因此可能会缓存哈希函数是否不产生冲突。如果它不产生任何值(同时考虑到更改),则可以在查找过程中通过哈希比较字符串,而不是实际的字符串相等性(strcmp)。
  • 跨运行将重复数据删除的字符串存储在文件中(但是,尽管这看起来很简单,但是这里有很多复杂性)

我发现,所有这些解决方案都过于棘手,或者无法提供如此大的加速效果。对快速重复数据删除有什么想法吗?理想情况下,不需要并行化或文件缓存的东西。

大脑

您可以尝试各种算法和数据结构来解决您的问题:

  1. 尝试使用前缀树(trie),后缀机器,哈希表。哈希表是查找重复项的最快方法之一。尝试不同的哈希表。
  2. 使用各种数据属性来减少不必要的计算。例如,您只能处理长度相同的字符串子集。
  3. 尝试实现“分而治之”的方法来并行化计算。例如,将字符串集除以等于硬件线程的子集数量。然后将这些子集合并为一个。由于子集的大小会在此过程中减小(如果重复项的数量足够大),因此合并这些子集应该不会太昂贵。

不幸的是,没有解决该问题的通用方法。在很大程度上,决定取决于正在处理的数据的性质。在我看来,清单上的第二项是最有前途的。始终尝试减少计算量以使用较小的数据集。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类常见问题

给定一百万个数字的字符串,返回所有重复的3位数字

来自分类常见问题

检查字符串中的一组字母是否为变量的有效方法?

来自分类Dev

拆分字符串并确保结果数组中没有重复项的最有效方法是什么?

来自分类Dev

MySQL可以自动透明地对字符串进行重复数据删除吗?

来自分类Dev

在字符串的开头添加/删除字符的最有效方法?

来自分类Dev

从字符串中提取字符串的最有效方法是什么?

来自分类Dev

在一组4个数字中查找重复项的有效方法

来自分类Dev

在字符串中搜索一组定界符中的第一个的有效方法是什么?

来自分类Dev

删除字符串中大于10的重复数字

来自分类Dev

从字符串中删除多个子字符串的最有效方法?

来自分类Dev

在RethinkDB中是否有一种有效的方法可以对联接的结果进行排序?

来自分类Dev

具有有效查找丢失功能的一组键的数据结构

来自分类Dev

创建初始重复数据的嵌套字符串数组的最有效方法是什么?

来自分类Dev

在字符串中获取最后一个换行符的最有效方法是什么

来自分类Dev

创建初始重复数据的二维字符串数组的最有效方法是什么?

来自分类Dev

什么是更新字符串的有效方法?

来自分类Dev

有什么方法可以对字符串用户定义的文字进行编译时检查?

来自分类Dev

如何在只删除连续重复项的字符串中进行重复数据删除

来自分类Dev

输出一组字符串的所有值

来自分类Dev

创建初始重复数据的嵌套字符串数组的最有效方法是什么?

来自分类Dev

创建初始重复数据的二维字符串数组的最有效方法是什么?

来自分类Dev

在Erlang中,是否有一种方法可以对一组枚举的原子进行模式匹配?

来自分类Dev

有没有更好的方法可以对字符串进行多次替换?

来自分类Dev

在一组4个数字中查找重复项的有效方法

来自分类Dev

在字符串中搜索一组定界符中的第一个的有效方法是什么?

来自分类Dev

删除字符串中大于10的重复数字

来自分类Dev

有什么有效的方法可以对data.frame中的索引列表进行并行过滤吗?

来自分类Dev

将有效的 JSON 字符串转换为 Java 中的 JSON 对象,以便我可以对其进行索引

来自分类Dev

检查这些条件是否适用并执行一组任务的有效方法是什么?

Related 相关文章

  1. 1

    给定一百万个数字的字符串,返回所有重复的3位数字

  2. 2

    检查字符串中的一组字母是否为变量的有效方法?

  3. 3

    拆分字符串并确保结果数组中没有重复项的最有效方法是什么?

  4. 4

    MySQL可以自动透明地对字符串进行重复数据删除吗?

  5. 5

    在字符串的开头添加/删除字符的最有效方法?

  6. 6

    从字符串中提取字符串的最有效方法是什么?

  7. 7

    在一组4个数字中查找重复项的有效方法

  8. 8

    在字符串中搜索一组定界符中的第一个的有效方法是什么?

  9. 9

    删除字符串中大于10的重复数字

  10. 10

    从字符串中删除多个子字符串的最有效方法?

  11. 11

    在RethinkDB中是否有一种有效的方法可以对联接的结果进行排序?

  12. 12

    具有有效查找丢失功能的一组键的数据结构

  13. 13

    创建初始重复数据的嵌套字符串数组的最有效方法是什么?

  14. 14

    在字符串中获取最后一个换行符的最有效方法是什么

  15. 15

    创建初始重复数据的二维字符串数组的最有效方法是什么?

  16. 16

    什么是更新字符串的有效方法?

  17. 17

    有什么方法可以对字符串用户定义的文字进行编译时检查?

  18. 18

    如何在只删除连续重复项的字符串中进行重复数据删除

  19. 19

    输出一组字符串的所有值

  20. 20

    创建初始重复数据的嵌套字符串数组的最有效方法是什么?

  21. 21

    创建初始重复数据的二维字符串数组的最有效方法是什么?

  22. 22

    在Erlang中,是否有一种方法可以对一组枚举的原子进行模式匹配?

  23. 23

    有没有更好的方法可以对字符串进行多次替换?

  24. 24

    在一组4个数字中查找重复项的有效方法

  25. 25

    在字符串中搜索一组定界符中的第一个的有效方法是什么?

  26. 26

    删除字符串中大于10的重复数字

  27. 27

    有什么有效的方法可以对data.frame中的索引列表进行并行过滤吗?

  28. 28

    将有效的 JSON 字符串转换为 Java 中的 JSON 对象,以便我可以对其进行索引

  29. 29

    检查这些条件是否适用并执行一组任务的有效方法是什么?

热门标签

归档