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

时间:2010-10-09 18:19:49

标签: algorithm string

文件包含大量(例如10亿)字符串,您需要找到重复的字符串。您有N个系统可用。你怎么会发现重复

2 个答案:

答案 0 :(得分:8)

erickson的回答可能是那个提出这个问题的人所期待的答案。

您可以将N台计算机中的每台计算机用作哈希表中的存储区:

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

老实说,对于100亿个字符串,你可以在1台PC上合理地做到这一点。散列表可能占用80-120 GB的32位散列,具体取决于精确的散列表实现。如果您正在寻找一种有效的解决方案,那么您必须更具体地了解“机器”的含义,因为它取决于每个存储的存储空间以及网络通信的相对成本。

答案 1 :(得分:5)

将文件拆分为N个。在每台机器上,尽可能多地将内容加载到内存中,并对字符串进行排序。将这些块写入该计算机上的大容量存储。在每台计算机上,将块合并为单个流,然后将来自每台计算机的流合并到包含按排序顺序排列的所有字符串的流中。将每个字符串与前一个字符串进如果它们是相同的,那就是重复。