将所有元素存储在叶节点中有什么好处?

时间:2010-10-14 17:57:55

标签: data-structures binary-search-tree

我正在阅读彼得·布拉斯的 高级数据结构

在关于搜索树的章节的开头,他说有两种搜索树模型 - 一种是节点包含实际对象(如果树用作字典的值),另一种是所有对象存储在叶子中,内部节点仅用于比较。

第二个模型比第一个模型有什么优势?

4 个答案:

答案 0 :(得分:9)

数据仅存在于叶节点中的二叉树的一大优势是,您可以根据数据集中不存在的元素进行分区。

例如,如果我有一个0-1百万的可能数据集,但绝大多数项目要么处于高端还是低端而不是中间,我可能仍然希望我的第一次比较为500,000 - < em>即使该数字不在我的数据集中。如果每个节点都有数据,我就无法做到这一点。虽然理论上通常不需要,但我已经多次尝试基于数据简化实现之外的值进行分区。

答案 1 :(得分:3)

B +树是所有键/值存储在叶节点中的示例。这里的主要优点是,由于所有项都在叶节点中,因此叶节点可以链接在一起以形成允许快速有序遍历的链表。如果访问特定元素,则始终可以在不访问任何父项的情况下查找序列中的下一个元素,因为叶节点已链接在一起。文件系统和数据库存储系统可以利用这种结构进行范围搜索和填充。

答案 2 :(得分:1)

让我们假设您正在某些复杂标准上构建某些对象的树。根据多个属性计算的示例。有时您无法更改此对象以存储计算值,并且计算此条件是非常广泛的。因此,您只需计算一次此条件,并根据条件结果将对象存储在叶子中。然后,当您的树完成后,您可以更快地找到所需对象,因为您不必为路径中的每个树节点计算条件。

答案 3 :(得分:0)

很好地将信息对象存储在节点中,我们在这种情况下谈论一个trie,对于快速检索信息是有用的(比在数组/哈希表中存储东西更快,其中最坏情况的auf访问是O(n),在这个特里,这是O(m)[m是n的长度]

看这里: https://en.wikipedia.org/wiki/Trie

在搜索树中,这些操作可能要复杂得多(看看AVL Tree O(log n)),因此可能会更慢并且更加完整。

选择什么数据结构? 那么这取决于你想做什么