algorithm - 在大文件中查找重复的字符串

标签 algorithm string

一个文件包含大量(例如100亿)个字符串,您需要查找重复的字符串。您有 N 个系统可用。你将如何找到重复项

最佳答案

erickson 的回答可能是出题者所期望的。

您可以将 N 台机器中的每台机器都用作哈希表中的一个桶:

  • 对于每个字符串,(假设序列中的字符串编号 i)计算其哈希函数 h。
  • 将i和h的值发送到n号机器进行存储,其中n = h % N。
  • 从每台机器上,检索一个包含多个索引的所有哈希值 h 的列表,以及索引列表。
  • 检查具有相等散列值的字符串集,看它们是否真的相等。

但老实说,对于 100 亿个字符串,您可以在一台 PC 上完成此操作。哈希表可能占用 80-120 GB 和 32 位哈希,具体取决于具体的哈希表实现。如果您正在寻找一种高效的解决方案,则必须更加具体地说明“机器”的含义,因为这取决于每个机器的存储量以及网络通信的相对成本。

关于algorithm - 在大文件中查找重复的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3897295/

相关文章:

mysql - 按到达某个点的旅行时间标记数据

python - 为什么我的用于检查回文的 python 算法不起作用?

javascript - 为什么当我输入 'names' 时,变量名称为 'name' 的数组会变成字符串?

javascript - 如何在字符串替换中包含空格?

c# - 如何在给定场景中分配权重百分比

java - 着色对象

algorithm - 是否有用于绘制力导向图的简单(-ish)算法?

c++ - 将 streambuf 的内容复制到字符串

string - 为什么我来自BufReader::lines的行不匹配?

c++ - 使用迭代器从 std::string 获取子字符串