2

我在提出算法时遇到了问题。各位大佬,帮帮我好吗?

我有一个很大的文件,因此无法立即加载。存在重复数据(通用数据,可能是字符串)。我需要删除重复项。

4

4 回答 4

2

一个简单但缓慢的解决方案是在 HashSet 中读取 1st Gigabite。读取文件的顺序其余部分并删除文件中的重复字符串。比读取内存(hashset)中的第二个千兆位并一次又一次地删除文件中的重复......它很容易编程,如果你只想做一次就足够了。

于 2011-05-22T16:46:09.517 回答
1

您可以计算每条记录的哈希值并将其保存在 Map>

读入构建地图的文件,如果您发现地图中存在 HashKey,则您寻求定位以进行仔细检查(如果不相等,则将该位置添加到映射集中)

于 2011-05-22T17:36:48.690 回答
0

第二种解决方案:

  1. 创建新文件,在其中写入对 <String, Position in original file>
  2. 比您将根据字符串对大文件使用经典排序(对大文件进行排序=对内存中文件的小部分进行排序,然后将它们合并在一起)-在此期间,您将删除重复项
  3. 而不是重建原始顺序=您将再次对其进行排序,但根据“原始文件中的位置”
于 2011-05-22T17:32:38.483 回答
0

取决于输入在文件中的放置方式;是否每一行都可以用行数据表示;

另一种方法是使用数据库服务器,将数据插入具有唯一值列的数据库表中,从文件中读取并插入数据库。最后,数据库将包含所有唯一的行/行。

于 2011-05-22T19:19:31.657 回答