【问题标题】:Search a 16 GB file on disk with 8 GB RAM在具有 8 GB RAM 的磁盘上搜索 16 GB 文件
【发布时间】:2015-11-09 08:44:22
【问题描述】:

最近有人问我以下面试问题, “你有 8 GB RAM 和 16 GB 文件”你如何对这个文件进行搜索?

然后我问什么类型的文件,什么语言? 他说任何格式,任何语言只会增加我的困惑!

过了一会儿,他让我假设它是一个文本文件!

根据我与面试官分享的知识回答: 编辑:使用具有自定义大小的缓冲流并对缓冲区上的数据进行排序以对缓冲流应用二进制搜索(如果相关)!

我相信面试官没有被说服!!

我知道这个问题很模糊!

我想知道我错过了问面试官的具体点是什么,可能的解决方案是什么? 对此的任何指导或建议表示赞赏!

谢谢!

【问题讨论】:

    标签: algorithm search operating-system ram disk


    【解决方案1】:

    我很好的解决方案是先在文件的前半部分进行线性搜索;如果搜索失败,则对文件的后半部分执行相同的操作。

    您的解决方案是错误的,因为您没有考虑内存限制:如果您无法将所有内容完全加载到内存中,您如何缓冲和排序(您可以这样做,但您必须解释如何) ?这同样适用于二分搜索:你不能使用标准算法,你必须自定义它。

    此外,如果您在文本文件中搜索子字符串,则您的解决方案是不合适的(您是如何排序的?)

    【讨论】:

    • 使用具有自定义大小的缓冲流的目的是缓冲磁盘中的数据,然后在该右侧执行搜索,这样我们就可以考虑内存限制和不撞到磁盘的性能?跨度>
    • 不使用磁盘就无法将 16Gb 文件缓冲到 8Gb 内存中,这就是问题所在!
    • 这很奇怪!当我提到流时,他说只有一半的数据可以被缓冲,这会导致性能不佳,并期待另一个答案!无论如何感谢您的投入!
    • 是的,您可以缓冲一半的数据,而不是全部。但这意味着,如果您想对数据进行排序(假设它有意义),您必须多次访问该文件(多少次取决于您使用的特定排序算法)。这当然比一次按顺序扫描文件更昂贵。
    • 这正是我的意思,当我谈到缓冲区时,我们为此提供自定义大小,使用它并清除缓冲区!我有 api,您可以在其中对字节进行二进制搜索(如果有的话)!
    猜你喜欢
    • 2022-10-25
    • 2015-03-28
    • 2020-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-21
    • 2013-11-27
    • 2018-09-29
    相关资源
    最近更新 更多