algorithm - 在大文件中查找重复项

标签 algorithm data-structures

我的文件非常大,大约有 1500 万个条目。 文件中的每一行都包含一个字符串(称之为键)。

我需要使用 java 查找文件中的重复项。 我尝试使用 HashMap 并检测重复条目。 显然,这种方法给我带来了“java.lang.OutOfMemoryError:Java 堆空间”错误。

我该如何解决这个问题?

我想我可以增加堆空间并尝试一下,但我想知道是否有更高效的解决方案而无需调整堆空间。

最佳答案

关键是你的数据不适合内存。您可以使用 external merge sort为此:

将您的文件分成多个适合内存的小块。对每个 block 进行排序,消除重复项(现在是相邻元素)。

合并 block 并在合并时再次消除重复项。由于您将在此处进行 n-nway 合并,因此您可以将每个 block 的下一个 k 元素保留在内存中,一旦 block 的项目耗尽(它们已经合并)从磁盘中获取更多元素。

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

相关文章:

c# - C# 中 Astar (A*) 图搜索数据的结构

c# - 递归打印树

algorithm - 查找长度为 3 的递增(或递减)子序列数?

PHP,哎呀;为可变深度的分类项目选择正确的设计模式并显示项目链接

java - 非完美迷宫生成

python - 数组中最大的素数序列

algorithm - "constant"在这种情况下是什么意思?

挑战 Node 语法

c++ - 如何将局部变量传递给 lambda 函数?

c++ - 迭代差异