AVL 트리 - 성질/삽입방법/활용

2023. 8. 10. 15:57·CS 공부/자료구조

탄생 계기

편향 트리

 

이진탐색트리는 위 그림과 같이 한쪽으로 노드가 쏠릴 수가 있는 문제점이 있다. 10,9,8,7,6을 순서대로 삽입한다고 생각해보면 저런 형태의 트리가 만들어진다는 것을 알 수 있을 것이다. 이런 트리를 편향 트리라 하는데 이러한 형태에서 특정 값을 찾으려면 O(N)의 시간이 필요하다. 예를 들어 6을 찾으려면 모든 노드를 탐색해야지 찾을 수 있다. 따라서 성능이 매우 나빠지게 된다. 

 

 

이진 탐색 트리 (BST-Binary Search Tree)

이진 탐색 트리란? 이진탐색트리(Binary Search Tree; BST)는 정렬된 tree이다. 어느 노드를 선택하든 해당 노드의 왼쪽 서브 트리에는 그 노드의 값보다 작은 값들을 지닌 노드들로만 이루어져 있고, 오

hyolls100.tistory.com

 

이런 단점을 극복할 수 있는 자료구조가 자가균형 이진탐색트리인데 이 중 하나는 AVL트리이다. 위의 편향트리를 AVL트리로 재구성하면 다음과 같다. 이렇게 된다면 어떤 노드를 탐색하든 O(logn)으로 탐색할 수 있다. 

 

 

 

 

 

AVL 트리 성질

 

  • 이진 탐색 트리의 속성을 가진다.
  • 왼쪽, 오른쪽 서브 트리의 높이 차이가 최대 1이다. 
  • 높이 차이가 1보다 커지면 ★회전(Rotation)을 통해 균형을 맞춰 높이 차이를 줄인다. (높이 차이를 Balance Factor(BF)라 한다. BF = 왼쪽 서브트리의 높이 - 오른쪽 서브트리의 높이) 
  • 삽입, 검색, 삭제의 시간 복잡도가 O(log N)이다. (N : 노드의 개수)

 

 

회전에 대해 설명하기 전에 T1, T2..등은 서브트리를 의미하고, 회전의 기준은 z노드라고 가정한다. 

 

 

우회전 (Right Rotation)

 

 

 

1. y노드의 오른쪽 자식 노드를 z노드로 변경한다.
2. z노드 왼쪽 자식 노드를 y노드의 오른쪽 서브트리(T2)로 변경한다.

 

 

 

좌회전 (Left Rotation)

 

 

1. y노드의 왼쪽 자식 노드를 z노드로 변경한다.
2. z노드 오른쪽 자식노드를 y노드의 왼쪽 서브트리(T2)로 변경한다.

 

 

 

AVL 트리는 LL, LR, RL, RR 4가지의 균형이 무너진 경우가 존재한다. 각각 해결법을 설명한다.

 

 

 

LL (Left Left)

 

위 그림처럼 BF가 -1~1을 벗어난 노드를 기준으로 왼쪽, 왼쪽 노드가 존재한다면 LL Case이다.

이때 해당 노드를 기준으로 우회전을 적용하면 불균형이 해소된다.

 

 

 

RR (Right Right)

 

 

 

위 그림처럼 BF가 -1~1을 벗어난 노드를 기준으로 오른쪽, 오른쪽 노드가 존재한다면 RR Case이다.

이때 해당 노드를 기준으로 좌회전을 적용하면 불균형이 해소된다.

 

 

 

LR (Left Right)

 

 

 

위 그림처럼 BF가 -1~1을 벗어난 노드를 기준으로 왼쪽, 오른쪽 노드가 존재한다면 LR Case이다.

이때 먼저 BF에 이상이 있는 노드(값이 4인노드)의 왼쪽 자식노드(값이 2인 노드)를 기준으로 좌회전을 진행한다.

이후 BF에 이상이 있는 노드(값이 4인 노드)를 기준으로 우회전을 진행하면 불균형이 해소된다.

 

 

 

RL (Right Left)

 

 

 

위 그림처럼 BF가 -1~1을 벗어난 노드를 기준으로 오른쪽(Right), 왼쪽(Left) 노드가 존재한다면 RL Case이다.

이때 먼저 BF에 이상이 있는 노드(값이 4인노드)의 오른쪽 자식노드(값이 4인 노드)를 기준으로 우회전을 진행한다.

이후 BF에 이상이 있는 노드(값이 4인 노드)를 기준으로 좌회전을 진행하면 불균형이 해소된다.

 

 

 

활용

 

1) 데이터베이스 시스템에서 쿼리 실행 계획을 생성하는 인덱스 구조를 작성할 때

2) 자연어 처리 분야에서 문자열 검색 및 검색 결과의 정확도 개선이 필요할 때

3) 게임 개발에서 오브젝트와의 충돌을 일관성있게 검사할 때 

 

AVL 트리는 삽입과 삭제, 검색이 모두 O(logn)에 이루어지지만,

트리의 구현이 어렵고 균형 트리에 최적화된 B-tree가 존재하기에 상대적으로 덜 사용되고 있다.

 


 

※ AVL트리 시뮬레이터

 

AVL Tree Visualzation

 

www.cs.usfca.edu

 

 

 

 

 

'CS 공부 > 자료구조' 카테고리의 다른 글

AVL 트리 & Red-Black 트리 비교  (0) 2023.08.11
RB(Red-Black) 트리 - 성질/삽입방법/활용  (0) 2023.08.11
이진 탐색 트리 (BST-Binary Search Tree)  (0) 2023.08.10
트리(Tree)의 순회 (전위/중위/후위 순회)  (0) 2023.08.10
여러 종류의 트리(Tree) 정리 (이진 트리, 전 이진 트리, 완전 이진 트리, 포화 이진 트리, 이진 탐색 트리)  (0) 2023.08.09
'CS 공부/자료구조' 카테고리의 다른 글
  • AVL 트리 & Red-Black 트리 비교
  • RB(Red-Black) 트리 - 성질/삽입방법/활용
  • 이진 탐색 트리 (BST-Binary Search Tree)
  • 트리(Tree)의 순회 (전위/중위/후위 순회)
횰쓰
횰쓰
개발 성장 블로그입니다
  • 횰쓰
    횰쓰토리
    횰쓰
  • 전체
    오늘
    어제
    • 분류 전체보기
      • CS 공부
        • 운영체제
        • 네트워크
        • 컴퓨터구조
        • 데이터베이스
        • 알고리즘
        • 소프트웨어공학
        • 자료구조
        • 웹
      • 프로그래밍
        • Python
        • NodeJS
      • 개발도구
        • Git
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    AVL트리
    Max힙
    Push-force
    페이지 교체
    스택
    자가균형 이진탐색트리
    Min힙
    전이진트리
    4 way handshake
    chrome
    멀티 프로세스
    RB트리
    Sync/Async
    멀티 스레드
    카드뭉치
    이진탐색트리
    운영체제
    경쟁상태(Race Condition)
    프로세스 주소공간
    3 Way Handshake
    tcp
    큐
    SQL/NOSQL
    Git
    둘만의 암호
    리스트정렬여부
    최태성인강
    포화이진트리
    한국사능력검정시험 심화
    RB Tree
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
횰쓰
AVL 트리 - 성질/삽입방법/활용
상단으로

티스토리툴바