你如何计算出B树的最大深度?
假设您有一个1625阶的B树,这意味着每个节点有1625个指针和1624个元素。
如果树包含85,000,000个密钥,那么树的最大深度是多少?
答案 0 :(得分:5)
假设
理解问题中定义的顺序
具体来说,我们可以指望每个节点有1625个指针(某些含义的顺序将其定义为最大键或指针数,这可能会增加下面计算的树大小)
...此树的最小深度为3,即它将具有根节点,一层非叶节点和叶节点层。 ......这棵树的最大深度也是3。
以最佳情况计算深度:
取记录总数85,000,000,除以订单,1,625
这给出了叶子行数:52,308
取这个叶子行数,除以顺序
这给了33;这个数字小于我们可以停止分割的顺序,这是根节点中的指针数量。如果这个数字超过了一个节点可以容纳的数量,那么我们将有一个额外的水平,并将继续分割。
我们进行了两次划分,因此树深为3。
如果必须拆分所有节点,则会出现更糟糕的情况,因此平均保持指令/ 2(无舍入)指针。最坏情况的计算是相似的,我们只是按顺序/ 2,即在我们的情况下为812.5,在叶子上方生成104,616个叶节点,129个非叶节点,最后一个根用于跟踪这些129个非叶节点。
答案 1 :(得分:4)
m阶B树的最坏情况高度为log m / 2 n。
请参阅:http://en.wikipedia.org/wiki/B-tree#Best_case_and_worst_case_heights
答案 2 :(得分:1)
B树是平衡的,最坏情况下的检索受其高度的限制。容量顺序的Btree中的每个节点都有 d 。最大深度=最差情况
d = 1624/2 = 812
高度< = log d + 1 ((n + 1)/ 2)+1
答案是log 812 + 1 ((85,000,000 + 1)/ 2)+1
答案 3 :(得分:0)
最大深度取决于用于操纵树的算法,以及它们最糟糕的行为是什么(我不知道细节,对不起)。假设完美平衡,近似深度为log(N)/ log(1625)。
B + -tree可能会稍微深一点,因为只有叶子保持键,但差异可能是微不足道的。如果你认为每个非叶子节点只需要保持指针,它也可能更浅。
答案 4 :(得分:0)
CanBerkGüder已经给出了b树最大深度的公式。 在你的情况下m = 1625
但是奇数指针和偶数键可能不是一个好主意 因为在这种情况下,您必须在节点满时不均匀地拆分它。
相反,你应该为每个节点保留奇数个键甚至指针数,以便统一分割节点。
答案 5 :(得分:0)
这是针对B +,不确定B。
85,000,000条记录,在最好的情况下,记录在上限(85米/ 1624)= 52340叶。这是底层,这就是为什么我们使用的是元素数而不是指针数。
要查找有多少级别,我们将继续将我们找到的叶子数量除以订单,沿途采取上限:上限(52340/1625)= 33。这次我们使用了指针的数量,因为我们已经确定了存储元素的底层,现在使用指向元素叶的指针。
由于这个数字不大于订单本身,我们就此止步,因为这是根;顶层。 Root有33个指针可以指向最多33x1625(53625)个叶子,差异不应该让你感到困惑,因为并非所有元素叶子都可以填充到最大值。 53625个叶子最多可以存储53625x1624(87,087,000)个元素,这足以容纳我们的例子。
回到问题,只有根,而元素留在它下面,所以深度是2。
希望这有帮助。