참조: https://www.youtube.com/watch?v=H_u28u0usjA&t=167
참조: https://rebro.kr/169
B-Tree 시뮬레이션: https://www.cs.usfca.edu/~galles/visualization/BTree.html
위 트리는 3차 B-Tree의 예시이고, 주황색 부분은 자식 node를 가리키는 포인터이며, 살구색 부분은 각 node의 key이다.
주요 4가지 파라미터
1. M: 각 노드의 최대 자녀 노드 수
2. M-1: 각 노드의 최대 key 수
3. ceil(M/2): 각 노드의 최소 자녀 노드 수
4. ceil(M/2)-1: 각 노드의 최소 key 수
해당 트리에 13이라는 key를 삽입하는 예시이다.
B-Tree의 삭제의 경우 다음과 같이 나눠진다.
1-1) 현재 node의 key 수가 최소보다 큰 경우
1-2) 현재 node의 key 수가 최소이고, 왼쪽 또는 오른쪽 형제 node의 key수가 최소보다 큰 경우
1-3) 현재 node와 왼쪽, 오른쪽 형제 node의 key 수가 최소이고, 부모 node의 key 수가 최소보다 큰 경우
1-4) 현재 node와 왼쪽, 오른쪽 형제 node, 부모 node 모두 key수가 최소인 경우
2-1) 현재 node 또는 자식 node의 key 수가 최소보다 큰 경우
2-2) 현재 node와 자식 node 모두 key 수가 최소인 경우
- 삭제할 key가 leaf node에 있는 경우
1-1) 현재 node의 key 수가 최소보다 큰 경우
1-2) 현재 node의 key 수가 최소이고, 왼쪽 또는 오른쪽 형제 node의 key수가 최소보다 큰 경우
1-3) 현재 node와 왼쪽, 오른쪽 형제 node의 key 수가 최소이고, 부모 node의 key 수가 최소보다 큰 경우
1-4) 현재 node와 왼쪽, 오른쪽 형제 node, 부모 node 모두 key수가 최소인 경우
- 삭제할 key가 leaf node를 제외한 node에 있는 경우
2-1) 현재 node 또는 자식 node의 key 수가 최소보다 큰 경우
이 후 과정은 case1과 동일하다
2-2) 현재 node와 자식 node 모두 key 수가 최소인 경우
1. k를 삭제하고 k의 양쪽 자식을 하나로 합친다. 합쳐진 node를 n1이라고 하자.
2. k의 부모 노드 key를 형제 node에 합쳐준다. 합쳐진 node를 n2라 하자.
3. n1를 n2의 자식이 되도록 연결한다.
4-1. 만약 n2의 key 수가 최대보다 크다면 key 삽입 과정과 동일하게 분할한다.
4-2. 만약 n2의 key 수가 최소보다 작다면, 2. 로 돌오가서 동일한 과정을 반복한다.