[์๋ฃ๊ตฌ์กฐ] AVLํธ๋ฆฌ (AVL Tree)
์ด์ง๊ฒ์ํธ๋ฆฌ๋ ์ ์ฅ๊ณผ ๊ฒ์์ ํ๊ท Θ(log n)์๊ฐ์ด ์์๋์ง๋ง ์ด์ด ๋์๋ฉด ํธ๋ฆฌ์ ๋ชจ์์ด ๊ท ํ์ ์ ์ด๋ฃจ์ง ๋ชปํ๋ค. ๊ท ํ์ด ๋ง์ด ๊นจ์ง๋ฉด Θ(n)์ ๊ทผ์ ํ ์๊ฐ์ด ์์๋ ์๋ ์๋ค. ๊ทธ๋์ ๊ณ ์ํด ๋ธ ๊ฒ์ด **๊ท ํ์กํ ์ด์ง๊ฒ์ํธ๋ฆฌ(Balanced Binary Search Tree)**์ด๋ค. ๊ท ํ์กํ ์ด์ง๊ฒ์ํธ๋ฆฌ๋ ์ต์ ์ ๊ฒฝ์ฐ์๋ ์ด์งํธ๋ฆฌ์ ๊ท ํ์ด ์ ๋ง๋๋ก ์ ์งํ๋ค. ๊ท ํ์กํ ์ด์ง๊ฒ์ํธ๋ฆฌ๋ก ๋ํ์ ์ธ ๊ฒ์ AVLํธ๋ฆฌ์ ๋ ๋๋ธ๋ํธ๋ฆฌ๋ค.
AVL Tree
Adelson-Velsky and Landis Tree
๊ทน๋จ์ ์ผ๋ก๋ n๊ฐ์ ๋ ธ๋๊ฐ ํฌ๊ธฐ ์์ผ๋ก ์ผ๋ ฌ๋ก ๋์ด๋จ๋ ค์ ธ ๋์ด ๋ํ n์ด ๋๋ ๊ฒฝ์ฐ๋ ์ด์ง ํ์ ํธ๋ฆฌ์ ํด๋น๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ์ด์ง ํ์ ํธ๋ฆฌ์ ๊ณ์ฐ๋ณต์ก์ฑ์ O(n)์ด ๋๋๋ฐ, ์ด๊ฒ์ผ๋ก๋ ํ์ ์๋๊ฐ O(logn)์ผ๋ก ๋น ๋ฅธ ์ด์ง ํ์์ ๊ณ์นํ๋ค๊ณ ๋ณด๊ธฐ ์ด๋ ต๋ค.
์ด์ง ํธ๋ฆฌ์ ๋์ด๊ฐ ํญ์ O(log n)์ด๋ฉด, ํ์ ํธ๋ฆฌ ๊ธฐ๋ฅ์ ๋ํด O(log n)์ ์ฑ๋ฅ์ ๋ณด์ฅํ ์ ์๋ค.
Worst-case์ ๋์ด๊ฐ O(log n)์ธ ํธ๋ฆฌ๋ฅผ balanced tree๋ผ๊ณ ํ๋ค. balanced tree์ ์๋ก ์ด์งํ์ํธ๋ฆฌ์ ์ผ์ข ์ธ AVL Tree๊ฐ ์๋ค.
1. AVL Tree
- ์ด์งํธ๋ฆฌ
- ๋ง์ฝ T๊ฐ ์ผ์ชฝ, ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ๋ก TL๊ณผ TR์ ๊ฐ์ง ๋น์ด์์ง ์์ ์ด์ง ํธ๋ฆฌ๋ผ๋ฉด, T๋ AVLํธ๋ฆฌ์ด๋ค.
- TL๊ณผ TR์ AVL ํธ๋ฆฌ์ด๋ฉฐ,
- hL๊ณผ hR์ ๊ฐ๊ฐ TL๊ณผ TR์ ๋์ด์ผ ๋, ๋ค์๊ณผ ๊ฐ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ค.
2. AVL Search Tree
: AVL Search Tree๋ AVLํธ๋ฆฌ์ด๊ธฐ๋ ํ ์ด์ง ํ์ ํธ๋ฆฌ์ด๋ค.
AVL Tree์ ํน์ง
- ๋ ธ๋๊ฐ n๊ฐ์ธ AVL ํธ๋ฆฌ์ ๋์ด๋ O(log n)์ด๋ค.
- ๋ชจ๋ n์ ๊ฐ์ ๋ํ์ฌ n ≥ 0์ด๋ฉด AVL ํธ๋ฆฌ๊ฐ ์กด์ฌํ๋ค.
- ๋ ธ๋๊ฐ n๊ฐ์ธ AVL Search Tree๋ O(height)=O(log n)์๊ฐ์ ํ์ํ ์ ์๋ค.
- ๋ ธ๋๊ฐ n๊ฐ์ธ AVL Search Tree์ ์ ๋ ธ๋๋ฅผ ์ฝ์ ํ์ฌ n+1๊ฐ ๋ ธ๋์ AVL ํธ๋ฆฌ๋ฅผ ๋ง๋ค ์ ์๊ณ , ์ด ๋์ ์ฝ์ ์ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ O(log n)์ด๋ค.
- n>0, ๋ ธ๋๊ฐ n๊ฐ์ธ AVL Search Tree์์ ๋ ธ๋๋ฅผ ์ญ์ ํ๋ฉด ๋ ธ๋๊ฐ n-1๊ฐ์ธ AVL ํธ๋ฆฌ๊ฐ ๋๊ณ , ์ญ์ ์ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ O(log n)์ด๋ค.
Balance Factor
๊ท ํ ์ธ์
- AVL tree๋ ์ผ๋ฐ์ ์ผ๋ก linked representation์ ์ฌ์ฉํ์ฌ ํํํ๋ค.
- ์ฝ์ ๋ฐ ์ญ์ ๋ฅผ ์ฉ์ดํ๊ฒ ํ๊ธฐ ์ํด ๊ท ํ์ธ์(**balance factor)**๊ฐ ๊ฐ ๋ ธ๋์ ์ฐ๊ฒฐ๋๋ค.
- ๋ ธ๋ x์ ๊ท ํ ์ธ์์ธ **bf(x)**๋ height(x→leftChild) – **height(x→rightChild)**๋ก ์ ์๋๋ค.
- AVL ํธ๋ฆฌ์์ ๊ฐ ๋ ธ๋์ ๊ท ํ ๊ณ์๋ -1์ด๋ 0์ด๋ 1์ด์ด์ผ ํ๋ค.
AVL Search Tree์ ํ์ฉ
๐ ํ์
์ผ๋ฐ ์ด์ง ํ์ ํธ๋ฆฌ์ ํ์ ์ฐ์ฐ์ผ๋ก ์ํํ๋ค.
- ์๊ฐ ๋ณต์ก๋ : O(log n)
๐ ์ฝ์
AVL ํ์ ํธ๋ฆฌ์ ์์๋ฅผ ์ฝ์ ํ๋ค๋ณด๋ฉด ํธ๋ฆฌ์ ๊ท ํ์ด ๋ง์ง ์์ AVLํธ๋ฆฌ๊ฐ ์๋๊ฒ ๋ ์๋ ์๋ค. ์ด๋ ๋ฏ ํธ๋ฆฌ๊ฐ ๋ถ๊ท ํ ์ํ๊ฐ ๋๋ฉด ๊ท ํ์ ํ๋ณตํ๊ธฐ ์ํด ํธ๋ฆฌ๋ฅผ ์กฐ์ ํด์ผ ํ๋ค. ์ด ์กฐ์ ์ ํ์ (rotation)์ด๋ผ๊ณ ํ๋ค.
Imbalance Types
๋ถ๊ท ํ ์ ํ. ์ฝ์ ํ, ๋ ธ๋ A์ ๊ท ํ ์ธ์๊ฐ -2 ๋๋ 2์ผ ๋, ๋ ธ๋ A๋ ๋ค์ ๋ค ๊ฐ์ง ๋ถ๊ท ํ ์ ํ ์ค ํ๋์ด๋ค.
1) LL : ์ ๋ ธ๋๊ฐ A์ ์ผ์ชฝ ํ์ ํธ๋ฆฌ์ ์ผ์ชฝ ํ์ ํธ๋ฆฌ์ ์๋ค.
2) LR : ์ ๋ ธ๋๊ฐ A์ ์ผ์ชฝ ํ์ ํธ๋ฆฌ์ ์ค๋ฅธ์ชฝ ํ์ ํธ๋ฆฌ์ ์๋ค.
3) RR : ์ ๋ ธ๋๊ฐ A์ ์ค๋ฅธ์ชฝ ํ์ ํธ๋ฆฌ์ ์ค๋ฅธ์ชฝ ํ์ ํธ๋ฆฌ์ ์๋ค.
4) RL : ์ ๋ ธ๋๊ฐ A์ ์ค๋ฅธ์ชฝ ํ์ ํธ๋ฆฌ์ ์ผ์ชฝ ํ์ ํธ๋ฆฌ์ ์๋ค.
๐๐ป (์ฝ์ ํ) ๋ถ๊ท ํ AVL ํธ๋ฆฌ์ ๊ท ํ์ ๋ง์ถ๊ธฐ ์ํด LL, RR, LR, RL ํ์ ์ค ํ๋๋ฅผ ์ํํ๋ค.
Rotation
1. Single Rotation
์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ์ single rotation์ ๋ ธ๋A์ B์ ์์น๋ฅผ ๋ฐ๊พธ์ด ์ฃผ๊ณ ์๋ธ ํธ๋ฆฌ๋ค์ ์ ๋ฆฌํ๋ฉด ๊ท ํ ํธ๋ฆฌ๋ก ๋ง๋ค ์ ์๋ค.
1) LL Rotation
๋ฃจํธ๋ ธ๋๋ฅผ ์์๋ ธ๋์ ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ๋ก ๋ถ์ด๋ฉด ๋๋ค. ์ค๋ฅธ์ชฝ์ผ๋ก ํ์ ์ํค๋ ๋ชจ์์ด๋ค. ์์๋ ธ๋์ ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ๊ฐ ์์ ์ ์์ผ๋ฏ๋ก ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ๋ ๋ฃจํธ๋ ธ๋์ ์ผ์ชฝ ์๋ธํธ๋ฆฌ์ ์ฐ๊ฒฐ์ํจ๋ค.
2) RR Rotation
๋ฃจํธ๋ ธ๋๋ฅผ ์์๋ ธ๋์ ์ผ์ชฝ ์๋ธํธ๋ฆฌ๋ก ๋ถ์ด๋ฉด ๋๋ค. ์ผ์ชฝ์ผ๋ก ํ์ ์ํค๋ ๋ชจ์์ด๋ค. ์์๋ ธ๋์ ์ผ์ชฝ ์๋ธํธ๋ฆฌ๊ฐ ์์ ์ ์๋ค. ์ด ์ผ์ชฝ ์๋ธํธ๋ฆฌ๋ฅผ ๋ฃจํธ ๋ ธ๋์ ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ๋ก ๋ง๋ ๋ค.
2. Double Rotation
์ฝ๊ฒ ์ค๋ช ํ์๋ฉด, Single Rotation์ ๋ ๋ฒ ํ๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค.
1) LR Rotation
: ๋ถ๋ถ์ RRํ์ ์ ์ด์ด์ LLํ์
2. RL Rotation
: ๋ถ๋ถ์ LLํ์ ์ ์ด์ด์ RRํ์
๐ ์ญ์
- ์ฝ์ ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก, ๋ ธ๋๋ฅผ ์ญ์ ํด๋ ๋ถ๊ท ํ์ด ๋ฐ์ํ ์ ์๋ค.
- ์ญ์ ๋ก ์ธํ ๊ท ํ ์ฌ์กฐ์ ์๋ ํ์ (Rotation)์ด ํ์ํ๋ค
- ์ญ์ ๋ก ์ธํ ๋ถ๊ท ํ์ R0, R1, R-1, L0, L1, L-1๋ก ๋ถ๋ฅ๋๋ค.
- R1 Rotation
- R0 Rotation
- R-1 Rotation