用于搜索文件的最佳磁盘数据结构?

时间:2011-02-22 21:55:15

标签: java data-structures b-tree binary-search-tree

我花了几个小时阅读与该问题相关的帖子,试图提出解决方案,但我并没有真正成功地提出解决方案。

所以这里有:我曾经在一次采访中被问过,我将使用哪种数据结构来搜索文件中是否存在某个特定单词。该文件也足够大,无法容纳内存,面试官真的在寻找磁盘解决方案。

B-Tree是磁盘数据结构吗?

二进制搜索树是内存数据结构不是吗?

3 个答案:

答案 0 :(得分:4)

这里有两个不同的可能问题:

  1. 鉴于一个庞大的文件和一个字,你如何检查文件中是否存在这个词?

  2. 鉴于一个庞大的文件,你如何建立一个索引,以便你可以有效地检查文件中是否存在任意单词?

  3. 第一个问题是通过Boyer-Moore有效解决的,并通过文件进行线性搜索。如果您只搜索一次,那么构建索引就完全是浪费时间。

    关于第二个问题,听起来像面试官真的在推动B-Trees。

答案 1 :(得分:2)

两者都只是数据结构,可以是磁盘上还是内存中。这取决于您选择如何使用它们。

顺便说一句,B-Trees的动机是需要有磁盘结构。二元搜索树只是B树的特例,在某种程度上。

答案 2 :(得分:2)

您希望使用将一个节点映射到一页磁盘空间的数据结构。这将最大限度地减少磁盘活动。

因为B-Tree经常用于此目的。请参阅http://en.wikipedia.org/wiki/B-tree,特别是“搜索已排序文件的时间”部分。