인덱스로서의 트리는 높이가 중요하다! 검색 속도와 연관된다.
특정 데이터 검색, 노드 삽입/삭제가 자주 발생하는 문제에 가장 효과적인 이진트리
왼쪽/오른쪽이라는 방향성을 가지며 다루기 편리
부모 노드를 중심으로 왼쪽은 부모 노드보다 작은 데이터, 오른쪽은 부모보다 큰 데이터 위치
일반적으로 노드 수가 많아지면 트리 높이가 커진다.
m개의 서브 트리를 가질 수 있는 트리
(같은 수의 노드를 가질때 BST보다 높이가 낮다.)
이진 탐색 트리의 확장된 형태
탐색 트리의 제한을 따르되 2개 이상 m개 이하의 자식을 가질 수 있다.
기본 MST이고 균형 트리(Balanced MST)
→ 한쪽으로 쏠리는 트리가 나오는 것 방지
(균형 트리? 루트로부터 리프까지의 거리가 일정한 트리)
노드의 데이터 수가 n개라면 자식의 수는 n+1개
루트와 리프를 노드를 제외한 노드들은 최소 [m/2]개의 서브트리를 갖는다.
노드의 데이터는 반드시 정렬된 상태여야한다.
자식 노드의 데이터들은 노드를 기준으로 데이터보다 작은 값은 왼쪽 서브트리에 큰 값은 오른쪽 서트리에 위치
리프 노드로 가는 경로의 길이는 모두 같아야한다. (리프 노드는 모두 같은 레벨에 존재해야함)
B-Tree와 유사하지만 리프노드는 연결리스트의 형태를 띄어 선형검색이 가능하다.(순차 탐색에 유리)
무조건 리프노드까지 가야만 찾을 수 있다.
작은 시간복잡도에 검색을 수행할 수 있음
실제 DB 인덱싱은 B+ Tree로 이루어져있다.
(인덱싱 - 어떤 자료를 찾는데 key값을 이용해 효과적으로 찾을 수 있는 기능)
리프가 아닌 노드로 된 인덱스 세트와 리프 노드로 구성된 순차 세트로 구성
<삽입 / 삭제 추가 정리 이해 필요>
70과 100의 중간 값인 80을 위로 올리고 노드 70, 100은 분열
새로운 데이터는 리프노드에 삽입
1. 리프노드에 있는 100 삭제
(인덱스 셋에 있는 100은 삭제 하지 않는다 - 노드의 키값 탐색에 필요한 분기 값으로 사용될 수 있음)
2. 리프노드에 있는 110삭제