๐ฉ๐ป ๊ท ํ ์ด์ง ํธ๋ฆฌ๋?
๊ท ํ ์ด์ง ํธ๋ฆฌ๋? ๋ชจ๋ ๋ ธ๋์ ์ข์ฐ ์๋ธ ํธ๋ฆฌ ๋์ด๊ฐ 1์ด์ ์ฐจ์ด ๋์ง ์๋ ํธ๋ฆฌ์ด๋ค.
โ๏ธ ์ด์ง ํ์ ํธ๋ฆฌ์ ํธํฅ ๋ฐ์
๊ฒฝ์ฐ 1) ์ด์ง ํ์ ํธ๋ฆฌ์ ์ฝ์ ๋๋ ์์ : 20 -> 10 -> 30 -> 5 ์ธ ๊ฒฝ์ฐ์๋ ๊ท ํ ์ด์ง ํธ๋ฆฌ๊ฐ ๋๋ค.
๊ฒฝ์ฐ 2) ์ด์ง ํ์ ํธ๋ฆฌ์ ์ฝ์ ๋๋ ์์ : 5 -> 10 -> 20 -> 30 ์ธ ๊ฒฝ์ฐ์๋ ์ฌํฅ ์ด์ง ํธ๋ฆฌ๊ฐ ๋๋ค.
โ๏ธ Balanced Binary Search Tree
๋ ธ๋์ ์ฝ์ ๊ณผ ์ญ์ ๊ฐ ์ผ์ด๋ ๋ ๊ท ํ์ ์ ์งํ๋๋ก ํ๋ ํธ๋ฆฌ
์ข ๋ฅ :
- AVLํธ๋ฆฌ
- Red-Black ํธ๋ฆฌ
โจ AVL ํธ๋ฆฌ
- ๋ ธ๋๊ฐ ์ฝ์ , ์ญ์ ๋ ๋ ํธ๋ฆฌ์ ๊ท ํ์ ์ฒดํฌํ๊ณ ์ ์งํ๋ ํธ๋ฆฌ
- ๊ฐ ๋ ธ๋์ BF๋ฅผ [-1, 0, 1] ๋ง ๊ฐ์ง๊ฒ ํ์ฌ ๊ท ํ์ ์ ์ง
- BF[Balance Factor]
ใด ์ผ์ชฝ ์๋ธ ํธ๋ฆฌ์ ๋์ด - ์ค๋ฅธ์ชฝ ์๋ธ ํธ๋ฆฌ์ ๋์ด
๐ซ AVLํธ๋ฆฌ์ ๋ฆฌ๋ฐธ๋ฐ์ฑ
1. ๊ท ํ์ด ๊นจ์ง ๊ฒฝ์ฐ :
- BF๊ฐ '+' ์ด๋ฉด ์ผ์ชฝ ์๋ธ ํธ๋ฆฌ์ ์ด์์ด ์์
- BF๊ฐ '-' ์ด๋ฉด ์ค๋ฅธ์ชฝ ์๋ธ ํธ๋ฆฌ์ ์ด์์ด ์์
2. ํ์ ์ฐ์ฐ :
- ๋จ์ ํ์ - LL, RR
- ์ด์ค ํ์ - LR, RL
2-1)
- LL (Left-Left)
- ํ์ 1ํ
- ์ค๋ฅธ์ชฝ ๋ฐฉํฅ์ผ๋ก ํ์
- RR (Right-Right)
- ํ์ 1ํ
- ์ผ์ชฝ ๋ฐฉํฅ์ผ๋ก ํ์
- LR (Left-Right)
- ํ์ 2ํ
- RR ํ์ ํ LL ํ์ (์ผ์ชฝ์ผ๋ก ๋ฐฉํฅ ํ์ ํ(์๋๋ถ๋ถ์) ์ค๋ฅธ์ชฝ์ผ๋ก ๋ฐฉํฅ ํ์ )
- RL (Right-Left)
- ํ์ 2ํ
- LLํ์ ํ RRํ์
โจ Red-Black ํธ๋ฆฌ
red์ black์ผ๋ก ๊ตฌ๋ถํ์ฌ (ํด๋์ค์์) ์๋์ ์กฐ๊ฑด์ ๋ฐ๋ผ ๊ท ํ์ ๋ง์ถ์ด ๋๊ฐ๋ ํธ๋ฆฌ์ด๋ค.
AVLํธ๋ฆฌ์ ๋นํด์๋ ์ง๊ด์ ์ด์ง ์๋ค.
โ๏ธ ์กฐ๊ฑด
- root ๋ ธ๋์ leaf ๋ ธ๋์ ์์ black (๋จ ์ฌ๊ธฐ์ leaf๋ ธ๋๋ ๊ธฐ์กด์ ๊ฐ๋ ๊ณผ ์ฝ๊ฐ ๋ค๋ฅด๊ฒ ์ ์ํ๋ค)
- red ์ ๋ ธ๋์ ์์์ black(double red ๋ถ๊ฐ)
- ๋ชจ๋ leaf ๋ ธ๋์์ root ๋ ธ๋๊น์ง ๊ฐ๋ ๊ฒฝ๋ก์ black๋ ธ๋ ์๋ ๊ฐ์
์กฐ๊ฑด์ด ๊นจ์ง๋ ์ํฉ์์ Rebalancing! ์ผ๋ก ๊ท ํ ์ ์ง
๐ซ Red-Black ํธ๋ฆฌ์ ์ฝ์
case1) ๋ ธ๋ ์ฝ์ ํ double red ๋ฐ์ : ๋ถ๋ชจ ๋ ธ๋์ ํ์ ๋ ธ๋๊ฐ red ์ผ๋
โ๏ธ Recoloring ์งํ :
- ์ฝ์ ํ ๋ ธ๋์ ๋ถ๋ชจ์ ๋ถ๋ชจ์ ํ์ ๋ ธ๋๋ฅผ black ์ผ๋ก ๋ณ๊ฒฝ
- ๋ถ๋ชจ์ ๋ถ๋ชจ ๋ ธ๋๋ฅผ red๋ก ๋ณ๊ฒฝ
- ๋ถ๋ชจ์ ๋ถ๋ชจ ๋
ธ๋๊ฐ root์ธ์ง double red์ธ์ง์ ๋ฐ๋ผ์
๋ธ๋์ผ๋ก ๋ ๋์ง, red๋ก ๋ณํํ ๋ฐ๋ณตํด์ ์์ ๋ ธ๋์ ๋น๊ตํด recoloring ํ ์ง ๊ฒฝ์
case2) ๋ ธ๋ ์ฝ์ ํ double red ๋ฐ์ : ๋ถ๋ชจ ๋ ธ๋์ ํ์ ๋ ธ๋๊ฐ black์ด๊ฑฐ๋ ์์ ๋
โ๏ธ Restructuring ์งํ : (ํ์ ์ฐ์ฐ)
- ์กฐ์ ๋์ : ์ฝ์ ํ ๋ ธ๋, ๋ถ๋ชจ ๋ ธ๋, ๋ถ๋ชจ์ ๋ถ๋ชจ ๋ ธ๋
- ์กฐ์ ๋์ ๋ ธ๋๋ค์ ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
- ๊ฐ์ด๋ฐ ๋ ธ๋๋ฅผ ๋ถ๋ชจ ๋ ธ๋๋ก ์ ์ ํ๊ณ black์ผ๋ก ๋ณ๊ฒฝ
- ๋๋จธ์ง ๋ ๋ ธ๋๋ฅผ ์์ ๋ ธ๋๋ก ๋๊ณ red๋ก ๋ณ๊ฒฝ
๐ซ Red-Black ํธ๋ฆฌ์ ์ญ์
โ๏ธ ์ญ์ ๋์ ๋ ธ๋๊ฐ black ์ด๊ณ ๊ทธ ์๋ฆฌ์ ์ค๋ ๋ ธ๋๊ฐ red์ธ ๊ฒฝ์ฐ
- ํด๋น ์๋ฆฌ๋ก ์ค๋ red ๋ ธ๋๋ฅผ black์ผ๋ก ๋ณ๊ฒฝ
โ๏ธ ์ญ์ ๋์ ๋ ธ๋๊ฐ black ์ด๊ณ ๊ทธ ์๋ฆฌ์ ์ค๋ ๋ ธ๋๊ฐ black์ธ ๊ฒฝ์ฐ (์ด์ค ํ์ ์ผ์ด์ค 2๊ฐ์ง ๋ฐฉ๋ฒ)
case1) "์ด์ค ํ์ ๋ ธ๋"์ ํ์ ๋ ธ๋๊ฐ black ์ด๊ณ , ํ์ ์ ์์ชฝ ์์ ๋ชจ๋ black์ธ ๊ฒฝ์ฐ
- ํ์ ๋ ธ๋๋ฅผ red๋ก ๋ณ๊ฒฝ
- ์ด์ค ํ์ ๋ ธ๋์ ๊ฒ์์ 1๊ฐ๋ฅผ ๋ถ๋ชจ ๋ ธ๋๋ก ์ ๋ฌ
- ๋ถ๋ชจ๊ฐ root๊ฐ ์๋ ์ด์ค ํ์ ๋ ธ๋๊ฐ ๋๋ฉด ํด๋น case ๋ฐ๋ณต ์งํ
case2) "์ด์ค ํ์ ๋ ธ๋"์ ํ์ ๋ ธ๋๊ฐ red์ธ ๊ฒฝ์ฐ
- ํ์ ๋ ธ๋๋ฅผ black์ผ๋ก ๋ณ๊ฒฝ
- ๋ถ๋ชจ ๋ ธ๋๋ฅผ red๋ก ๋ณ๊ฒฝ
- ๋ถ๋ชจ ๋ ธ๋๋ฅผ ๊ธฐ์ค์ผ๋ก ์ผ์ชฝ์ผ๋ก ํ์
- ๊ทธ ๋ค์ ์ด์ค ํ์ case์ ๋ฐ๋ผ ๋ฐ๋ณต ์งํ
case3-1) "์ด์ค ํ์ ๋ ธ๋"์ ํ์ ๋ ธ๋๊ฐ black์ด๊ณ , *์ค๋ฅธ์ชฝ ์์์ด red์ธ ๊ฒฝ์ฐ
- ๋ถ๋ชจ ๋ ธ๋์ ํ์ ๋ ธ๋์ ์ค๋ฅธ์ชฝ ์์ ๋ ธ๋๋ฅผ ๊ฒ์์์ผ๋ก ๋ณ๊ฒฝ
- ๋ถ๋ชจ ๋ ธ๋๋ฅผ ๊ธฐ์ค์ผ๋ก ์ผ์ชฝ์ผ๋ก ํ์
case3-2) "์ด์ค ํ์ ๋ ธ๋"์ ํ์ ๋ ธ๋๊ฐ black์ด๊ณ , *์ผ์ชฝ ์์์ด red์ธ ๊ฒฝ์ฐ
- ํ์ ๋ ธ๋๋ฅผ red๋ก ๋ณ๊ฒฝ
- ํ์ ๋ ธ๋์ ์ผ์ชฝ ์์ ๋ ธ๋๋ฅผ black์ผ๋ก ๋ณ๊ฒฝ
- ํ์ ๋ ธ๋๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฅธ์ชฝ์ผ๋ก ํ์
- ์ด์ค ํ์ 3-1 case ์งํ
โ๏ธ "Red-Black ํธ๋ฆฌ" VS "AVL ํธ๋ฆฌ"
โจ ์๊ณ ๋ฆฌ์ฆ ์๊ฐ ๋ณต์ก๋
๋ ๋ค O(logN)
โจ ๊ท ํ ์์ค
AVLํธ๋ฆฌ๊ฐ Red-Black ํธ๋ฆฌ ๋ณด๋ค ์ข ๋ ์๊ฒฉํ๊ฒ ๊ท ํ์ ์ก์
Red-Black ํธ๋ฆฌ๋ ์์ผ๋ก ๊ตฌ๋ถํ๋ ๊ฒฝ์ฐ๋ก ์ธํด ํ์ ์๊ฐ ๊ฐ์
์ค ์ฌ์ฉ์,
Tree ์ฒด๊ณ๊ฐ ์กํ ํ, ํ์์ด ๋ง์ ๊ฒฝ์ฐ์๋ AVLํธ๋ฆฌ๊ฐ ์ ๋ฆฌ
์ฝ์ , ์ญ์ ๊ฐ ๋น๋ฒํ ๊ฒฝ์ฐ์๋ Red-Blackํธ๋ฆฌ๊ฐ ์ ๋ฆฌ
'์๊ณ ๋ฆฌ์ฆ > ์๋ฃ๊ตฌ์กฐ ์ด๋ก ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ฐ์ ์์ ํ (Priority Queue) - ๋น์ ํ ์๋ฃ๊ตฌ์กฐ (0) | 2024.07.17 |
---|---|
๊ทธ๋ํ - ๋น์ ํ ์๋ฃ๊ตฌ์กฐ (0) | 2024.07.16 |
์ด์ง ํ์ ํธ๋ฆฌ (Binary search tree) BST - ์๋ฃ๊ตฌ์กฐ (0) | 2024.07.03 |
java - ๋นํธ ์ฐ์ฐ์ (0) | 2024.06.26 |
์๋ฃ๊ตฌ์กฐ ๋ชฉ๋ก (+java์์์ ์ฌ์ฉ) (0) | 2024.06.25 |