Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
Tags
- 백준 1246번
- 문제 풀이
- 이항계수
- 백준 1487번
- 파이썬
- 1141번
- BTREE
- 알고리즘
- 백준 11050번
- hashing
- CSS
- DP 알고리즘
- 풀이
- 해설
- 챗봇
- html
- Python
- 백준 14501번
- 실버
- N과 M
- 연산자 문제
- 해싱
- 가치규범의 공공외교
- 주창형 공공외교
- 백준
- B-tree
- 1
- 한반도평화와공공외교
- 풍선터뜨리기
- 0의 개수
Archives
- Today
- Total
SunFly의 코딩 및 정보 블로그
B+Tree 삽입(Insertion) 알고리즘 - 1 본문
※ 첫 record 삽입
● Root가 아직 NULL인 경우에 해당됨
● 아직 하나의 record가 삽입되기 전
- 인덱스 노드 하나를 만들고 이를 Root가 가리키게 함.
- ptri[0]에 NULL을 넣음(이것은 이 노드가 index 구조의 leaf 노드임을 나타낸다.)
- 데이터 노드를 하나 만듬.
- record를 데이터 노드에 삽입.
- 인덱스 노드의 ptrd[0]가 이 데이터 노드를 가리키게 한다.
- 인덱스 노드의 ptri[1] 에 0을 넣는다. ≫ 초기상황(아직 B+Tree의 형태를 갖추지 못함.) 임을 나타냄.
※ 초기 상황(초반부) 삽입
● Root가 NULL이 아닌 경우의 초반부 삽입
- Sequence set에 데이터 노드 하나만 존재하는 경우
- Root 인덱스 노드의 Pointer[1]이 NULL인지를 체크하여 확인.
- 초반부 삽입일 경우, 무조건 첫 데이터 노드에 삽입하는 것을 시도 (= index구조에서 navigation과정 생략)
- Case1 :데이터 노드에 빈 자리가 있으면 순서에 맞춰 삽입 후 종료.
- Case2 : 데이터 노드에 빈자리가 없으면 데이터 노드 splitting 진행 (overflow 처리)
- → 삽입할 record와 데이터 노드의 모든 record를 big node에 넣고 두 부분으로 split
- (첫부분: 중간 record까지, 둘째 부분: 중간 record 이후 모든 record)
- → 첫부분은 curr의 데이터 노드에 삽입, 뒷부분은 새로운 데이터 노드(new data node)를 할당하여 여기에
- 삽입.
- → 중간 record의 key값을 Root 인뎃으 노드의 key[0]에도 삽입.
- → 새로운 데이터 노드에 대한 포인터를 Root 인덱스 노드의 Pointer1에 넣음.
- → 두 데이터 노드를 link시킴. (link of data node2 = NULL)
'알고리즘' 카테고리의 다른 글
B+tree 삽입(Insertion) 알고리즘 - 3(Type-2 삽입) (0) | 2021.10.12 |
---|---|
B+Tree 삽입(Insertion) 알고리즘 - 2 (Type-1 삽입) (0) | 2021.10.12 |
B+Tree 알고리즘이란? (0) | 2021.10.11 |
이진 탐색 트리(Binary Search Tree)란? (0) | 2021.10.11 |
B-tree 구현 (C언어 구현) (0) | 2021.10.11 |