23
Chap. 11 : Tree 2007학년도 2학기 [email protected]

Chap. 11 : Treecompiler.sangji.ac.kr/lecture/ds/2007_2/chap11_tree.pdf · 2014-10-07 · Chap 11. 트리(Tree) [email protected] 복합왼쪽-오른쪽회전 ~L-R 패턴시복합왼쪽-오른쪽회전을적용

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Chap. 11 : Treecompiler.sangji.ac.kr/lecture/ds/2007_2/chap11_tree.pdf · 2014-10-07 · Chap 11. 트리(Tree) kkman@sangji.ac.kr-11- 복합왼쪽-오른쪽회전 ~L-R 패턴시복합왼쪽-오른쪽회전을적용

Chap. 11 : Tree

2007학년도 2학기

[email protected]

Page 2: Chap. 11 : Treecompiler.sangji.ac.kr/lecture/ds/2007_2/chap11_tree.pdf · 2014-10-07 · Chap 11. 트리(Tree) kkman@sangji.ac.kr-11- 복합왼쪽-오른쪽회전 ~L-R 패턴시복합왼쪽-오른쪽회전을적용

Chap 11. 트리(Tree) - 2 [email protected]

1. 균형 트리트리~ 목적 : 효율적인 탐색, 삽입, 삭제

~ 효율적인 트리 구성이 되지 않을 경우 ?

오름/내림 차순으로 구성된 이진 트리

선형 구조와 비슷한 구조

균형 트리(balanced tree)~ 어떤 노드를 기준으로 양쪽 하위 트리의 높이를 동일하게 유지

~ AVL 트리, 2-3-4 트리, …

Page 3: Chap. 11 : Treecompiler.sangji.ac.kr/lecture/ds/2007_2/chap11_tree.pdf · 2014-10-07 · Chap 11. 트리(Tree) kkman@sangji.ac.kr-11- 복합왼쪽-오른쪽회전 ~L-R 패턴시복합왼쪽-오른쪽회전을적용

Chap 11. 트리(Tree) - 3 [email protected]

2. AVL 트리개요~ Adelson-Velskii, Landis에 의해 개발

~ 이진 트리의 일종으로 어떤 노드에서도 두 하위 트리가 같은 높이를 유지하도록 한 트리

~ 예

20, 30, 40 이 순서대로 삽입될 경우 회전을 하여 균형 유지

Page 4: Chap. 11 : Treecompiler.sangji.ac.kr/lecture/ds/2007_2/chap11_tree.pdf · 2014-10-07 · Chap 11. 트리(Tree) kkman@sangji.ac.kr-11- 복합왼쪽-오른쪽회전 ~L-R 패턴시복합왼쪽-오른쪽회전을적용

Chap 11. 트리(Tree) - 4 [email protected]

특성~ 좌우 불균형한 이진 트리에 대해 회전 알고리즘을 적용하여 강제

로 균형 유지

~ 회전 알고리즘

~ 균형을 제어하기 위한 알고리즘

~ 각 노드에서 두 하위 트리의 높이를 2이상 차이나지 않게 유지

~ 왼쪽 하위트리 높이(hL), 오른쪽 하위트리 높이(hR)

| hL – hR | < 2

하위 트리에 대해서만 균형 유지

높이-균형 트리(height-balanced tree)

Page 5: Chap. 11 : Treecompiler.sangji.ac.kr/lecture/ds/2007_2/chap11_tree.pdf · 2014-10-07 · Chap 11. 트리(Tree) kkman@sangji.ac.kr-11- 복합왼쪽-오른쪽회전 ~L-R 패턴시복합왼쪽-오른쪽회전을적용

Chap 11. 트리(Tree) - 5 [email protected]

Page 6: Chap. 11 : Treecompiler.sangji.ac.kr/lecture/ds/2007_2/chap11_tree.pdf · 2014-10-07 · Chap 11. 트리(Tree) kkman@sangji.ac.kr-11- 복합왼쪽-오른쪽회전 ~L-R 패턴시복합왼쪽-오른쪽회전을적용

