这是面试题,不是作业。
“你有N份文件,其中N份很大。每个文档都有一组单词,例如w1、w2..wm,其中m可能因每个文档而异。现在给你一个k个单词的列表,比如q1,q2…qk。
写一个算法来打印包含K个单词的文档列表。”
现在,我可以使用散列和trie找出解决方案。但发帖的人也写道,面试官希望用B树来解决问题。
我真的不知道如何使用b-树来实现这一点,以及它的效率如何。有人能帮忙吗?

最佳答案

如果我们的数据集存储在随机访问速度慢的媒体上(例如传统硬盘驱动器上),那么B-Tree优先于Trie。面试官说n非常大可能意味着它太大了,不能放在内存中,应该放在磁盘上。
如注释中所述:当数据非常大并且存储在磁盘上时,数据结构的效率更多地取决于磁盘块访问的数量,而不是所有操作的总量。b-tree在一个节点中包含许多记录(可以认为是“数据块”),因此比trie需要更少的块访问。
这正是大多数dbs将索引存储在b树中的原因。他们需要快速搜索位于传统硬盘上的索引。
实际上,可以通过将(word documentId)对放入DB表并在word列或整个对上创建索引来解决问题。

关于algorithm - 使用B树代替Trie,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28547924/

10-12 20:02