학습개요
삽입, 삭제 연산을 보다 효과적으로 작업하기 위해 만든 이진 탐색 트리에 대한 정의와 이진 트리와 같이 순회 방법에 대해서도 학습하게 됩니다. 이진 탐색 트리에서는 각 노드를 식별하기 위해서 별도의 이름을 붙여준 키(key)라는 용어를 사용합니다. 노드의 데이터라고 생각해도 됩니다.
정해진 노드()를 기준으로 왼쪽 서브 트리에 있는 모든 노드는 의 킷값보다 값이 작아야 하고, 오른쪽 서브 트리의 노드들은 의 킷값보다 값이 커야 한다는 조건을 만족하는 이진 트리를 이진 탐색 트리 즉 BS 트리라 합니다. 균형 잡힌 트리로 Splay, AVL, BB 트리가 있습니다.
Splay 연산을 적용한 Splay 트리가 있습니다. 최근에 사용한 노드 x를 다음에도 사용할 수 있다는 가정하에 노드 x를 루트에 위치시켜 트리를 재구성합니다. AVL 트리는 노드 의 왼쪽 서브트리 높이와 의 오른쪽 서브트리 높이가 최대 1만큼 차이가 난다는 조건을 만족하는 트리입니다.
무게가 균형 잡힌 트리란 각 노드의 양쪽 서브트리 무게가 균형을 유지하는 트리입니다. 이 트리를 BB-트리(bound-balanced)라고 부릅니다. AVL 또는 BB 트리에 대하여 각각 높이 또는 크기 제한 조건을 만족시키는데 드는 비용은 트리를 완전히 균형 잡히게 유지하는 비용이나 노력보다 훨씬 작기 때문에 사용됩니다.
학습목표
- 이진 탐색 트리의 정의와 순회, 탐색 방법을 이해할 수 있다.
- 이진 탐색 트리의 삽입 및 삭제 방법을 이해할 수 있다.
- Splay 트리의 개념과 연산 방법을 이해할 수 있다.
- AVL 트리의 개념과 조건을 이해할 수 있다.
- BB 트리의 개념을 이해할 수 있다.
연습문제
- 빠르게 탐색할 수 있도록 구성한 이진트리는 무엇인가 ?
- BB 트리
- AVL 트리
- 이진 선택 트리
- 이진 탐색 트리
–
- Splay 트리에 대한 설명은 무엇인가 ?
- 승자 트리
- 패자 트리
- 자주 탐색하는 키를 가진 노드를 루트에 가깝게 위치하도록 구성한 이진 탐색 트리
- 이진 정렬
–
- 트리의 무게는 무엇인가 ?
- 차수가 2인 노드의 갯수
- 루트부터 입 노드까지의 경로에 존재하는 노드의 갯수
- 트리에 속한 잎 노드의 개수
- 같은 부모에 대한 자식의 높이 차이
정리하기
- 트리에 특정 데이터가 있는지를 검색하고, 노드를 자주 삽입, 삭제하는 응용 문제에 가장 효과적인 이진 트리는 이진 탐색 트리(binary search tree)입니다.
- 키는 각 노드를 식별하기 위해서는 별도의 간단한 이름을 붙여준 것으로 노드의 데이터라고 생각할 수 있습니다.
- 이진 탐색 트리는 전위 순회, 중위 순회 및 후위 순회로 모든 정점을 차례로 순회할 수 있고 트리 내의 특정 정점을 탐색할 수도 있습니다.
- 이진 탐색 트리에서 새 노드는 항상 잎으로 삽입합니다. 즉, 루트부터 킷값을 비교하며 자기가 삽입될 위치가 왼쪽이냐 오른쪽이냐를 정하며 내려갑니다.
- Splay 트리는 자주 탐색하는 키를 가진 노드를 루트에 가깝게 위치하도록 구성한 이진 탐색 트리입니다.
- Splay 트리는 Splay 연산을 적용하여 최근에 사용하려고 접근한 노드 x를 루트에 위치시켜 트리를 재구성합니다.
- AVL 트리는 노드 의 왼쪽 서브트리 높이와 의 오른쪽 서브트리 높이가 최대 1만큼 차이가 난다는 조건을 만족하는 트리입니다.
- 트리의 높이란 노드가 가질 수 있는 가장 높은 레벨에 1을 더한 값으로 루트로부터 잎까지 가장 긴 경로 길이를 말합니다.
- 트리의 무게는 트리에 속한 잎 노드의 개수로 정의합니다.
- 무게가 균형 잡힌 트리란 각 노드의 양쪽 서브트리 무게가 균형을 유지하는 트리입니다. 이 트리를 무게가 균형 잡힌 트리(weight-balanced tree) 또는 BB-트리(bound-balanced)라고 부릅니다.
- AVL 또는 BB 트리에 대하여 각각 높이 또는 크기 제한 조건을 만족시키는데 드는 비용은 트리를 완전히 균형 잡히게 유지하는 비용이나 노력보다 훨씬 작습니다.
- 삽입이나 삭제 후에 트리를 완전히 균형 잡히게 유지하기 위해서는 Ο(n)개의 노드를 옮겨야 하는 반면에 AVL 또는 BB 트리는 Ο(log₂n)개의 노드를 옮기면 되는 것으로 알려졌습니다.