【发布时间】:2013-03-03 03:27:45
【问题描述】:
这个问题有最优解吗?
描述一种在包含一百万个电话号码的文件中查找重复项的算法。该算法在运行时只有 2 MB 可用内存,这意味着您不能一次将所有电话号码加载到内存中。
我的“幼稚”解决方案将是一个 O(n^2) 解决方案,它迭代值并仅以块的形式加载文件,而不是一次全部加载。
对于 i = 0 到 999,999
string currentVal = get the item at index i for j = i+1 to 999,999 if (j - i mod fileChunkSize == 0) load file chunk into array if data[j] == currentVal add currentVal to duplicateList and exit for
必须有另一种情况,您可以以一种真正独特的方式加载整个数据集并验证一个数字是否重复。有人有吗?
【问题讨论】:
-
您想对重复项做什么?你只是想知道是否有重复吗?是否要删除重复项?你想知道重复的数量是否超过了某个阈值?
-
副本将被删除,无论是一旦被发现或结束。
-
2 MB 对于包含一百万个元素的Bloom filter 来说足够了。
-
这不会涉及很多误报吗?
-
每个电话号码是多少位?每次将特定范围加载到内存中时,您可能可以使用位向量并多次遍历文件。这会给你一个 O(n) 的解决方案。
标签: algorithm duplicates