12

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:

  1. Every non-root node stores at least t - 1 keys and has t children.
  2. Every node stores at most 2*t - 1 keys and has 2*t children.

So you get for t = 2:

  1. t - 1 = 1 keys and t = 2 children
  2. 2*t - 1 = 3 keys and 4 children

For t = 3

  1. t - 1 = 2 keys and t = 3 children
  2. 2*t - 1 = 5 keys and 6 children

Now here's the problem: It seems that the nodes in a 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?

nbro
  • 15,395
  • 32
  • 113
  • 196
helpermethod
  • 59,493
  • 71
  • 188
  • 276
  • `in "Introduction to Algorithms"` - lo and behold! _Which_ "Introduction to Algorithms": Authors? Publishers? Language? ISBN? Hyperlink? – greybeard Jan 19 '17 at 09:00

2 Answers2

3

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.

nbro
  • 15,395
  • 32
  • 113
  • 196
jpalecek
  • 47,058
  • 7
  • 102
  • 144
  • Of course you're right... what I meant was the case when the node is full - it then can only contain odd numbers of nodes. Still I don't get why this leads to better performance, see ire_and-curses comment. – helpermethod Aug 19 '10 at 05:47
  • @Helper Method: Ok, so I think the second paragraph answers your question - do you need a formal proof? – jpalecek Aug 19 '10 at 08:55
  • @jpalecek I have edited the original question, but the OP asked actually about when a node is full: why a full node can't not have an even number of keys? That was the actual not so clear question of the OP, IMO. – nbro Sep 07 '15 at 15:56
1

it's not impossible but suboptimal. how do you split a node with an odd number of children?

Javier
  • 60,510
  • 8
  • 78
  • 126
  • 5
    I don't understand this argument. You take the median child, move it into the parent, and then assign all children rightwards of the median to a new sub-node of the parent. – ire_and_curses Aug 18 '10 at 22:04