a-b树的原因是要求a< =(b + 1)/ 2

时间:2015-02-04 12:17:28

标签: data-structures

a-b树的定义说

  1. 2 ≤ a ≤ (b+1)/2
  2. 除root之外的每个内部节点至少有一个子节点,最多只有b个子节点。
  3. 根最多只有b个孩子。
  4. 现在有人可以解释需求a ≤ (b+1)/2的原因吗?。

1 个答案:

答案 0 :(得分:0)

a≤(b+1)/2相当于2a≤b+12a-1≤b

a2a-1的间隔是用于(a,b)树的重新平衡算法实际工作的最小间隔。选择b的实际值大于最小值会影响节点中的空间利用率以及删除/插入操作中实际重新平衡部分的复杂性,但算法仍然有效。

让我们说例如a=kk>=2。如果我们选择的值b小于2a-12a-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个条目,从而在节点中创建一个下溢,这是一个问题。如果b2a-1 2a的最小可能值,那么溢出节点将具有“总”a条目,您可以将其分成两个具有最小值的节点a=3

编辑: 对于更具体的示例,假设您可以创建b=42a-1小于a=2的(a,b)树。那么如果你想在你的树中准确存储5个值,你将如何做呢?您不能将所有值放在一个节点中,因为它们超过4.但您不能分成两个节点,因为这两个节点中只有一个节点有3个条目而另一个节点下溢(仅2个条目被禁止)。

另一个简单示例是b,则b的最小值为3.如果{{1}}为2,则表示该节点必须始终有2个无法实现的条目。