在数据库系统实现中,为什么B +树比斐波那契堆更受青睐?

问题描述

enter image description here

在实施更大规模的数据库系统时,是否有比B +树更优先于Fibonacci堆的特殊原因?从图中的复杂性分析来看,斐波那契堆似乎更快。

解决方法

B +树是搜索树,而不是堆。该图像未将斐波那契堆与B +树进行比较,而是与二进制进行了比较。

比较堆和搜索树

堆是一种提供 lazy 顺序的数据结构,即,要以排序顺序获取 i th 值,您将拥有在您从堆中弹出值时更改堆。对于您共享的映像中的两个堆实现都是如此。

搜索树对订单的关注程度更高。您可以按 O(n)时间顺序迭代其值,而无需对树进行任何更改。对于总计为 O(nlogn)的堆,您将需要进行 n extract-min操作,并且该堆会丢失从中提取的值。 / p>

您写道:

在实施较大规模的数据库系统时,是否有首选B +树的特殊原因

堆不是用于索引数据库系统中数据的有用数据结构,因为不经更改就无法知道顺序,并且按有序顺序读取的节点分散在不同的磁盘位置。

搜索树更适合于此目的。在搜索树中,与较大块大小匹配的搜索树是其数据存储在相对较慢的磁盘上的数据库的有趣选择。 B树就是这样的例子。 B +树比B树更具优势,因为它们在链接的叶块内按 order 存储值,因此它们在有序迭代中进行优化,而B树比B +-占用的空间少树木。

比较二进制堆和斐波那契堆

二进制堆和斐波那契堆之间的时间复杂度差异可能是斐波那契堆的一个因素。但是,由于Fibonacci堆具有更大的开销,因此收益只会出现在更大的数据集上。在Wikipedia上说:

尽管斐波那契堆看起来非常有效,但它们具有以下优点 两个缺点(如论文"The Pairing Heap: A new form of Self Adjusting Heap"所述):

“当涉及到 编码它们。另外,相比起来,它们在实践中效率不高 从理论上讲效率较低的堆形式,因为 他们需要存储和操作四个最简单的版本 每个节点的指针,相比每个节点两个或三个指针 其他结构所需的”。

引用了这些其他结构 到二元堆,二项式堆,配对堆,新娘堆和等级 配对堆。

尽管开始一系列操作的总运行时间 具有空结构的空间受上述边界的限制 (很少)序列中的操作可能需要很长时间才能完成 (尤其是删除和删除的最小值在 最坏的情况)。因此,斐波那契堆和其他摊销 数据结构可能不适用于实时系统。