【问题标题】:Checking a massive list of strings for uniqueness检查大量字符串的唯一性
【发布时间】:2022-01-11 22:48:15
【问题描述】:

我有大量的字符串列表。每个字符串都比较短,可能大约 64 个字符,但整个列表占用大约 8GB 的​​磁盘空间。我需要以编程方式测试此列表是否包含任何重复的字符串,并且理想情况下,输出所有重复项;我需要尽快完成这项工作。

将所有字符串加载到 hashtable/HashSet/Dictionary 的通常解决方案显然行不通,因为我不能浪费 8GB 的​​ RAM(而且它无论如何也行不通,因为可能没有连续的块长足够的)。我可以使用一些更智能的算法吗?我希望这个列表在大多数情况下只包含唯一的字符串,所以也许我可以使用布隆过滤器作为第一遍;但万一发生碰撞,我仍然需要找到实际的重复项。

【问题讨论】:

  • 你有多少内存?将哈希存储到存储桶中,以便您负担得起一个存储桶的大小。
  • 您可以执行两次传递:一次生成 Bloom 过滤器,另一次处理冲突。
  • @stark 你应该从你的评论中做出回答。听起来是一个非常好的候选解决方案。
  • @stark:是的,但这基本上是我已经在使用的过程。正如我在帖子的最后一句中所说,如果 Bloom 过滤器报告冲突,我别无选择,只能执行第二遍。

标签: list algorithm performance unique


【解决方案1】:

如果字符串有点相似,ternary search tree 可能会限制所需的内存并在插入时轻松检测重复

【讨论】:

  • 这是个好主意,但不幸的是我不能保证字符串会相似。但是,我可能能够检测到边缘情况(基于其他元数据),所以对于这些情况,我可以使用三元搜索树。
猜你喜欢
  • 2015-09-09
  • 1970-01-01
  • 2017-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-19
  • 1970-01-01
  • 2018-07-09
相关资源
最近更新 更多