ํ๋ถ ๋ ์ด์ง ์ฝ์๋ค๊ฐ ๋๋ง์ณค๋ RB Tree...
์๋ง์ Tree ์๋ฃ๊ตฌ์กฐ ์ค์์๋ ํ์ค์ธ๊ณ์์ ์ฆ๊ฒ ์ฌ์ฉ๋๋ค. ์ฆ๊ฒ ์ฌ์ฉ๋๋ ์ด์ ๋ ํจ์จ์ ์ด๊ธฐ ๋๋ฌธ์ด๊ฒ ๋ค.
์ด๋ค ๋ถ๋ถ์์ ํจ์จ์ ์ธ๊ฑธ๊น?
RB Tree๋ ์ฝ์ ๊ณผ ์ญ์ , ๊ฒ์ ์๊ฐ์ ๋ํ ์ต์ ์ ๊ฒฝ์ฐ๋ฅผ ๋ณด์ฅํ๋ค.
์ค์๊ฐ ์ ํ๋ฆฌ์ผ์ด์
๊ณผ ๊ฐ์ด ์๊ฐ์ ๋ฏผ๊ฐํ ์ ํ๋ฆฌ์ผ์ด์
์์ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋๋ค.
ํ๋์ ์๋ก, Linux ์ปค๋์ Completely Fair Scheduler ์ epoll ์์คํ
ํธ์ถ์ RB Tree๋ฅผ ์ฌ์ฉํ๋ค.
RB Tree๋ ์ด์ง ํ์ ํธ๋ฆฌBST์ ์ผ์ข
์ผ๋ก ๊ฒ์ ์ฐ์ฐ์ BST์ ๋์ผํ๊ฒ ์ด๋ฃจ์ด์ง๋ค.
์ฝ์
๊ณผ ์ญ์ ๋ ๋ค์ ๊น๋ค๋ก์ด ํธ์ด๋ผ ๋ค์ ํฌ์คํ
์์ ๊ฐ๊ฐ ๋ค๋ค๋ณด๋๋ก ํ๊ณ , ์ด๋ฒ ํฌ์คํ
์์๋ ๊ฐ๋
, ์ฌ์ฉํ๋ ์ด์ , ํน์ง์ ์์ฃผ๋ก ์์๋ณด๋๋ก ํ์!
๊ท ํํธ๋ฆฌ Self-Balancing Binary Tree๋ ์ ๋ฑ์ฅํ์๊น?
์ด์ง ํ์ ํธ๋ฆฌ BST๋ฅผ ๊ธฐ์ตํ๋๊ฐ? ์์ ์ธ๊ธํ BST๋ฅผ ์๊ณ ์์ด์ผ RB Tree๋ฅผ ์ดํดํ ์ ์๋ค.
์ด์ง ํ์ ํธ๋ฆฌ๋ ์น๋ช
์ ์ธ ๋จ์ ์ด ์๋ค. ์ต์
์ ๊ฒฝ์ฐ ์๊ฐ๋ณต์ก๋๊ฐ O(N)์ด๋ผ๋ ์ ์ด๋ค.
์์ผ๊น?
๋
ธ๋๊ฐ ํ ์ชฝ์ผ๋ก ํธํฅ๋๊ฒ ์ถ๊ฐ๋๋ค๋ฉด ํ์ชฝ์ผ๋ก ์ญ์ฑ ๋์ด์ง ํธ๋ฆฌ ๊ตฌ์กฐ๊ฐ ๋๋ค. ์ด๋ ๋จ์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๋ค๋ฅผ ๋ฐ ์๋ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง๊ฒ ๋๋ค.
์ด๋ฅผ ๊ฐ์ ํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์๊น?
ํ์ชฝ์ผ๋ก ์ฃผ์ฑ ๋์ด์ง๊ธฐ ์ ์ ๊ธธ์ด๋ฅผ ์กฐ์ ํด์ฃผ๋ฉด ์ด๋จ๊น?
์ด๋ ๊ฒ ํ์๋ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๊ท ํ ํธ๋ฆฌSelf-Balancing Binary Tree๋ผ๊ณ ํ๋ค.
๊ท ํ ํธ๋ฆฌSelf-Balancing Binary Tree์๋ ํฌ๊ฒ ๋ ์ข
๋ฅ๊ฐ ์๋ค.
1. AVL
2. Red-Black Tree
๋ ๋ค ๊ท ํ ํธ๋ฆฌ๋ก ์๊ฐ๋ณต์ก๋ O(logN)์ ๋ณด์ฅํ๋ค.
| ํ๊ท ์ ์๊ฐ๋ณต์ก๋ | ์ต์ ์ ๊ฒฝ์ฐ ์๊ฐ๋ณต์ก๋ | |
|---|---|---|
| insert | O(logN) | O(logN) |
| delete | O(logN) | O(logN) |
| search | O(logN) | O(logN) |
ํ์ง๋ง, ๋ค๋ฅธ ์ ์ด ์๋ค.
AVL์ ๊ท ํ ์ก๋ ๋ฐฉ์์ด RB Tree ๋ณด๋ค ๊น๋ค๋กญ๋ค. ๊น๋ค๋ก์ด ์กฐ๊ฑด์ผ๋ก ๊ท ํ์ ์ ์งํ๊ธฐ ๋๋ฌธ์ ๊ฒ์ํ ๋๋ RB Tree ๋ณด๋ค ์ข์ ์ฑ๋ฅ์ ๋ณด์ธ๋ค.
๊ทธ๋ฌ๋ ์ฝ์
/์ญ์ ์ฐ์ฐ ์์๋ RB Tree ๋ณด๋ค ๋ ์ค๋ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค. RB Tree๋ AVL ๋ณด๋ค ๋์จํ ์กฐ๊ฑด์ผ๋ก ๊ทธ๋ง์ ์์ฑ์ ๋ง์กฑ์ํค๋ฉด ์ฐ์ฐ์ ๋ง์น๊ธฐ ๋๋ฌธ์ด๋ค!
๋ฐ๋ผ์
๊ฒ์์ด ๋๋ถ๋ถ์ธ ์ํฉ(dictionary ๋ฑ์์๋ ํ๋ฒ ๋ง๋ค์ด๋๊ณ ์กฐํ๋ฅผ ์ฆ๊ฒ ํ๋ค.)์์๋ AVL์ ์ฌ์ฉํ๊ณ ,
์ฝ์
๊ณผ ์ญ์ ๊ฐ ์ฆ์ ์ํฉ(Java TreeMap, C++ std::map ๋ฑ)์์๋ Red-Black Tree๋ฅผ ์ฌ์ฉํ๋ค.
ํ์ง๋ง ์ด๋ ํฐ ์ฐจ์ด๊ฐ ์์ด์ ๋ณดํต RB Tree๋ฅผ ์ฌ์ฉํ๋ค๊ณ ํ๋ ์์๋์!
5๊ฐ์ ์์ฑ์ ์ ์งํ๋ฉด์ ๊ทธ ์์ฑ์ด ์๋ฐฐ๋ ๋๋ง๋ค ์ฌ์กฐ์ ์ ํตํด ๊ท ํ์ ์ ์งํ๋ค.
๊ท ํ์ ์ ์งํ๊ธฐ ์ํด leaf ๋
ธ๋๋ฅผ black ์์ ๊ฐ์ง ๋
ธ๋๋ก ๋ณด๋ ๊ฒ์ด๋ค.

