Algorithm 用B-树代替Trie

Algorithm 用B-树代替Trie,algorithm,data-structures,b-tree,Algorithm,Data Structures,B Tree,这是一个面试问题,不是家庭作业 “您有N个文档,其中N非常大。每个文档都有一组单词,比如w1、w2..wm,其中m可能会因每个文档而异。现在您得到了K个单词的列表,比如q1、q2…qk。 编写一个算法来打印包含K个单词的文档列表。” 现在,我可以使用哈希和trie找出解决方案。但发布问题的人也写道,面试官想要一个使用B-树的解决方案 我真的不知道如何使用B-树来实现这一点,以及它的效率有多高。有人能帮忙吗 如果数据集存储在随机访问速度较慢的介质上,例如在传统硬盘上,则首选B-Tree而不是Tri

这是一个面试问题,不是家庭作业

“您有N个文档,其中N非常大。每个文档都有一组单词,比如w1、w2..wm,其中m可能会因每个文档而异。现在您得到了K个单词的列表,比如q1、q2…qk。 编写一个算法来打印包含K个单词的文档列表。”

现在,我可以使用哈希和trie找出解决方案。但发布问题的人也写道,面试官想要一个使用B-树的解决方案


我真的不知道如何使用B-树来实现这一点,以及它的效率有多高。有人能帮忙吗

如果数据集存储在随机访问速度较慢的介质上,例如在传统硬盘上,则首选B-Tree而不是Trie。采访者提到N非常大,这可能意味着它太大了,不能放在内存中,应该放在磁盘上

如注释中所述:当数据非常庞大且存储在磁盘上时,数据结构的效率更多地取决于磁盘块访问的数量,而不是所有操作的总量。B-Tree在一个节点中包含许多记录(可被视为“数据块”),因此需要的块访问比Trie少得多

这与大多数数据库将索引存储在B树中的原因完全相同。他们需要通过位于传统硬盘上的索引进行快速搜索。
实际上,您的问题可以通过将(word-documentId)对放在DB表中并在word列或整个对上创建索引来解决。

您可以尝试三元trie。它不占用太多空间。你也可以找一辆卡丁车。它使用一个键和两个叶子:。

这需要一个使用B树的算法,您不需要如何编写。它只是字典的一个特殊实现。在这个级别上,“trie或B-Tree”的决定不应该是相关的。那么这会比使用trie更有效吗?如果我们的树存储在磁盘上,效率会更高,因为B-Tree比trie需要更少的随机访问数据。随机访问数据?我不太清楚你说的是什么意思。我的错。但据我所知,在特里亚搜索是最好的。它的O(M),其中M是单词的长度。@ankitG当数据非常大并且存储在磁盘上时,数据结构的效率更多地取决于磁盘块访问的数量,而不是所有操作的总量。因此,如问题中所述,如果“N”很大,我们可能不想用这些N个文档创建一个trie,可能是因为trie占用了太多的主内存,而我们可能没有,因为“N”是largeNot在Kart trie上得到了任何东西。你能给我一份我可以阅读的资料吗?谢谢。但是trie仍然会在内存中。无论如何,您仍然会将所有单词存储在trie中,这可能是不可行的,因为“N”很大,因此单词数量太多。另外,叶节点将包含哪些内容?它应该有一个包含这个单词的所有文档ID的列表。这乘以树叶的数量将是非常巨大的。