【发布时间】:2012-01-23 14:51:15
【问题描述】:
有两个整数数组,每个都在非常大的文件中(每个的大小都大于 RAM)。如何在线性时间内找到数组中的共同元素。
我找不到解决这个问题的好方法。有任何想法吗?
【问题讨论】:
-
它们排序了吗?
-
这有很大的不同——如果它们是 16 位整数,那将是一个非常简单的解决方案。
-
@Groo: 2^16 小到足以使计数排序可行。
-
@Fanael:没错,我想到了一个位数组来仅存储存在标志,但现在我已经完成了计算,它仍然很大(4096Mb/8=512Mb)。如果需要 O(n),现在我能想到的只是一个基于磁盘的哈希表。
-
是的。我也在考虑将位数组作为标志,我认为 512 MB 不是很多。这是一个不错的解决方案,而且速度很快。让我们看看其他人怎么说。