์ ๊ทธ๋ฆผ์์ leaf ๋
ธ๋๋ฅผ ๋ณด๋ฉด ๋์์ ์๋ฏธํ๋ NIL ๋
ธ๋๊ฐ ๋ถ์ด์๋ ๊ฒ์ ์ ์ ์๋ค.
ํธ์์ ๊ทธ๋ฆผ์์ ์๋ตํ๊ธฐ๋ ํ์ง๋ง ๋! leaf ๋
ธ๋์๋ NIL์ด ๋ถ์ด์๋ค๋ ์ฌ์ค์ ์์ผ๋ฉด ์ ๋๋ค.
NIL ๋
ธ๋๋ RB Tree์ ์์ฑ ์ค 5๋ฒ ์์ฑ์ ์ํด ์กด์ฌํ๋ฉฐ, ๊ท ํ์ ์ ์งํ๋ ๋ฐ ์ค์ํ ์ญํ ์ ํ๋ค.
์ด ์์ฑ๊ณผ ๊ท์น์ ๊ธฐ๋ฐ์ผ๋ก ์ฝ์ ๊ณผ ์ญ์ ์ฐ์ฐ์ ์ํํ๊ฒ ๋ ํ ๋ ์ ๊ธฐ์ตํด์ผ ํ๋ค.