我花了几个小时阅读与该问题相关的帖子,试图提出解决方案,但我并没有真正成功地提出解决方案。
所以这里有:我曾经在一次采访中被问过,我将使用哪种数据结构来搜索文件中是否存在某个特定单词。该文件也足够大,无法容纳内存,面试官真的在寻找磁盘解决方案。
B-Tree是磁盘数据结构吗?
二进制搜索树是内存数据结构不是吗?
答案 0 :(得分:4)
这里有两个不同的可能问题:
鉴于一个庞大的文件和一个字,你如何检查文件中是否存在这个词?
鉴于一个庞大的文件,你如何建立一个索引,以便你可以有效地检查文件中是否存在任意单词?
第一个问题是通过Boyer-Moore有效解决的,并通过文件进行线性搜索。如果您只搜索一次,那么构建索引就完全是浪费时间。
关于第二个问题,听起来像面试官真的在推动B-Trees。
答案 1 :(得分:2)
两者都只是数据结构,可以是磁盘上还是内存中。这取决于您选择如何使用它们。
顺便说一句,B-Trees的动机是需要有磁盘结构。二元搜索树只是B树的特例,在某种程度上。答案 2 :(得分:2)
您希望使用将一个节点映射到一页磁盘空间的数据结构。这将最大限度地减少磁盘活动。
因为B-Tree经常用于此目的。请参阅http://en.wikipedia.org/wiki/B-tree,特别是“搜索已排序文件的时间”部分。