Chap 11. 트리(Tree) - 6 [email protected]

3. AVL 트리 회전 알고리즘알고리즘 분류~ 단순 회전 알고리즘, 복합 회전 알고리즘.

패턴 1. 한 노드의 왼쪽자식의 왼쪽 하위트리에 삽입 (L-L, 단순)

패턴 2. 한 노드의 왼쪽자식의 오른쪽 하위트리에 삽입(L-R, 복합)

패턴 3. 한 노드의 오른쪽자식의 왼쪽 하위트리에 삽입(R-L, 복합)

패턴 4. 한 노드의 오른쪽자식의 오른쪽 하위트리에 삽입(R-R, 단순)

Page 7: Chap. 11 : Treecompiler.sangji.ac.kr/lecture/ds/2007_2/chap11_tree.pdf · 2014-10-07 · Chap 11. 트리(Tree) kkman@sangji.ac.kr-11- 복합왼쪽-오른쪽회전 ~L-R 패턴시복합왼쪽-오른쪽회전을적용

Chap 11. 트리(Tree) - 7 [email protected]

불균형을 야기하는 패턴

Page 8: Chap. 11 : Treecompiler.sangji.ac.kr/lecture/ds/2007_2/chap11_tree.pdf · 2014-10-07 · Chap 11. 트리(Tree) kkman@sangji.ac.kr-11- 복합왼쪽-오른쪽회전 ~L-R 패턴시복합왼쪽-오른쪽회전을적용

Chap 11. 트리(Tree) - 8 [email protected]

단순 회전단순 오른쪽회전~ L-L 패턴의 경우 C를 축으로 오른쪽으로 회전.

Page 9: Chap. 11 : Treecompiler.sangji.ac.kr/lecture/ds/2007_2/chap11_tree.pdf · 2014-10-07 · Chap 11. 트리(Tree) kkman@sangji.ac.kr-11- 복합왼쪽-오른쪽회전 ~L-R 패턴시복합왼쪽-오른쪽회전을적용

Chap 11. 트리(Tree) - 9 [email protected]

단순 왼쪽회전~ R-R 패턴 시 A를 축으로 왼쪽으로 회전.

Page 10: Chap. 11 : Treecompiler.sangji.ac.kr/lecture/ds/2007_2/chap11_tree.pdf · 2014-10-07 · Chap 11. 트리(Tree) kkman@sangji.ac.kr-11- 복합왼쪽-오른쪽회전 ~L-R 패턴시복합왼쪽-오른쪽회전을적용

Chap 11. 트리(Tree) - 10 [email protected]

복합 회전단순회전으로 해결 불가능한 경우

Page 11: Chap. 11 : Treecompiler.sangji.ac.kr/lecture/ds/2007_2/chap11_tree.pdf · 2014-10-07 · Chap 11. 트리(Tree) kkman@sangji.ac.kr-11- 복합왼쪽-오른쪽회전 ~L-R 패턴시복합왼쪽-오른쪽회전을적용

Chap 11. 트리(Tree) - 11 [email protected]

복합 왼쪽-오른쪽 회전~ L-R 패턴 시 복합 왼쪽-오른쪽 회전을 적용

~ A를 축으로 하여 A의 자식노드까지의 2세대 노드들에 대해 왼쪽으로 회전

B의 왼쪽 하위트리가 존재할 경우 이를 A의 오른쪽 하위트리로 함

~ 이 후 C를 축으로 하여 C의 손자노드까지 3세대 노드들에 대해오른쪽으로 회전

B의 오른쪽 하위트리가 존재할 경우 이를 C의 왼쪽 하위트리로 함.

Page 12: Chap. 11 : Treecompiler.sangji.ac.kr/lecture/ds/2007_2/chap11_tree.pdf · 2014-10-07 · Chap 11. 트리(Tree) kkman@sangji.ac.kr-11- 복합왼쪽-오른쪽회전 ~L-R 패턴시복합왼쪽-오른쪽회전을적용

Chap 11. 트리(Tree) - 12 [email protected]

Page 13: Chap. 11 : Treecompiler.sangji.ac.kr/lecture/ds/2007_2/chap11_tree.pdf · 2014-10-07 · Chap 11. 트리(Tree) kkman@sangji.ac.kr-11- 복합왼쪽-오른쪽회전 ~L-R 패턴시복합왼쪽-오른쪽회전을적용

Chap 11. 트리(Tree) - 13 [email protected]

복합 오른쪽-왼쪽 회전~ R-L 패턴 시 복합 오른쪽-왼쪽 회전을 적용

~ C를 축으로 하여 C의 자식노드까지의 2세대 노드들에 대해 오른으로 회전

B의 오른쪽 하위트리가 존재할 경우 이를 C의 왼쪽쪽 하위트리로 함

~ A를 축으로 하여 A의 손자노드까지 3세대 노드들에 대해 왼쪽으로 회전

B의 왼쪽 하위트리가 존재할 경우 이를 A의 오른쪽 하위트리로 함.

Page 14: Chap. 11 : Treecompiler.sangji.ac.kr/lecture/ds/2007_2/chap11_tree.pdf · 2014-10-07 · Chap 11. 트리(Tree) kkman@sangji.ac.kr-11- 복합왼쪽-오른쪽회전 ~L-R 패턴시복합왼쪽-오른쪽회전을적용

Chap 11. 트리(Tree) - 14 [email protected]

Page 15: Chap. 11 : Treecompiler.sangji.ac.kr/lecture/ds/2007_2/chap11_tree.pdf · 2014-10-07 · Chap 11. 트리(Tree) kkman@sangji.ac.kr-11- 복합왼쪽-오른쪽회전 ~L-R 패턴시복합왼쪽-오른쪽회전을적용

Chap 11. 트리(Tree) - 15 [email protected]

4. 2-3-4 트리개요~ 이진트리는 각각의 노드가 하나의 자료 항목에 대하여 자식을 최

대 2개 유지.

~ 다윈트리(multiway tree)는 하나의 노드에 더 많은 자료 항목과 더 많은 자식을 가질 수 있는 구조.

~ 2-3-4 트리는 다윈트리의 하나로서 3개의 자료 항목과 최대 4개의 자식을 가질 수 있는 구조.

Page 16: Chap. 11 : Treecompiler.sangji.ac.kr/lecture/ds/2007_2/chap11_tree.pdf · 2014-10-07 · Chap 11. 트리(Tree) kkman@sangji.ac.kr-11- 복합왼쪽-오른쪽회전 ~L-R 패턴시복합왼쪽-오른쪽회전을적용

Chap 11. 트리(Tree) - 16 [email protected]

특성~ 잎 노드(leaf node)란 가장 아래에 있는 노드로 2-3-4 트리에

서는 모든 잎 노드는 항상 같은 레벨 상에 존재

~ 잎노드가 아닌 노드들은 모두 자료 항목보다 하나 많은 자식 노드 유지

L = D + 1

~ 이진트리와는 달리 하나의 자식 노드만을 가질 수 없음.

Page 17: Chap. 11 : Treecompiler.sangji.ac.kr/lecture/ds/2007_2/chap11_tree.pdf · 2014-10-07 · Chap 11. 트리(Tree) kkman@sangji.ac.kr-11- 복합왼쪽-오른쪽회전 ~L-R 패턴시복합왼쪽-오른쪽회전을적용

Chap 11. 트리(Tree) - 17 [email protected]

~ 부모 노드의 자료 항목(A,B,C)과 자식 노드의 자료 항목(a,b,c,d) 는 다음 규칙 준수.

• 자식노드 a에 존재하는 자료들의 키 값은 A의 키 값보다 작다

• 자식노드 b에 존재하는 자료들의 키 값은 A의 키 값보다 크고, B의

키 값보다 작다.

• 자식노드 c에 존재하는 자료들의 키 값은 B의 키 값보다 크고, C의

키 값보다 작다.

• 자식노드 d에 존재하는 자료들의 키 값은 C의 키 값보다 크다.

Page 18: Chap. 11 : Treecompiler.sangji.ac.kr/lecture/ds/2007_2/chap11_tree.pdf · 2014-10-07 · Chap 11. 트리(Tree) kkman@sangji.ac.kr-11- 복합왼쪽-오른쪽회전 ~L-R 패턴시복합왼쪽-오른쪽회전을적용

Chap 11. 트리(Tree) - 18 [email protected]

탐색~ 이진 트리와 같은 방식으로 루트노드로부터 해당 링크를 따라가

며 노드의 키값과 비교하여 탐색

Page 19: Chap. 11 : Treecompiler.sangji.ac.kr/lecture/ds/2007_2/chap11_tree.pdf · 2014-10-07 · Chap 11. 트리(Tree) kkman@sangji.ac.kr-11- 복합왼쪽-오른쪽회전 ~L-R 패턴시복합왼쪽-오른쪽회전을적용

Chap 11. 트리(Tree) - 19 [email protected]

삽입~ 분할 없는 삽입

삽입을 위한 탐색 중 꽉찬 노드를 만나지 않은 경우 잎노드에새로운 자료를 삽입

Page 20: Chap. 11 : Treecompiler.sangji.ac.kr/lecture/ds/2007_2/chap11_tree.pdf · 2014-10-07 · Chap 11. 트리(Tree) kkman@sangji.ac.kr-11- 복합왼쪽-오른쪽회전 ~L-R 패턴시복합왼쪽-오른쪽회전을적용

Chap 11. 트리(Tree) - 20 [email protected]

삽입~ 분할 삽입

루트가 아닌 일반 노드에 대한 분할

분할되는 노드의 형제노드로 하나의 빈 노드를 생성한다. 이 생성된노드는 분할되는 노드의 오른쪽에 위치하게 된다.

자료 항목 C를 새로 생성된 노드로 이동시킨다.

자료 항목 B를 분할된 노드의 부모노드로 이동시킨다.

자료 항목 A는 그대로 둔다.

분할된 노드의 자식노드들 중 오른쪽에서부터 두 개의 노드에 대한링크를 끊고, 새로 생성된 노드의 자식으로 연결시킨다.

Page 21: Chap. 11 : Treecompiler.sangji.ac.kr/lecture/ds/2007_2/chap11_tree.pdf · 2014-10-07 · Chap 11. 트리(Tree) kkman@sangji.ac.kr-11- 복합왼쪽-오른쪽회전 ~L-R 패턴시복합왼쪽-오른쪽회전을적용

Chap 11. 트리(Tree) - 21 [email protected]

Page 22: Chap. 11 : Treecompiler.sangji.ac.kr/lecture/ds/2007_2/chap11_tree.pdf · 2014-10-07 · Chap 11. 트리(Tree) kkman@sangji.ac.kr-11- 복합왼쪽-오른쪽회전 ~L-R 패턴시복합왼쪽-오른쪽회전을적용

Chap 11. 트리(Tree) - 22 [email protected]

삽입~ 분할 삽입

루트노드에 대한 분할

새로운 루트노드를 생성한다. 이 노드는 분할되는 노드(현루트노드)의 부모가 된다.

분할되는 노드의 형제노드로 또 하나의 빈 노드를 생성한다. 이생성된 노드는 분할되는 노드의 오른쪽에 위치하게 된다.

자료 항목 C를 새로 생성된 형제 노드로 이동시킨다.

자료 항목 B를 새로운 루트노드로 이동시킨다.

자료 항목 A는 그대로 둔다.

분할된 노드의 자식노드들 중 오른쪽에서부터 두 개의 노드에 대한링크를 끊고, 새로 생성된 형제노드의 자식으로 연결시킨다.

Page 23: Chap. 11 : Treecompiler.sangji.ac.kr/lecture/ds/2007_2/chap11_tree.pdf · 2014-10-07 · Chap 11. 트리(Tree) kkman@sangji.ac.kr-11- 복합왼쪽-오른쪽회전 ~L-R 패턴시복합왼쪽-오른쪽회전을적용

Chap 11. 트리(Tree) - 23 [email protected]