Answers:
下图有助于显示B +树和B树之间的差异。
B +树的优点:
B树的优势:
与B树相比,B +树的主要优点是它们允许您通过删除指向数据的指针来打包更多指向其他节点的指针,从而增加扇出并可能减小树的深度。
缺点是,当您在内部节点中找到匹配项时,不会早日淘汰。但是,由于这两种数据结构都具有巨大的扇出状态,因此无论如何,绝大多数匹配项都将位于叶节点上,从而使B +树的平均效率更高。
B + Tree进行完整扫描要容易得多,并且性能更高,就像查看树索引的每条数据一样,因为终端节点形成了一个链表。要对B树进行完整扫描,您需要对树进行遍历以查找所有数据。
另一方面,当您执行查找(通过键查找特定的数据)时,尤其是当树位于RAM或其他非块存储中时,B树会更快。由于您可以在树中提升常用节点,因此获取数据所需的比较较少。
B +树在基于块的存储(例如,硬盘)中特别有用。考虑到这一点,您将获得一些优势,例如(从我的头上来):
高扇出度/低深度:这意味着您必须减少获取数据的块数。将数据与指针混合在一起,每次读取将获得更少的指针,因此您需要更多的探索才能获得数据
简单一致的块存储:内部节点具有N个指针,没有其他内容,叶节点具有数据,没有其他内容。这样就可以轻松解析,调试甚至重构。
高密钥密度意味着几乎可以肯定顶部节点在高速缓存中,在许多情况下,所有内部节点都得到快速高速缓存,因此仅数据访问必须转到磁盘。
**
B树的主要缺点是难以顺序遍历键。B +树保留了B树的快速随机访问属性,同时还允许快速顺序访问
**参考:使用C //的数据结构作者:Aaro M Tenenbaum
B树和B +树之间的主要区别是B树消除了搜索键值的冗余存储。由于在B树中没有重复搜索键,因此我们可能无法使用更少的树节点来存储索引但是,由于非叶子节点中出现的搜索关键字在B树中没有出现,因此我们不得不为非叶子节点中的每个搜索关键字包括一个额外的指针字段。它们是B树的空间优势,因为不会发生重复并且可以用于大索引。
B +树是一棵平衡树,其中从树的根到叶的每条路径都具有相同的长度,并且树的每个非叶节点都有[n / 2]和[n]个子节点,其中n是为特定的树固定。它包含索引页和数据页。二叉树的每个父节点只有两个孩子,B +树的每个父节点可以有可变数量的孩子
B +树的一种可能用法是,它适用于树变得太大而无法容纳可用内存的情况。因此,您通常希望执行多个I / O。
即使确实在内存中使用了B +树,也经常会发生这种情况,然后您的缓存管理器可能会将其永久保存在内存中。但这是一种特殊情况,而不是一般情况,因此缓存策略与B +树维护是分开的。
同样,在B +树中,叶子页在链接列表(或双向链接列表)中链接在一起,从而优化了遍历(用于范围搜索,排序等)。因此,指针的数量是所使用的特定算法的函数。