【发布时间】:2016-05-08 17:28:24
【问题描述】:
最近在学习期间遇到了这样一个问题
5000 个键所需的 B+ 树和 B 树索引的最低级别是多少,B+ 树节点 (P) 的顺序是 10。(假设 P 是可以存储在 B+ 树节点中的最大指针)
我为 Btree 计算了它恰好是 4 个级别。在尝试 B+ 树时,我陷入了混乱。所提到的顺序是内部节点顺序还是叶节点顺序。如果它是内部节点顺序,那么如果叶节点的顺序未知,那么如何计算所需的级别数。有人可以帮我吗?
【问题讨论】:
最近在学习期间遇到了这样一个问题
5000 个键所需的 B+ 树和 B 树索引的最低级别是多少,B+ 树节点 (P) 的顺序是 10。(假设 P 是可以存储在 B+ 树节点中的最大指针)
我为 Btree 计算了它恰好是 4 个级别。在尝试 B+ 树时,我陷入了混乱。所提到的顺序是内部节点顺序还是叶节点顺序。如果它是内部节点顺序,那么如果叶节点的顺序未知,那么如何计算所需的级别数。有人可以帮我吗?
【问题讨论】:
你是对的,问题应该提到叶子节点的容量。
不管它是什么——我们称之为L——所需的叶节点数量显然是ceiling(N / L),因为叶节点层必须包含所有数据。如果每个叶节点最多可以容纳 10 条记录(数据项),那么我们得到的最小叶节点数为 500。一旦获得所需数量的叶节点,就可以像往常一样计算索引部分的所需高度 B -树。
在我们的例子中,内部节点的最低层(即 B+ 树的索引部分的最底层)需要至少有 500 个传出指针才能到达每个叶子。 ceiling(log(500)/log(10)) 为 3,这为您提供了高于序列集的索引级别的最小数量。因此,在这种情况下,B+ 树也至少有 4 层,就像普通的 B 树一样。
【讨论】: