Docsity
Docsity

Prepare for your exams
Prepare for your exams

Study with the several resources on Docsity


Earn points to download
Earn points to download

Earn points by helping other students or get them with a premium plan


Guidelines and tips
Guidelines and tips

2-3 and 2-3-4 Trees: Balanced Binary Search Trees, Lecture notes of Algorithms and Programming

The concepts of 2-3 and 2-3-4 trees, which are balanced binary search trees. These trees maintain a balance between the number of nodes at each level to ensure efficient searching. 2-3 trees allow each node to have at most 2 or 3 children, while 2-3-4 trees can have nodes with up to 4 children. The tree structure, insertion, deletion, and the advantages of using these trees.

Typology: Lecture notes

2017/2018

Uploaded on 10/23/2018

keehwan
keehwan 🇨🇦

20 documents

1 / 12

Toggle sidebar

This page cannot be seen from the preview

Don't miss anything!

bg1
- 179 -
제13장 2-3 트리, 2-3-4 트리
장에서는 2-3 트리, 2-3-4 트리에 대해 살펴본다.
13.1. 교육목표
장의 교육목표는 다음과 같다.
교육목표
2-3 트리
2-3-4 트리
2-3 트리와 2-3-4 트리는 AVL 트리와 마찬가지로 효율적인 검색을 위한
균형 트리 구조이다.
13.2. 2-3 트리
AVL 트리는 트리의 높이가 거의 최소 높이에 가깝도록 유지해 주지만 삽입과 삭제가 매우
복잡하다. 2-3 트리는 삽입과 삭제 연산이 AVL 트리보다는 간단하고 연산의 시간복잡도
 트리 구조이다.
2-3 트리
2
2-
-3
3 트리
트리: 다음 가지 조건을 만족하는 트리
조건
조건 1.
1. 모든
모든 중간노드들의
중간노드들의 자식
자식 수가
수가 2
2 또는
또는 3
3이다.
조건
조건 2.
2. 모든
모든 단말노드가
단말노드가 같은
같은 레벨
레벨에있.
조건
조건 3.
3. 다음 슬라이드에 있는 형태
형태 조건을
조건을 만족
만족해야 한다.
자식이 둘인 노드를 2
2-
-노드
노드라하, 자식이 셋인 노드를 3
3-
-노드
노드라한.
2-3 트리는 이진 트리는 아니다.
하지만 이진 트리는 2-3 트리에서 3-가없는경로볼수있.
따라서 2-3 트리는 같은 높이의 포화 이진 트리보다는 많은 노드를
가진다. , 높이가 h이면 최소한 2h+1-1 노드를 가진다.
n 노드를 가진 2-3 트리의 높이는 같은 개수의 노드로 만들 있는
완전 이진 트리의 높이인 보다 없다.
2
log n
⎢⎥
⎣⎦
pf3
pf4
pf5
pf8
pf9
pfa

Partial preview of the text

Download 2-3 and 2-3-4 Trees: Balanced Binary Search Trees and more Lecture notes Algorithms and Programming in PDF only on Docsity!

2-3 트리와 2-3-4 트리는 AVL 트리와 마찬가지로 효율적인 검색을 위한

AVL 트리는 트리의 높이가 거의 최소 높이에 가깝도록 유지해 주지만 삽입과 삭제가 매우

복잡하다. 2-3 트리는 삽입과 삭제 연산이 AVL 트리보다는 간단하고 각 연산의 시간복잡도

조건조건^ 1.1.^ 모든모든 중간노드들의중간노드들의 자식자식 수가수가^22 또는또는^33 이다.

조건조건^ 3.3.^ 다음 슬라이드에 있는 형태형태 조건을조건을 만족만족해야 한다.

가진다. 즉, 높이가 h 이면 최소한 2 h +1 -1 노드를 가진다.

n 노드를 가진 2-3 트리의 높이는 같은 개수의 노드로 만들 수 있는

완전 이진 트리의 높이인 ⎢⎣ log^^2 n ⎥⎦보다 클 수 없다.

z 첫째, 모든 중간노드들의 자식 수가 2 또는 3이다. 이 때 자식 수가 2인 노드를 2-노드

z 둘째, 모든 단말노드들이 같은 레벨에 위치한다.

z 셋째, 자식 수가 둘인 경우에는 노드에 있는 값은 왼쪽 부분트리에 있는 노드들의 값보

은 노드를 가진다. 그런데 높이가 인 포화 이진 트리는 ^   ^  개의 노드를 가지므로 높

이가 인 2-3 트리는 ^   ^  개보다는 많은 노드를 가진다. 다시 말하면 개의 노드로 만

2-3 tree^ empty

T L T R T L TM T R

TL < S < T R

T TL : 2-3 트리

R : 2-3^ 트리

T L < S < TM

T T M < L < T R

TL : 2-3^ 트리

TM R : 2-3: 2-3 트리트리

S S L class Tree23Node{Object small; Object large;Tree23Node left; Tree23Node mid;Tree23Node right; }

2-3 Tree: Search

