B-Tree - Why can't there be a node with an even number of keys?
I'm trying to implement a B-Tree according to the chapter "B-Trees" in "Introduction to Algorithms".
What I don't quite get is the "minimal degree". In the book it is stated that the degree is a number which expresses the lower/upper bound for the number of keys a node can hold. It it further says that:
- Every non-root node stores at least
t - 1
keys and hast
children. - Every node stores at most
2*t - 1
keys and has2*t
children.
So you get for t = 2:
t - 1
= 1 keys and t = 2 children2*t - 1
= 3 keys and 4 children
For t = 3
t - 1
= 2 keys and t = 3 children2*t - 1
= 5 keys and 6 children
Now here's the problem: It seems that the nodes in a 开发者_C百科B-Tree can only store an odd number of keys when they are full.
Why can't there be a node with, let's say at most 4 keys and 5 children? Does it have something to do with splitting the node?
It seems that the nodes in a B-Tree can only store an odd number of keys?
Definitely not. The numbers you have written is minimum and maximum number ofof keys respectively, so for t = 2
, nodes with 1, 2, 3 keys are allowed. For t = 3
, nodes with 2, 3, 4, 5 keys are allowed.
Moreover, the root of the tree is allowed to have only 1 key.
It is possible to define (and implement) trees that have eg. 1 or 2 keys in a node (so-called 2-3 trees). The reason B-trees are defined to accommodate one more, is that this leads to faster performance. Particularly, this allows amortized O(1)
(counting splitting and joining operations) delete and insert operations.
it's not impossible but suboptimal. how do you split a node with an odd number of children?
精彩评论