Data structures 在叶节点中存储所有元素的优点是什么?

Data structures 在叶节点中存储所有元素的优点是什么?,data-structures,binary-search-tree,Data Structures,Binary Search Tree,我正在阅读彼得·布拉斯的《高级数据结构》 在关于搜索树一章的开头,他指出有两种搜索树模型——一种是节点包含实际对象(如果树用作字典,则为值),另一种是所有对象存储在叶子中,内部节点仅用于比较 与第一个模型相比,第二个模型的优点是什么?在节点中良好地存储信息对象(我们在本例中讨论的是trie)对于快速检索信息非常有用(比在数组/哈希表中存储内容更快,其中最坏的auf访问是O(n),在trie中这是O(m)[m是n的长度]) 看这里: 在一个搜索树中,这个任务可能要复杂得多(查看AVL树O(log

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

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


与第一个模型相比,第二个模型的优点是什么?

在节点中良好地存储信息对象(我们在本例中讨论的是trie)对于快速检索信息非常有用(比在数组/哈希表中存储内容更快,其中最坏的auf访问是O(n),在trie中这是O(m)[m是n的长度])

看这里:

在一个搜索树中,这个任务可能要复杂得多(查看AVL树O(logn)),因此速度可能较慢,实现起来也更复杂

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

二叉树的一大优点是数据只在叶节点中,你可以根据数据集中没有的元素进行分区


例如,如果我有一个0-1百万的数据集,但是绝大多数的项目要么是在高端,要么是在低端,而不是在中间,我可能仍然希望我的第一个对500000的比较——即使这个数字不在我的数据集中。如果每个节点都有数据,我就不能这样做。虽然理论上通常不需要,但我已经多次遇到基于数据简化实现之外的值进行分区的情况。

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

假设您正在基于某些复杂条件在某些对象上构建树。例如,根据多个属性计算。有时您无法将此对象更改为存储计算值,而计算此条件是扩展性的。所以您只需计算一次该条件,并根据条件结果将对象存储在leaf中。然后,当您的树完成时,您可以更快地找到所需对象,因为您不必为路径中的每个树节点计算条件。

那么,与常规链表相比,它究竟有哪些优点?由于相同数量的值需要更多的内存,并且操作可能具有相同的复杂性?@Aerus-即使数据节点不受叶限制,也可以创建所有数据节点的链表。然而,“混合”方法的优点是搜索速度快(因为树状结构),但顺序遍历也快(因为链表方面)。它需要更多的内存—每个数据节点多一个指针—并且还为插入增加了少量的复杂性。当你想找到一个从任意值开始的连续的项目范围时,这种类型的结构是非常好的。当然,我认为搜索也是一样的,但是我想到的是一个数组(愚蠢的我)而不是一个链表。谢谢你的回答。你有真实的例子来说明这些区别吗?