boolean search(Object item){if(item == null) throw new NullPointerException(“…”); if(isEmpty()) throw new TreeUnderflowException(“…”);Comparable o = (Comparable)item; Tree23Node loc = root;while(loc!=null){ int comp = o.compareTo(loc.small);if(comp<0) loc = loc.left; else if(comp==0) return true;if(loc.large==null) loc = loc.middle; else{comp = o.compareTo(loc.large); if(comp<0) loc = loc.middle;else if(comp==0) return true; } else loc = loc.right; }return false; }

2-3 Tree: Insert

단말노드가 2-node이면 그 노드에 삽입한다.

단말노드가 3-node이면 노드를 분할해야 한다.

3-node S, M, L에 있던 두 개의 기존 키 값과 새 키 값을 비교하여을 결정한다. 그 다음에 다음과 같이 분할된다.

즉, M은 부모 노드에 삽입된다.

이 때 부모 노드 역시 3-node이면 또 다시 분할되어야 한다.

S M L

M

S L

2-3 Tree: Insert – 계속

노드가 분할되었을 때 그 노드의 부모가 2-node인 경우

SP

M SP

S L

M

S L

Z

Z

SP

SP M

A S

M

S L

A

L

case i-1.

case i-2.

2-3 Tree: Insert – 계속

노드가 분할되었을 때 부모 노드가 3-node인 경우

SP LP

M^1

S L

SP

M

S L

LP

SP LP

1 M 2

S L

M

SP

1 S

LP

L 2

SP LP

1 2 M

S L

LP

SP

M

S L

case i-3. case i-5.

case i-4.

2-3 Tree: Delete – 계속

먼저 형제노드를 검사한다이용하여 값을 재분배한다.. 형제 중항상 왼쪽 형제를 먼저 이용한다 3-node가 있으면 그것을.

3-node인접 형제 노드들을 결합한다인 형제노드가 없으면 부모노드에 있는 값을 아래로 내려.

이 때 부모노드가 2-node이면 삭제 알고리즘을 반복 적용한다.

경우경우 1.1. 부모가 2-node

경우 1-1, 1-2: 3-node인 형제노드가 있는 경우

경우 1-3, 1-4: 3-node인 형제노드가 없는 경우

경우경우^ 2.2.^ 부모가^ 3-node

경우 2-1(a), 2-1(b), 2-1(c): 왼쪽

경우 2-2(a), 2-2(b), 2-2(c): 중간

경우 2-3(a), 2-3(b), 2-3(c): 오른쪽

c는 3-node인 형제노드가 없는 경우

2-3 Tree: Delete – 계속

경우 1-1, 1-2: 3-node인 형제노드가 있는 경우

경우 1-3, 1-4: 3-node인 형제노드가 없는 경우

S L

P L

S

P

S L

P S

P

L

P

S

S P

- P

S

P S

S L

A B C -

B C

A

S

L

S L

B C -

S C

B

L

A A

S L

A

B

B L

A

S

S L

A B

C S

B

A L

C

S L

B C

A

S

L

A B

C

S L

A

L

S A B

B

2-3 트리의 구현도 AVL 트리와 마찬가지로 삭제할 값을 찾아가거나 삽입할 노드를 찾아갈

때 스택을 사용하여 루트부터 단말노드까지 경로에 있는 노드들을 차례로 스택에 push한다.

2-3-4 treeempty T (^) L T (^) R T (^) L T (^) M T (^) R

TL < S < T R

T TL : 2-3-4 트리

R : 2-3-4^ 트리

T L < S < TM

T T M < L < T R

2-3-4 L ,^ T^ M 트리,^ T^ R :

S S L

T L TML T MR

T L < S < T ML

T T ML < M < TMR

TMR <^ L^ <^ TR

2-3-4 L^ , T^ ML 트리^ , TML^ , T^ R :

S M L

T R

insert(55)^60 40 80

10 15 20 50 65 70 90

insert(65)

Ú Split할 때에는 항상 중간 값이 부모노드로 올라간다.

split의 반대 과정을 수행한다.

현재 노드가 P이고 삭제할 값이 있는 노드까지 경로 상에 있는 다음

자식 노드를 C라 하고, C의 가장 가까운 형제노드를 R이라 하자.

P

R C

R P C

R C 10 20 30

P

10 R 15 C 10

R 20 30 C

이 때 현재 노드를 P라 하고 찾아갈 경로 상에 있는 P의 자식 노드를 C라 하자. C 노드가

첫째, P가 2-노드인 경우는 P, C, 그리고 C의 형제노드가 병합되어 4-노드가 된다.

둘째, P가 3-노드인 경우는 C는 P 노드의 있는 하나의 값과 형제노드를 함께 병합하여 4-

노드가 되고, P 노드는 2-노드가 된다.

C 노드가 2-노드이고 가장 가까운 형제노드가 3-노드 또는 4-노드인 경우는 다음과 같이 병

합된다. 형제노드 값 중 하나가 P 노드로 올라가고 P 노드에 있는 값이 C 노드로 내려 C

delete(55) 10 15 20 50 65 70 90

delete(50)