์ถ์ฒ
ChatGPT
CS USFCA Visualization : ๋ ๋-๋ธ๋ ํธ๋ฆฌ ๊ทธ๋ฆผ ์์
๋ ๋-๋ธ๋ ํธ๋ฆฌ(Red-Black Tree)๋ ์๊ฐ ๊ท ํ ์ด์ง ํ์ ํธ๋ฆฌ(Self-Balancing Binary Search Tree)๋ก, ๋ ธ๋๋ค์ด ๋ ๋์ ๋ธ๋์ผ๋ก ์์น ๋์ด ํธ๋ฆฌ์ ๊ท ํ์ ์ ์งํ๋ค. ๋ ๋-๋ธ๋ ํธ๋ฆฌ๋ ์ฝ์ , ์ญ์ ์ ๊ฐ์ ์ฐ์ฐ ํ์๋ ํธ๋ฆฌ๊ฐ ํ์ชฝ์ผ๋ก ์น์ฐ์น์ง ์๋๋ก ์ค๊ณ๋์ด, ์ด์ง ํ์ ํธ๋ฆฌ์ ์ฑ๋ฅ์ ๋ณด์ฅํ๋ค.
- ๊ด๋ จ ๊ธ -> [์๋ฃ ๊ตฌ์กฐ] ์๊ฐ ๊ท ํ ์ด์ง ํ์ ํธ๋ฆฌ Self-Balancing Binary Search Tree
- ๊ด๋ จ ๊ธ -> [์๋ฃ ๊ตฌ์กฐ] ์ด์ง ํ์ ํธ๋ฆฌ Binary search Tree, BST
๋ ๋-๋ธ๋ ํธ๋ฆฌ๋ ์๊ฐ ๊ท ํ์ ์ ์งํ๊ธฐ ๋๋ฌธ์ ํ์, ์ฝ์ , ์ญ์ ์ฐ์ฐ์ ์๊ฐ ๋ณต์ก๋๊ฐ ์ต์ ์ ๊ฒฝ์ฐ์๋ O(log n)์ผ๋ก ์ ์ง๋๋ค.
๋ ๋-๋ธ๋ ํธ๋ฆฌ์ ๊ท์น
๋ ๋-๋ธ๋ ํธ๋ฆฌ๋ ํน์ ํ ๊ท์น์ ๋ฐ๋ผ์ผ๋ง ๊ท ํ์ ์ ์งํ๋ค. ์ด ๊ท์น๋ค์ ํตํด ํธ๋ฆฌ์ ๋์ด๊ฐ ์ ํ๋๊ณ , ์ฐ์ฐ ์ฑ๋ฅ์ ์ ์งํ ์ ์๋ค.
- ๊ฐ ๋ ธ๋๋ ๋ ๋ ๋๋ ๋ธ๋์ด๋ค
- ๋ฃจํธ ๋ ธ๋๋ ๋ธ๋์ด๋ค.
- ๋ชจ๋ ๋ฆฌํ ๋
ธ๋๋ ๋ธ๋์ด๋ค.
- ๋ฆฌํ ๋ ธ๋, ์ฆ ํธ๋ฆฌ ๋์ ์๋ ๋ ธ๋(์ผ๋ฐ์ ์ผ๋ก null๋ก ํํ๋)๋ ๋ธ๋์ด๋ค.
- ๋ ๋ ๋
ธ๋์ ์์ ๋
ธ๋๋ ๋ฐ๋์ ๋ธ๋์ด์ด์ผ ํ๋ค.
- ๋ ๋ ๋ ธ๋๋ ์ฐ์์ ์ผ๋ก ์ฌ ์ ์๋ค.
- ๋ชจ๋ ๊ฒฝ๋ก์์ ๋ฆฌํ ๋
ธ๋(NIL)๊น์ง์ ๋ธ๋ ๋
ธ๋ ์๋ ๋์ผํ๋ค.
- ๋ชจ๋ ๊ฒฝ๋ก์์ ๋ฆฌํ ๋ ธํธ๊น์ง์ ๋ธ๋ ๋ ธ๋ ์(๋ธ๋ ๋์ด)๋ ๋์ผํด์ผ ํ๋ค.
์ด ๊ท์น์ ํธ๋ฆฌ๊ฐ ๊ท ํ์ ์ ์งํ๋๋ก ๋ณด์ฅํ๋ฉฐ, ์ฝ์ ๋ฐ ์ญ์ ์์ ํ์๋ ํธ๋ฆฌ๊ฐ ๊ท ํ ์ํ๋ฅผ ์ ์งํ๋๋ก ๋์์ค๋ค.
NIL ๋ ธ๋
NIL์ ๋ ๋-๋ธ๋ ํธ๋ฆฌ(Red-Black Tree)์์ ๋ฆฌํ ๋ ธ๋(leaf node)๋ฅผ ๋ํ๋ด๋ ํน๋ณํ ๋ ธ๋์ด๋ค.
๋ ๋-๋ธ๋ ํธ๋ฆฌ์์ ๋ชจ๋ ๋ฆฌํ ๋ ธ๋๋ ์ค์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ์ง ์๋ NIL ๋ ธ๋๋ก ์ฒ๋ฆฌ๋๋ค. ์ด ๋ ธ๋๋ ํธ๋ฆฌ์ ๋์ ๋ํ๋ด๋ฉฐ, ์์์ด ์๋ ๋ ธ๋๋ค์ ์์ ๋ ธ๋ ์ญํ ์ ํ๋ค. ๋ํ ๋ชจ๋ ๋ฆฌํ ๋ ธ๋(NIL ๋ ธ๋)๋ ํญ์ ๊ฒ์์์ผ๋ก ์ค์ ๋๋ค. ์ด๋ ๊ฒ ํ๋ ์ด์ ๋ ํธ๋ฆฌ์ ๊ท ํ์ ์ ์งํ๊ณ , ํธ๋ฆฌ์ ๊ท ํ ์กฐ๊ฑด์ ๋ง์กฑ์ํค๊ธฐ ์ํด์์ด๋ค.
NIL ๋ ธ๋์ ์ญํ
1. ๊ท ํ ์ ์ง
๋ ๋-๋ธ๋ ํธ๋ฆฌ๋ ์ค์ค๋ก ๊ท ํ์ ์ ์งํ๊ธฐ ์ํด ๋ฆฌํ ๋ ธ๋๋ฅผ ๋ชจ๋ ๊ฒ์์์ผ๋ก ์ฒ๋ฆฌํ๊ณ , ๋น์ด ์๋ ์์ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋ NIL ๋ ธ๋๋ฅผ ์ฌ์ฉํ๋ค.
2. ํธ๋ฆฌ์ ์ ์
๋ชจ๋ ๋ ธ๋์์ ๋ฆฌํ ๋ ธ๋๋ก ๊ฐ๋ ๊ฒฝ๋ก์๋ ๊ฐ์ ์์ ๊ฒ์์ ๋ ธ๋๊ฐ ์์ด์ผ ํ๋ ์กฐ๊ฑด์ด ์๊ธฐ ๋๋ฌธ์, ์์์ด ์๋ ๋ ธ๋๋ ๋ฐ๋์ ๊ฒ์์์ธ NIL ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
๋ ๋-๋ธ๋ ํธ๋ฆฌ์ ๋์
๋ ๋-๋ธ๋ ํธ๋ฆฌ๋ ์ฝ์ ๋ฐ ์ญ์ ์ฐ์ฐ์ ํตํด ์๋์ผ๋ก ๊ท ํ์ ์ ์งํ๋ฉฐ, ์ด๋ฌํ ์ฐ์ฐ์ ๋ค์๊ณผ ๊ฐ์ ์ ์ฐจ๋ฅผ ํฌํจํ๋ค.
1. ์ฝ์
์ ๋ ธ๋๋ ์ฒ์์ ๋ ๋๋ก ์ฝ์ ๋๋ค.
์ฝ์ ํ, ํธ๋ฆฌ๋ ๋ ๋-๋ธ๋ ํธ๋ฆฌ์ ๊ท์น์ ์๋ฐํ ์ ์์ผ๋ฏ๋ก, ์ด๋ฅผ ์์ ํ๊ธฐ ์ํ ์ฌ์กฐ์ ๋ฐ ์์ ๋ณ๊ฒฝ ์ฐ์ฐ์ด ์ํ๋๋ค.
ํ์ํ ๊ฒฝ์ฐ, ๋ ธ๋์ ์์์ ๋ณ๊ฒฝํ๊ฑฐ๋, ํ์ (์ข์ธก ํ์ , ์ฐ์ธก ํ์ )์ ์ํํด ๊ท ํ์ ์ ์งํ๋ค.
2. ์ญ์
์ญ์ ํ ๋ ธ๋๊ฐ ๋ธ๋์ธ ๊ฒฝ์ฐ, ํธ๋ฆฌ์ ๋ธ๋ ๋์ด๋ฅผ ์ ์งํ๊ธฐ ์ํด ์ถ๊ฐ์ ์ธ ์กฐ์ ์ด ํ์ํ๋ค
์ญ์ ํ, ๋ ธ๋์ ์์ ๋ณ๊ฒฝ ๋ฐ ํ์ ์ ํตํด ํธ๋ฆฌ์ ๊ท ํ์ ๋ณต์ํ๋ค.
๋ ๋-๋ธ๋ ํธ๋ฆฌ์ ํ์ ์ฐ์ฐ
ํ์ ์ฐ์ฐ์ ํธ๋ฆฌ์ ๊ตฌ์กฐ๋ฅผ ์ฌ์กฐ์ ํ์ฌ ๊ท ํ์ ๋ง์ถ๋ ๋ฐ ์ฌ์ฉ๋๋ค. ์ฃผ๋ก ๋ ๊ฐ์ง ํ์ ์ด ์๋ค.
- ์ข์ธก ํ์ Left Rotation
- ํน์ ๋ ธ๋๋ฅผ ๊ธฐ์ค์ผ๋ก ์ผ์ชฝ์ผ๋ก ํ์ ํ์ฌ, ํธ๋ฆฌ์ ๊ท ํ์ ๋ง์ถ๋ค.
- ์ฐ์ธก ํ์ Right Rotation
- ํน์ ๋ ธ๋๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฅธ์ชฝ์ผ๋ก ํ์ ํ์ฌ, ํธ๋ฆฌ์ ๊ท ํ์ ๋ง์ถ๋ค.
๋ ๋-๋ธ๋ ํธ๋ฆฌ์ ์์
- ๋ฃจํธ ๋ ธ๋ 10์ ๋ธ๋์ด๋ค.
- 10์ ์ผ์ชฝ ์์ 5๋ ๋ธ๋์ด๊ณ , ๊ทธ ์์์ธ 7์ ๋ ๋, null ๋ ธ๋๋ ๋ธ๋์ด๋ค.
- 10์ ์ค๋ฅธ์ชฝ ์์ 20์ ๋ธ๋์ด๊ณ , ๊ทธ ์์์ธ 15, 25๋ ๋ ๋์ด๋ค.
- ๋ชจ๋ ๋ฆฌํ(null ๋ ธ๋)๋ ๋ธ๋์ด๋ค
- ๋ฃจํธ์์ ๋ฆฌํ๊น์ง์ ๊ฒฝ๋ก์ ์๋ ๋ธ๋ ๋ ธ๋ ์๋ ๋ชจ๋ ๋์ผํ๋ค
๋ ๋-๋ธ๋ ํธ๋ฆฌ์์ ์ฝ์ ์์
๋ค์์ ์ฝ์ ๊ณผ์ ์์ ๋ ๋-๋ธ๋ ํธ๋ฆฌ๊ฐ ์ด๋ป๊ฒ ๊ท ํ์ ์ ์งํ๋์ง ๋ณด์ฌ์ฃผ๋ ์์์ด๋ค.
1. ์ด๊ธฐ ํธ๋ฆฌ
10 (B)
/ \
5 (R) 20 (R)
/ \ / \
N(B) N(B) N(B) N(B)
์ด ์ํ์์ 15๋ฅผ ์ฝ์ ํ๋ค.
2. ์ฝ์ ํ ํธ๋ฆฌ
10 (B)
/ \
5 (B) 20 (B)
/
15 (R)
์ฝ์ ๋ 15 ๋ ธ๋๋ ๋ ๋์ด๊ณ , ๋ ธ๋ 5์ ๋ ธ๋ 20์ ๋ธ๋์ผ๋ก ์์์ด ๋ณ๊ฒฝ๋๋ค.
๋ ๋-๋ธ๋ ํธ๋ฆฌ์ ์๊ฐ ๋ณต์ก๋
๋ ๋-๋ธ๋ ํธ๋ฆฌ๋ ๊ท ํ ์กํ ์ด์ง ํ์ ํธ๋ฆฌ์ด๋ฏ๋ก, ๋ค์๊ณผ ๊ฐ์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค.
- ๊ฒ์ : O(log N)
- ์ฝ์ : O(log N)
- ์ญ์ :O(log N)
๊ท ํ์ ์ ์งํ๊ธฐ ์ํ ํ์ ์ฐ์ฐ๊ณผ ์์ ๋ณ๊ฒฝ์ด ์ฝ์ ์ญ์ ์ ๋ฐ์ํ์ง๋ง, ๊ทธ ์ฐ์ฌ๋ค์ด ๋น์ฉ๋ O(log N) ๋ด์์ ์ด๋ฃจ์ด์ง๋ค.
๋ ๋- ๋ธ๋ ํธ๋ฆฌ์ ์ฅ์
๊ท ํ ์ ์ง
์ฝ์ ๋ฐ ์ญ์ ์ฐ์ฐ ํ์๋ ํธ๋ฆฌ๊ฐ ๊ท ํ์ ์ ์งํ์ฌ ์ต์ ์ ๊ฒฝ์ฐ์๋ O(log N)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๋ณด์ฅํ๋ค.
ํจ์จ์ ์ธ ํ์
๋ชจ๋ ํ์ ์ฐ์ฐ์ด ๊ท ํ ์กํ ์ํ์์ ์ํ๋์ด ํจ์จ์ ์ด๋ค.
'๋น ๊ตฌ๋ฉ ์ฑ์ฐ๊ธฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] HashSet์ load factor (0) | 2024.09.10 |
---|---|
[Java] TreeSet ๊ตฌํ (1) | 2024.09.10 |
[์๋ฃ ๊ตฌ์กฐ] ์๊ฐ ๊ท ํ ์ด์ง ํ์ ํธ๋ฆฌ Self-Balancing Binary Search Tree (0) | 2024.09.09 |
[์๋ฃ ๊ตฌ์กฐ] ์ด์ง ํ์ ํธ๋ฆฌ Binary search Tree, BST (0) | 2024.09.09 |
[์๋ฃ ๊ตฌ์กฐ] ์คํ ํธ๋ฆฌ Skewed Tree (0) | 2024.09.09 |