์
์ด๋๋ฅผ ๋ง๋๊ธฐ ์ , ์ฐ๋ฆฌ๋ ๋๋ฆ์ ์ค๋น๋ฅผ ํด์ผํ๋ค.
์ฐ๋ฆฌ์ ๋ฌด๊ธฐ๋ C.
๊ฐ์ฅ ํํ๊ฒ ์ ์ฐ์ด๋ RB-tree๋ฅผ C์์ ๊ตฌํํ๋ฉด์,
ํฌ์ธํฐ / ๊ตฌ์กฐ์ฒด ๊ฐ๋
์ ์ตํ๊ณ , ๋๋ฒ๊น
๋ฐฉ๋ฒ, makeํ์ผ ์์ฑ ๋ฐ ์คํ ๋ฑ์ ์ตํ๋ค.
RB-tree ๋ ์ด๋ฏธ ํฌ์คํ ํ์ง๋ง, ์ฃผ๋ก RB-tree์ ๊ธฐ๋ณธ ๊ฐ๋ ๊ณผ ๊ตฌํ ๋ฌธ์ ์ ๊ดํ ์ด์๋ค์ ์ ๋ฆฌํด๋์์ ๋ฟ์ด๋ค. ์ด๋ฒ ์ฃผ์ฐจ ํฐํ์์์ (์ฐธ์ํ์ง ์์์ง๋ง) ๋ค๋ ค์ค๋ ๋ง๋ค์ ์ํ๋ฉด RB-tree์ ๊ตฌํ ์์ฒด๋ ์ค์ํ ์ฌํญ์ด ์๋๋ฏ ์ถ๋ค. ์ค๋ช ์๋ฅผ ๋ณด๊ณ ๋ฌผ๊ฑด์ ์กฐ๋ฆฝํ๋ฏ ๊ตฌํ ์์ฒด๋ ์ฌ๋ฐ๊ธด ํ์ผ๋, ์ฌํ๊น์ง ๊ฒฝํํ ๋ฐ์ ์ํ๋ฉด ํฌ๊ฒ ๊ธฐ์ต์ ๋จ์ง ์๊ณ '์ด๋ฐ๊ฑฐ ํด๋ดค๋ค' ํ๋ ์์ ๊ฐ ์ด์์ ์๋ฏธ๊ฐ ์์ ๊ฒ๊ฐ๋ค.
๊ทธ๋์ RED-BLACK tree ์ ์ฐ๋๋. ์ด๋์ ์ฐ๋๋.
๋ค ๋ฆ๊ฒ ์ ๋ฆฌํด๋ณด์๋ฉด ์ด๋ ๋ค.
'์ ์ฐ๋๋'๋ RB-tree์ ๋ฑ์ฅ ๋ฐฐ๊ฒฝ๊ณผ, ๋ค๋ฅธ ๊ท ํ ์ด์ง ํธ๋ฆฌ์์ ์ฐจ์ด์ ์์ ์ฐพ์ ์ ์์ ๊ฒ์ด๋ค.
๊ท ํ์ ์ด๋ฃจ๋ ๊ฒ์ ํธ๋ฆฌ์ ์์์ AVL(Adel'son-Vel'ski, Landis)ํธ๋ฆฌ์๋ค. ํธ๋ฆฌ ๋ด์ ์ด๋ค ๋ ธ๋์ ์ผ์ชฝ ์๋ธํธ๋ฆฌ์ ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ์ ๋์ด์ฐจ๊ฐ 1์ดํ๊ฐ ๋๊ฒ ์ ์งํจ์ผ๋ก์จ ๊ท ํ์ ์ก๋๋ค.
๊ทธ ๋ค์์ 2-3 ํธ๋ฆฌ ์ B-ํธ๋ฆฌ๊ฐ ๋ฑ์ฅํ๋ค.
2-3 ํธ๋ฆฌ๋ ๊ฐ ๋
ธ๋๊ฐ (์์์ด ์๋ ๊ฒฝ์ฐ) 2๊ฐ์ ์์๊ณผ 1๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ฑฐ๋, 3๊ฐ์ ์์๊ณผ 2๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๋ ํธ๋ฆฌ์ธ๋ฐ ์ด๊ฒ์ ์ผ๋ฐํ ํ ๊ฒ์ด B-ํธ๋ฆฌ. M์ฐจ B-ํธ๋ฆฌ๋ ํ๋์ ๋
ธ๋๊ฐ ์ต๋ M๊ฐ์ ์์์ ๊ฐ์ง ์ ์๋ ํธ๋ฆฌ๋ฅผ ์๋ฏธํ๋ค.
์ดํ์ '4์ฐจ B-ํธ๋ฆฌ'์ ์กฐ๊ธ ํน๋ณํ ๋ฒ์ ์ธ "๋์นญ ์ด์ง B-ํธ๋ฆฌ"(2-3-4 ํธ๋ฆฌ)๊ฐ ๊ฐ๋ฐ๋๊ณ ,
์ด๋ฌํ '๋์นญ ์ด์ง B-tree'์ ๊ฐ๋
์ ๊ฐ์ง๊ณ , RB-tree๊ฐ ํ์ํ๊ฒ ๋์๋ค.
์ฌ๋ด์ผ๋ก ๋
ธ๋์ ์๊น์ด RED์ BLACK์ธ ์ด์ ๋ ๋นจ๊ฐ์์ด ๋น์ ๊ฐ๋ฐ์ด ์ด๋ฃจ์ด์ก๋ ํ๋ก์ํ ์ฐ๊ตฌ์์ ํ๋ฆฐํฐ๊ธฐ๊ฐ ์ธ์ํ ์ ์๋ ๊ฐ์ฅ ์ ๋ช
ํ ์์ด์๊ธฐ ๋๋ฌธ์ด๋ผ๊ณ ํ๋ค.
๊ทธ๋ ๋ด AVL-tree์ RB-tree์ ์ฐจ์ด์ ์ ๋ญ๊น
AVL ์ด RB๋ณด๋ค ๊ท ํ ๊ธฐ์ค์ด ์๊ฒฉ
( ๊ท ํ์ธ์์ ์ฐจ์ด๊ฐ 2๋ง ๋๋ ์ฆ ์ข์ฐ ๋์ด์ฐจ๊ฐ 2๋ง ๋๋ ์ฌ์กฐ์ )
- ๊ฑฐ์ ๋ชจ๋ ๊ฒฝ์ฐ์ ์กฐํ๋ฅผ logn์ ํ ์ ์์
- ๋จ ๊ท ํ ์กฐ์ ์ด ์๊ฒฉํด์, ์กฐ์ ํ ์ผ์ด ๋ง์ ๊ฒ์ด๊ณ ๊ทธ์ ๋ฐ๋ผ ์ฝ์ ๊ณผ ์ญ์ ๊ฐ ๋น์ฉ์ด ๋ง์ด ๋ฆ
RB๋ AVL๋ณด๋ค ๊ท ํ์ด ๋ ์๊ฒฉ
(๋ฃจํธ์์ ๋ฆฌํ๊น์ง ๊ฐ๋ ๋ชจ๋ ๊ฒฝ๋ก์ ํ์๋ ธ๋์ ์๋ง ๊ฐ์ผ๋ฉด ๋จ)
- ๊ท ํ์ด ๋ง์ด ๊นจ์ง ๊ฒฝ์ฐ์ ์กฐํ๊ฐ logn๋ณด๋ค ๋ง์ด ๊ฑธ๋ฆด ์ ์์ (๊ทธ๋ฆผ์ฒ๋ผ ๊ฒฝ๋ก ๊ธธ์ด ์ต๋ 2๋ฐฐ ๊ฐ๊น์ด ์ฐจ์ด ๋ ์ ์์)
- ๋จ, ๊ท ํ ์กฐ์ ์ด ๋๋ํ๊ธฐ ๋๋ฌธ์, ์ฝ์ ์ญ์ ๋น์ฉ์ด ๋ํ๋ค
๊ทธ๋ฌํ๋ค.
์ค์ ๋ก RB-tree๊ฐ ์ข๋ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ค๊ณ ํ๋ค. ์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ RB-tree๊ฐ ์ฝ์
, ์ญ์ , ์กฐํ์์ ๋น๊ต์ ์ข์ ์ฑ๋ฅ์ ๋ณด์ด์ง๋ง, ๋น ๋ฅธ ์กฐํ๋ฅผ ์ํด์ AVLํธ๋ฆฌ๋ฅผ ํ์ฉํ ์ ์๊ฒ ๋ค.
๋ค์์ RB-tree๊ฐ ์ค์ ๋ก ํ์ฉ๋๋ ์์๋ค.
Java:
java.util.TreeMap
,java.util.TreeSet
C++ STL (in most implementations): map, multimap, multiset
Linux kernel: completely fair scheduler, linux/rbtree.h
์ญ์ ์ฌ๋ฐ์๋ค. ํนํ ์ด๋ฒ์ฃผ๋ ๋ธ๋ก๊ทธ ํฌ์คํ
ํ๋ ์ฌ๋ฏธ๋ฅผ ์กฐ๊ธ ์๊ฒ ๋ ๊ฒ ๊ฐ๋ค.
๋ธ๋ก๊ทธ๋ ํผ๋๋ฐฑ์ด ์๋ช
์ธ๊ฑฐ ๊ฐ๋ค. ๋ฟ๋ฏํ๋ค.
ํ๋ฒ ๋ ํํ์๋ ํ ์ฃผ๊ฐ ๋๊ธธ
์ด๋์ ์ฐ๋ ์ง, ์ ์ฐ๋ ์ง๋ฅผ ๋นผ๋จน๊ณ ๊ตฌํ์๋ง ์ ๊ฒฝ ์ผ๋ ๋ ์์ ์ ๋ฐ์ฑํฉ๋๋ค!!