자료구조

[자료구조] B-tree

jueunni 2024. 9. 3. 17:16

m-way search tree

m-way search tree는 최대 m개의 자식을 가지는 tree이다.

왼쪽: binary search tree 오른쪽: 4-way search tree

 

  • 각 노드는, m~⌊m/2⌋ 개의 children과 m-1~⌊m/2⌋-1 개의 key를 가진다.
  • Tip. children의 개수를 기억하면, key의 개수는 -1을 하면 된다.
  • 름차순으로 정렬되어 있다.

B-tree(Balanced tree)

B-tree에서 B는 balance를 의미한다. 여기서 밸런스를 갖춘다는 것은 어느 한쪽으로 치우치지 않고 균형이 맞다는 뜻이다.

B-tree는 m-way search tree + ⍺ 인 tree이다.

다음과 같은 추가 특징들을 갖는다.

  • 루트는 최소 2개의 children을 갖는다.
  • 모든 external 노드는 같은 레벨(높이)이다. (perfectly balanced)
  • 모든 internal 노드는 최소 ⌈m/2⌉ ~ 최대 m 개의 children을 갖는다.
  • 여기서, external노드는 leaf 노드를 의미하고, internal 노드는 root와 leaf 노드를 제외한 모든 노드를 의미한다.

m=3일 때, 모든 internal 노드는 2 or 3개의 자식을 가진다. (따라서, 각 노드 별 key의 개수는 1 or 2개이다.)

m=4일 때, 모든 internal 노드는 2,3 or 4개의 자식을 가진다. (따라서, 각 노드 별 key의 개수는 1~3개이다.)


B-tree 연산 - Insertion

1. key rotation

sibling 노드에 공간이 있는 경우 사용 가능한 방법

 

30을 insert하려고 시도하지만, key가 최대 2개까지 가능하므로 조치가 필요한 상황

 

 

key rotation

 

2. node split

key rotation만으로 해결이 불가능한 경우 사용 가능한 방법

 

삽입 이후에 overflow가 발생한 경우, 노드를 세 그룹으로 나누어야 한다.

  • (a) middle key보다 작은 key들
  • (b) middle key
  • (c) middle key보다 큰 key들

(b)를 parent로 올리고, (a)와 (c)를 새로운 노드로 만들면 된다.

30을 insert하려고 시도하지만, 이 경우에는 key rotation으로 해결이 불가능해서 node split으로 해결해야 하는 상황

 

(a): 10, (b):20, (c):30으로 나눈 모습

 

node split이 끝난 최종 모습


B-tree 연산 - Deletion

1. key rotation

insertion과 마찬가지로 sibling 노드에 공간이 남아있는 경우 사용 가능한 방법

2. node merging

key rotation만으로 해결이 불가능할 때 사용 가능한 방법