【问题标题】:Optimal on-disk data structure for searching a file?用于搜索文件的最佳磁盘数据结构?
【发布时间】:2011-07-02 08:26:24
【问题描述】:

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

这里是这样:我曾经在一次采访中被问到,如果文件中存在特定的单词,我将使用哪种数据结构来搜索。该文件也被认为大到无法放入内存中,面试官确实在寻找磁盘上的解决方案。

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

二叉搜索树不是内存中的数据结构吗?

【问题讨论】:

  • 我认为您的问题是“B-tree 在磁盘上吗?”。 “二叉树在磁盘上吗?”。看起来你写了一些东西,但实际上意味着其他东西:-) 令人惊讶的是,阅读这个问题的人似乎已经理解了你真正想要的东西!
  • 对不起,如果我让您感到困惑 - 我试图做的是建立一个上下文,然后提出问题。我实际上是在寻找是否有任何我没有听说过的数据结构,以及我的答案(给面试官)是否正确。 :)

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


【解决方案1】:

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

顺便说一句,B 树的动机是需要具有磁盘结构。从某种意义上说,二叉搜索树只是 B 树的一种特殊情况。

【讨论】:

  • @Moron (lol!) - 你如何指定数据结构是在磁盘上还是在内存中使用? (如果这是一个非常幼稚的问题,我很抱歉!)
  • @user:这不像是配置参数!您必须考虑将数据结构存储在磁盘上需要什么。例如,在二叉搜索树(甚至 Btree)中,指向另一个节点的指针可以转换为您在文件中查找的偏移量。
  • 这应该是公认的答案,任何DS都可以在任何地方使用,它是关于效率。
【解决方案2】:

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

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

【讨论】:

  • 那么 B-Tree 是最好的数据结构吗? (只是确认)
【解决方案3】:

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

  1. 给定一个巨大的文件,和一个单词,如何检查文件中是否存在该单词?

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

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

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

【讨论】:

  • 大概就是这样,我也是这么告诉他的:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-16
  • 2011-05-11
  • 2015-10-13
  • 1970-01-01
  • 2011-01-18
  • 2012-09-19
  • 2014-06-10
相关资源
最近更新 更多