我在亚马逊的采访中被问到这个问题.
你有一个包含许多行的文件,但其中两行是相同的.找到这两行.我给出了在N ^ 2时间内运行的明显答案.然后我想出了一个使用哈希表的答案,但是他们不喜欢这个答案,因为他们说如果文件是千兆字节就不行.我想出的另一个答案是,不是将哈希结果存储在内存中,而是创建一个与哈希值同名的文件,并在文件中存储具有相同哈希值的行.要么他们无法理解我的解决方案,要么他们不喜欢它.
有什么想法吗?
谢谢
我可以想到解决这个问题的两类基本解决方案:
概率内存解决方案。 您可以尝试通过在主内存中存储文件行的摘要来解决此问题。然后,您可以在主内存中进行计算以识别可能的重复项,然后通过查看磁盘来检查每个可能的重复项。这些解决方案可能是最好的,因为它们内存使用率低、效率高并且最大限度地减少磁盘访问。此类别中的解决方案包括
确定性磁盘解决方案。您可以尝试使用磁盘上的整个数据集进行计算,使用主内存作为临时暂存空间。这可以让您获得准确的答案,而不必将整个文件保存在内存中,但可能会比较慢,除非您要进行一些后续处理并且可以从重组数据中受益。此类别中的解决方案包括
希望这可以帮助!