2021.05.11 - [이론공부/화일처리및응용] - 화일 처리 및 응용 공부 #13 (탐색트리2)
B- 트리
- 균형 m원 탐색 트리
- 가장 많이 사용되는 인덱스 방법
- 효율적인 균형 알고리즘을 제공함
- 차수(order)가 m 인 B-tree 특성
- B트리는 공백이거나 높이가 1 이상인 m원 탐색 트리
- 루트와 리프를 제외한 내부 노드
- 최소 m/2, 최대 m개의 서브트리
- 적어도 m/2 - 1 개 의 키값 (노드의 반이상이 채워짐)
- 루트 : 리프가 아니면 적어도 두개의 서브트리를 가짐
- 모든 리프는 같은 레벨
장점
- 삽입, 삭제 뒤에도 트리의 균형 상태를 유지
- 저장 장치의 효율성
- 각 노드의 반이상은 항상 키값으로 채워짐
m차 B-트리 노드 구조
B-트리에서의 연산
- m원 탐색트리의 검색과 같은 과정
- 직접 탐색 : 키 값에 따라 왼쪽, 오른쪽으로 분기
- 노드에서의 검색튼 순차 겁색
- B-트리 전체의 순차 검색은 트리의 중위 순회로 수행
2021.05.19 - [전체글] - 자료구조 공부 #18 (트리연산)
트리연산 관련 다른 수업 내용이다 참고하자
B-트리에서 삽입
- 삽입
- 공간이 있는경우 : 순서에 맞게 삽입
- 공간이 없는 경우 : overflow로 split 발생
- overflow 처리방법
- 노드를 두개로 분할
- 해당 노드에 새로운 키 값 삽입했다 가정
- 중간(m/2)번째 키 값을 기준으로 왼쪽 키값을 그대로 두고 오른쪽 큰 기 값들은 새로운 노드에 저장
- 중간 키값은 분할된 두 노드가 왼쪽, 오른쪽 서브트리가 되도록 부모 노드에 삽입
- 이때 다시 overflow 발생시 split 작업 반복
- 노드를 두개로 분할
- overflow 처리방법
트리 순회 방법
2021.05.16 - [이론공부/자료구조] - 자료구조 공부 #17 (트리순회)
자료구조에 배운 트리순회 내용이다 참고하자
B-트리에서 삭제
- 삭제할 키 값이 리프 노드에 있는 경우에는 그대로 삭제
- 삭제될 키 값이 내부 노드에 있는 경우
- 이 키 값의 후행 키 값과 교환 후 리프 노드에서 삭제
B-트리 특성상 이 후행 키 값은 항상 리프 노드에 있음
리프 노드에서의 삭제 연산이 더 간단
- 후행 키 값 대신 선행 키 값을 사용할 수 있음 - 삭제 결과로 노드의 키값 수가 B 트리의 최소 키 값 수(m/2 -1) 보다 작게 되면 underflow가 일어나 재분배 시행
재분배
- 해당 노드의 오른쪽이나 왼쪽 형제 노드 중에서 최소 키 값보다 많은 수의 키값을 가진 노드에서 키 값 하나를 차출
- 부모 노드에 있는 키 값을 언더 플로가 일어난 노드로 이동, 빈자리로 차출된 키값을 이동
- 트리구조가 변경안됨
합병
- 재분배가 불가능한 경우 (두형제 노드가 최소의 키값만 가진 경우)에 적용
- 언더플로가 된 노드의 오른쪽(왼쪽) 형제 노드에 있는 키 값들과 이 두 노드를 분리시키는 부모 노드의 키값을 합치고 트리구조를 조정, 합병으로 생긴 빈 노드는 제거
- 트리구조 변경됨
- 이 합병 작업은 루트노드까지 연쇄적으로 파급될 수 있다. 이 경우에는 트리의 레벨이 하나 감소될 수도 있다.
b 트리의 특성, 구조 균형이 유지되는 이유, 및 삽입삭제 과정을 이해하자
'이론공부 > 화일처리및응용' 카테고리의 다른 글
화일 처리 및 응용 공부 #16 (트라이) (0) | 2021.05.31 |
---|---|
화일 처리 및 응용 공부 #15 (B*트리) (0) | 2021.05.27 |
화일 처리 및 응용 공부 #13 (탐색트리2) (0) | 2021.05.11 |
화일 처리 및 응용 공부 #12 (탐색 트리) (0) | 2021.05.04 |
화일 처리 및 응용 공부 #11 (정렬/합병) (0) | 2021.04.20 |