AVL Tree

2024. 6. 20. 10:05·CS 지식/자료구조

AVL Tree Idea

Search Performance

직관

  • 왼 / 오 무게가(개수가) 비슷하면 성능이 좋을 것이다. (log n과 n은 매우 큰 차이 ..!!)
  • 6이 root에 있는 한 해결불가 > 루트가 바뀌는건 필수적임
  • if) 4가 루트가 되면 6의 왼쪽 child가 비어서 포인터만 이동하면 child 2개로 조정할 수 있다. 

 

AVL Tree Definition

  • L: left sub tree 높이
  • R: right sub tree 높이

> 각각의 노드는 L과 R인 두개의 label을 가진다.

조건: l L-R l <2 즉, L-R = 0, 1, -1 중 하나

 

> 만약 AVL Tree의 노드가 n개라면 높이는 O(lonN)이 된다.

더보기

l L-R l < 2가 모든 노드에서 성립하려면 노드 개수가 많아짐

→ 높이가 상대적으로 낮음

 

  • Down Sequence Definition
    • LLRLRRLLRL..L과 R의 string
    • 루트에서부터의 움직임을 나타낸 것 (path) 
  • Terminated Down Sequence
    • 끝까지(더이상 못 갈때까지) 감
    • 여기서는 빨간색으로 표시할 예정 

Proof

Idea

All Terminated Sequences

terminated sequence와 R, L label 들을 나타낸 것 

 

observation

  • 가장 긴 sequence는 가장 짧은 것의 약 2배이다.
  • 가장 짧은 sequence위쪽의 모든 레벨은 노드가 존재한다. (빈 곳이 없다.) 
    • 가능한 모든 노드가 존재한다. 

조건을 만족하려면 longest과 shortest의 label은 각각 위와 같은 상황을 만족시킨다.

  • longest: label이 1씩 감소한다.
  • shortest: label이 2씩 감소한다. (최대 차이가 2임) 

Count the nodes

  • 루트에서 가장 큰 label이 k일 때, 트리의 높이는 k+1 이다.
  • shortest terminated down sequence는 k/2 이다. (longest 와 shortest가 약 2배 차이)
  • 즉, 최소한 2^(k/2)개의 노드가 존재한다는 것이다.
    • 2^(k/2) <= N <= 2^k
    • 2^(k/2) <= N은 k/2 <= log N 을 뜻한다. 즉 k = O(logN)

Insert

Algorithm

  • leaf에 노드를 추가한다. 
    • 일단 트리 모양을 해치치 않는 선에서 insert
  • 위로 올라가면서 label을 다시 계산한다.
  • label 조건이 깨지는 가장 첫 노드에서, ROTATION을 진행한다.
  • 끝!

1st Node to Break the Condition

조건이 깨지려면 k쪽에서 insert가 일어나야 한다.

∵ k-1에서 insert가 일어나면 label이 (k-1) + 1 = k 로 해당 노드의 label이 k, k 로 바뀐다.

   label 조건을 만족하므로 따로 바꿀 필요 없음

 

case LL

D근방..밑... 어딘가에서 insert된 것

 

solution ) 

  • B를 루트로 올린다.
    • B는 (k,k) : 왼쪽엔 새로운 insert된 노드가 추가되고, 오른쪽엔 밑으로 내려간 A가 추가 된다. 
  • A는 B의 오른쪽 child가 된다.
    • A(k-1, k-1) 로 바뀐다. 

 

case LL rotation 후

case LR

E근방..밑... 어딘가에서 insert된 것

case LR의 문제상황과 solution

solution)

  • E를 위로 올린다. (루트로 만든다.)
    • E(k,k)
  • B는 E의 왼쪽 child
    • B(k-1, k-1) 혹은 (k-1, k-2)
  • A는 E의 오른쪽 chile
    • A(k-2, k-1) 혹은 (k-1, k-1)

'CS 지식 > 자료구조' 카테고리의 다른 글

[한 권으로 끝내는 코딩테스트 with 파이썬] Chapter2. 자료 구조  (0) 2025.01.16
Union Find & an Application  (1) 2024.06.20
Priority Queue & an Application  (1) 2024.06.20
'CS 지식/자료구조' 카테고리의 다른 글
  • [한 권으로 끝내는 코딩테스트 with 파이썬] Chapter2. 자료 구조
  • Union Find & an Application
  • Priority Queue & an Application
JYUN_
JYUN_
예비 개발자 성장기록
  • JYUN_
    데브 스토리
    JYUN_
  • 전체
    오늘
    어제
    • 분류 전체보기 (88)
      • AWS & 클라우드 컴퓨팅 (1)
        • AWS (2)
      • AI & ML (17)
        • 딥러닝 (3)
        • 인공지능 기초 (2)
        • 자연어 처리 (3)
        • 컴퓨터 비전 (8)
      • CS 지식 (9)
        • 알고리즘 (1)
        • 자료구조 (4)
        • 지식확장 (1)
        • 컴퓨터 네트워크 (3)
      • 백엔드 (22)
        • Node.js (12)
        • Spring (9)
      • 웹 프론트엔드 (21)
        • HTML (3)
        • React (7)
        • 바닐라 JavaSctipt (11)
      • 코딩 테스트 & 문제 해결 (10)
        • 코딩 테스트 연습 (9)
        • 실전 문제 풀이 (1)
      • 트러블 슈팅 (1)
      • 기타 (4)
        • 개인 지식 관리 (1)
        • 외부 활동 (0)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
JYUN_
AVL Tree
상단으로

티스토리툴바