[자료구조] AVL tree

 

AVL 트리: balanced binary search tree

지난 포스팅에서 이진 탐색 트리(Binary Search Tree, BST)에 대해 알아보았다. 오늘은 BST의 단점을 보완한 AVL 트리(AVL Tree)에 대해 자세히 알아보겠다. BST는 삽입, 삭제 과정에서 트리가 한쪽으로 치우쳐 성능이 저하될 수 있다는 단점이 있었다. AVL 트리는 이러한 문제를 해결하기 위해 균형을 유지하는 규칙을 추가한 똑똑한 자료구조이다.

Balanced Search Tree

AVL 트리를 이해하기 전에 먼저 Balanced Search Tree에 대해 간략히 알아보겠다. Balanced Search Tree는 삽입, 삭제 연산 후에도 트리의 높이가 항상 O(log n)을 유지하도록 균형을 맞추는 트리다. 이를 통해 탐색, 삽입, 삭제 연산의 시간 복잡도를 항상 O(log n)으로 보장할 수 있다. 대표적인 Balanced Search Tree에는 AVL 트리, red-black 트리, B-트리 등이 있다.

Trinode Restructuring

Balanced Search Tree의 주요 연산 중 하나는 Trinode Reconstruction다. 이 연산은 삽입 또는 삭제 후 트리의 균형이 깨졌을 때, 균형을 복원하기 위해 사용한다. Trinode Reconstruction은 세 개의 노드(x, y, z)와 네 개의 서브트리(T0, T1, T2, T3)를 이용하여 트리의 구조를 변경한다.

Trinode reconstruction

AVL 트리 (Adelson-Velsky and Landis Tree)

AVL 트리는 모든 노드에 대해 왼쪽 자식과 오른쪽 자식의 높이 차이가 최대 1인 이진 탐색 트리다. 균형 조건을 통해 AVL 트리는 탐색, 삽입, 삭제 연산의 시간 복잡도를 O(log n)으로 유지할 수 있다.

AVL 트리의 삽입 (Insertion)

AVL 트리에 새로운 노드를 삽입하는 과정은 다음과 같다.

    AVL tree insertion

  1. 탐색: 먼저 이진 탐색 트리와 동일하게 삽입할 위치를 찾는다.
  2. 삽입: 새로운 노드를 외부 노드(external node)로 삽입한다.
  3. 균형 확인: 삽입된 노드의 부모 노드부터 루트 노드까지 거슬러 올라가며 각 노드의 균형을 확인한다.
  4. 재구성: 만약 균형이 깨진 노드를 발견하면, Trinode Reconstruction을 통해 균형을 복원한다.
    AVL tree balancing

AVL 트리의 삭제 (Removal)

AVL 트리에서 노드를 삭제하는 과정은 다음과 같다.

AVL tree deletion

  1. 탐색: 먼저 이진 탐색 트리와 동일하게 삭제할 노드를 찾는다.
  2. 삭제: 이진 탐색 트리의 삭제 규칙에 따라 노드를 삭제한다.
  3. 균형 확인: 삭제된 노드의 부모 노드부터 루트 노드까지 거슬러 올라가며 각 노드의 균형을 확인한다.(삭제된 노드의 부모 노드에서 불균형 발생함)
  4. 재구성: 만약 균형이 깨진 노드를 발견하면, Trinode Reconstruction을 통해 균형을 복원한다.
    AVL tree balancing

AVL 트리의 성능 (Performance)

AVL 트리는 균형을 유지하기 위한 추가적인 연산이 필요하지만, 탐색, 삽입, 삭제 연산의 시간 복잡도를 O(log n)으로 보장한다는 큰 장점이 있다. 따라서 데이터의 삽입 및 삭제가 빈번하게 발생하는 동적 데이터 환경에서 효율적인 자료구조이다.

마무리하며

이번 포스팅에서는 AVL 트리의 개념, 삽입, 삭제 과정, 그리고 성능에 대해 알아보았다. AVL 트리는 균형 잡힌 이진 탐색 트리의 대표적인 예시로, 균형을 유지하면서도 효율적인 연산을 지원한다. 다음 포스팅에서는 스플레이 트리(Splay Tree)에 대해 알아보도록 하겠다. Splay tree는 접근 지역성(locality of reference)을 활용하여 자주 접근하는 노드를 루트 노드에 가깝게 위치시키는 특징을 가지고 있다.

추천글 :
[자료구조] Sorted map & skip list

hyeon_B

안녕하세요! AI 기술을 이용해 더 나은 세상을 만들어 나가고 싶은 과기원생 Hyeon이라고 합니다. 저는 앞으로 인공지능 시대에는 지식을 '활용'하는 능력이 중요해질 것이라고 생각합니다. 대부분의 일들은 인공지능이 뛰어난 모습을 보이지만, 인공지능은 데이터로 부터 연관관계를 학습하기 때문에 지식들을 새로 통합해서 활용하는 능력이 부족합니다. 인공지능이 뉴턴 전에 만들어졌다면 사과가 떨어지는 이유에 대답하지 못했을 것이고, 아인슈타인 전에 만들어졌다면 중력이 어떻게 생기는지 설명하지 못했을 것입니다. 따라서 앞으로 우리는 '본질'을 탐구하고 그 본질로부터 다른 곳에 적용하며 인공지능을 현명하게 활용해야 할 것입니다. 함께 인공지능 시대를 준비합시다!

댓글 쓰기

다음 이전

POST ADS1

POST ADS 2