a-b树的定义说
2 ≤ a ≤ (b+1)/2
现在有人可以解释需求a ≤ (b+1)/2
的原因吗?。
答案 0 :(得分:0)
好a≤(b+1)/2
相当于2a≤b+1
或2a-1≤b
。
从a
到2a-1
的间隔是用于(a,b)树的重新平衡算法实际工作的最小间隔。选择b的实际值大于最小值会影响节点中的空间利用率以及删除/插入操作中实际重新平衡部分的复杂性,但算法仍然有效。
让我们说例如a=k
和k>=2
。如果我们选择的值b
小于2a-1
说2a-2=2k-2
。
Insert重新平衡部分说:
如果您插入的节点已经有b键,则它们变为b+1
。
If the overflowing node is the tree root :
create two new nodes, copy into each half the root entries
put into the root pointers to these two new nodes with the key that separates them.
Else
create a new node
move half of the entries of the overflowing node into the new node
insert a pointer to the new node in the upper neighbor
现在,当您需要在节点中添加b=2a-2
个条目时,如果2a-2
溢出,则2a-1
个条目总共会有a
个条目。如果拆分节点,其中一个节点将留下少于b
个条目,从而在节点中创建一个下溢,这是一个问题。如果b
是2a-1
2a
的最小可能值,那么溢出节点将具有“总”a
条目,您可以将其分成两个具有最小值的节点a=3
。
编辑:
对于更具体的示例,假设您可以创建b=4
和2a-1
小于a=2
的(a,b)树。那么如果你想在你的树中准确存储5个值,你将如何做呢?您不能将所有值放在一个节点中,因为它们超过4.但您不能分成两个节点,因为这两个节点中只有一个节点有3个条目而另一个节点下溢(仅2个条目被禁止)。
另一个简单示例是b
,则b
的最小值为3.如果{{1}}为2,则表示该节点必须始终有2个无法实现的条目。