์๋์น ์๊ฒ ์ด๋ฒ ํํธ๋ ์ ๊ฐ ํธ๋ฆฌ๋ฅผ ๋ง๊ฒ ๋๋ค์๐. ์ง๋ ์๊ฐ์ binary tree์ binary search tree์ ๋ํด์ ์ค๋น๋ฅผ ํ์๋๊ฒ ๊ธฐ์ต์ด ๋์๋์?
์ด๋ฒ์ ์์๋ณผ red-black tree๋ BST์ ์ผ์ข
์ด๊ธฐ ๋๋ฌธ์ ์ด์ง ํ์ ํธ๋ฆฌ์ ๋ํด ์งง๊ฒ ์ดํด๋ณด๊ณ ๋ณธ๋ก ์ผ๋ก ๋์ด๊ฐ๋ณด๊ฒ ์ต๋๋ค.
BST๊ฐ ๊ฐ์ง๋ ๊ฐ์ฅ ์ค์ํ ์์ฑ๋ง ์๊ฐ์ ํด๋ด
์๋ค. ๋๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ด ์ผ์ชฝ ์์์ ๋๋ณด๋ค ์์ ๊ฐ์ ์ค๋ฅธ์ชฝ ์์์ ๋๋ณด๋ค ํฐ ๋
์๋ค๋ง ๋ชจ์๋์ต๋๋ค. ์ด๋ฐ property๋ง ์๊ฐ์ ํด์ ์ ์ฒด Binary Search Tree๋ฅผ ์๊ฐํ๋ฉด ๋ฃจํธ๋ฅผ ๊ธฐ์ค์ผ๋ก ์์ ๊ฐ๋ค์ ์ ๋ถ ์ผ์ชฝ์ ํฐ ๊ฐ๋ค์ ์ ๋ถ ์ค๋ฅธ์ชฝ์ ์์นํ๊ฒ ๋ฉ๋๋ค. ๊ท ํ์ด ์กํ์ง ์์ ์ํฉ์ ๊ฐ์ ํด๋ณด๋ฉด ๊ฒ์์ ์ต์
์ ๊ฒฝ์ฐ ์๊ฐ ๋ณต์ก๋๋ O(height)๊ฐ ๋์จ๋ค๋ ๊ฒ๋ ๊ธฐ์ต์ด ๋์๋์? ์ ์ต์
์ ์ํฉ์์ ๋์ด๊ฐ ๋์ค๋์ง๋ ์กฐ๊ธ๋ง ์๊ฐํด๋ณด๋ฉด ์ ์ ์์ต๋๋ค. ํ ์ชฝ์ผ๋ก๋ง ์๋ผ๋ ํธ๋ฆฌ๋ฅผ ์๊ฐํด๋ณด๋ฉด ๋ฐ๋ก ์ดํดํ ์ ์์ต๋๋ค. (+ average case์์์ ๊ฒ์์ ์๊ฐ ๋ณต์ก๋๋ O(logn))
์ ๊ทธ๋ฌ๋ฉด ๋ง์ฝ์ ๊ท ํ์ด ์กํ ํธ๋ฆฌ๋ก ๊ตฌ์ฑํ๊ฒ ๋๋ค๋ฉด? ์๊ฐ ๋ณต์ก๋๊ฐ O(h)๊ฐ ์๋ O(logn)์ ๋ฐ์ด๋ ์ํฌ์ ์์ต๋๋ค. ์๋ํ๋ฉด ๋์ด๊ฐ logn์ผ๋ก ํญ์ ์ผ์ ํ๊ฒ ๋์ค๊ธฐ ๋๋ฌธ์
๋๋ค. ๋ฐ์ด 2์ธ ๋ก๊ทธํจ์์ ๋์ด๊ฐ ์๋ ดํ๋ ์ด์ ๋ ์ด์ง ํธ๋ฆฌ๋ ๋
ธ๋๊ฐ 2๊ฐ์ฉ ๋์ด๋๊ณ ๊ฐ ๋ ๋ฒจ์ ๋
ธ๋ ๊ฐ์ = 2^(height-1)์ด๊ธฐ ๋๋ฌธ์ด์ฃ ๊ทธ๋ผ ์๋ณ์ ๋ก๊ทธ๋ฅผ ์์์ height๋ฅผ ๊ตฌํด์ฃผ๋ฉด ๋๊ฒ ์ฃ ?
์ ๋ฆฌํ๋ฉด red black tree๋ bst์ ์ผ์ข
์ธ๋ฐ ๊ท ํ ์กํ ์ด์ง ํ์ ํธ๋ฆฌ๋ผ๊ณ ์๊ฐํ๋ฉด ๋ ๊ฒ ๊ฐ์ต๋๋ค.
Red-Black Tree ์กฐ๊ฑด
Red-Black Tree ์์
Reconstructing & Recoloring
1. Root property :๋ฃจํธ ๋
ธ๋์ ์๊น์ ๊ฒ์ ์ด๋ค.
2. External property :๋ชจ๋ external(leaf) node๋ค์ ๊ฒ์ ์ด๋ค.
3. Internal property :๋นจ๊ฐ๋
ธ๋์ ์์์ ๋ฐ๋์ ๊ฒ์ ์ด๋ค.
-> no double red :๋นจ๊ฐ์ ๋
ธ๋๊ฐ ์ฐ์์ผ๋ก ๋์ฌ ์ ์๋ค.
4. Depth property :๋ชจ๋ ๋ฆฌํ๋
ธ๋์์ black depth๋ ๊ฐ๋ค.
-> ๋ฆฌํ๋
ธ๋์์ ๋ฃจํธ๋
ธ๋๊น์ง ๊ฐ๋ ๊ฒฝ๋ก์์ ๋ง๋๋ ๋ธ๋๋
ธ๋์ ๊ฐ์๋ ๊ฐ๋ค.(๊ทธ๋ฅ ๋
ธ๋์ ์๋ ๋ค๋ฅผ ์ ์๋ค.)
์์ ์กฐ๊ฑด์ผ๋ก๋ง ์ดํด๋ณด๋ฉด ๋๋์ฒด ์ด๋ป๊ฒ rb tree๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒ์ธ์ง ๋๋์ด ์ ์ค์ง ์์ผ๋ ์์๋ฅผ ํตํด์ ํ ๋ฒ ์์๋ด์.
1๋ฒ ์กฐ๊ฑด์ผ๋ก ์ธํด์ ๋ง์ฝ์ ์ฒ์ ๋ฃจํธ ๋
ธ๋์ ๊ฐ์ ์ฝ์
ํ๋ค๋ฉด ๊ทธ ๋
ธ๋์ ์์ ๊ฒ์ ์
๋๋ค. ํ์ง๋ง ๋ฃจํธ ๋
ธ๋ ์ฝ์
์ธ์ ๋ชจ๋ ๋
ธ๋๋ฅผ ์ฝ์
ํ ๋ ๋
ธ๋์ ์๊น์ red์
๋๋ค.
2์ 8์ ์ฝ์
ํ๊ฒ ๋๋ฉด ์ผ๋จ ์ ์กฐ๊ฑด์ ์๋ฐฐ๋๋ ์ํฉ์ ๋ฒ์ด์ง์ง ์์ต๋๋ค. ์ฌ๊ธฐ์ ๋
ธ๋๋ฅผ ํ๋ ๋ ์ฝ์
์ ํ๊ฒ ๋๋ค๋ฉด
3์ ์ฝ์
ํ๋ฉด 4๋ณด๋ค ์๊ธฐ ๋๋ฌธ์ ์ผ์ชฝ ์๋ธ ํธ๋ฆฌ๋ก ๊ฐ๊ฒ๋๊ณ ๊ฑฐ๊ธฐ์ 2๋ฒ๋ณด๋ค ํฌ๊ธฐ๋๋ฌธ์ 2์ ์ค๋ฅธ์ชฝ ์์์ผ๋ก ๋ถ๊ฒ ๋ฉ๋๋ค. ํ์ง๋ง 3๋ฒ ์กฐ๊ฑด์ ์๋ฐฐ๋๋ ์ํฉ์ด ๋ฒ์ด์ง๋๋ฐ (๋นจ๊ฐ ๋
ธ๋์ ์์์ ๊ฒ์ ๋
ธ๋์ฌ์ผ ํจ) ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ 2๊ฐ์ง ๋ฉ์ปค๋์ฆ์ด ์กด์ฌํฉ๋๋ค.
- Restructuring
- Recoloring
double red๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ํ์ฌ insert๋
ธ๋์ ๋ถ๋ชจ์ ํ์ ๋
ธ๋์ ์๊น์ ๋ฐ๋ผ์ ์ํํ๋ ๋ฉ์ปค๋์ฆ์ด ๋ค๋ฆ
๋๋ค.
๋ง์ฝ์ ๋ถ๋ชจ์ ํ์ ๋
ธ๋ ์ปฌ๋ฌ๊ฐ ๋ธ๋์ด๋ฉด restructuring ๋ถ๋ชจ์ ํ์ ๋
ธ๋ ์ปฌ๋ฌ๊ฐ ๋ ๋์ด๋ฉด recoloring์ ์ํํฉ๋๋ค.
restructuring์ ๊ฐ์
ํ๋ ๋
ธ๋๋ ํ์ฌ insert๋ ๋
ธ๋(z), ๋ถ๋ชจ ๋
ธ๋(v), ๋ด ๋ถ๋ชจ์ ๋ถ๋ชจ ๋
ธ๋(root)์
๋๋ค. (์ case1 ๊ทธ๋ฆผ์ผ๋ก ์ดํด๋ณด์ธ์.)
1. ๋(z)์ ๋ด ๋ถ๋ชจ(v), ๋ด ๋ถ๋ชจ์ ๋ถ๋ชจ๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ
2. ๋ฌด์กฐ๊ฑด ๊ฐ์ด๋ฐ ์๋ ๊ฐ์ ๋ถ๋ชจ๋ก ๋ง๋ค๊ณ ๋๋จธ์ง ๋์ ์์์ผ๋ก ๋ง๋ ๋ค.
3. ๊ฐ์ด๋ฐ ์๋ ๊ฐ(๋ถ๋ชจ๊ฐ ๋ ๊ฐ)์ ๊ฒ์ ์ผ๋ก ๋ง๋ค๊ณ ๊ทธ ๋ ์์๋ค์ ๋นจ๊ฐ์ผ๋ก ๋ง๋ ๋ค.
- ๋, ๋ถ๋ชจ, ๋ถ๋ชจ์ ๋ถ๋ชจ ์ ํ
- ์ผ์๋ก ๋๊ณ ์์ ์ ๋ ฌํ๋ค.
- ์ ๋ ฌ๋ ์์์์ ๊ฐ์ด๋ฐ ๊ฐ์ ๋ถ๋ชจ๋ก ๋ง๋ค๊ณ ์ด์ง ํ์ ํธ๋ฆฌ๋ก ๊ตฌ์ฑํ๋ค.
- ํ์ฌ ๋ฃจํธ ๋ ธ๋๋ง ๊ฒ์ ์ ๋๋จธ์ง ์์ ๋ ธ๋๋ฅผ ๋นจ๊ฐ์์ผ๋ก ๋ฐ๊ฟ์ค๋ค.
- ์๋ key๊ฐ 2์ธ ๋ ธ๋ z์ ๋ถ๋ชจ์ ํ์ ๋ ธ๋๋ฅผ 4์์์ผ๋ก ๋ถ์ฌ์ค๋ค.
restructuring์ ๋ค๋ฅธ ์๋ธํธ๋ฆฌ์ ์ํฅ์ ๋ฏธ์น์ง ์๊ธฐ ๋๋ฌธ์ double red๋ฅผ ํด๊ฒฐํ๊ธฐ ์ ๊ณผ ํ์ black node์ ๊ฐ์์ ๋ณํ๊ฐ ์๋ค.4๋ฒ ์กฐ๊ฑด
๊ทธ๋ฌ๋ฏ๋ฌ restructuring ์์ฒด ์๊ฐ ๋ณต์ก๋๋ O(1)์ด์ง๋ง ์์ ๊ฒฐ์ , ํธ๋ฆฌ๋ก ๋ง๋๋ ์๊ฐ, ์๋ ๋
ธ๋์ ๊ตฌ์กฐ๋ก ๋ฐ๊ฟ์ฃผ๋ ์๊ฐ ๋ชจ๋ ์์ ์๊ฐ์ด๊ธฐ ๋๋ฌธ์ ์ด๋ค ๋
ธ๋๋ฅผ insertํ ๋ค ์ผ์ด๋๋ฏ๋ก ์ด ์ํ ์๊ฐ์ O(logn)์
๋๋ค. (ํ์ฌ ๋
ธ๋๊ฐ ๋ค์ด๊ฐ ์์น๋ฅผ ๋จผ์ ์ฐพ๊ธฐ ์ํด์์ด๋ค. ์ด์ง ํ์ ํธ๋ฆฌ ๊ฒ์์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๋ ์ฌ๋ฆฌ์ธ์ฉ)
1. ํ์ฌ insert๋ ๋
ธ๋(z), ๋ถ๋ชจ(v)์ ๋ถ๋ชจ์ ํ์ (w)๋ฅผ ๊ฒ์ ์ผ๋ก ํ๊ณ ๋ด ๋ถ๋ชจ์ ๋ถ๋ชจ๋ฅผ ๋นจ๊ฐ์ผ๋ก ํ๋ค.
2. ๋ถ๋ชจ์ ๋ถ๋ชจ๊ฐ root node๊ฐ ์๋์์ ๋ double red(3๋ฒ ์กฐ๊ฑด)๊ฐ ๋ค์ ๋ฐ์ ํ ์ ์๋ค.
- recoloring์ ํ๋ ์ํฉ
- ์ฝ์ ๋ ๋ ธ๋ z์ ๋ถ๋ชจ (v)์ ๊ทธ ๊ฒ์ ํ์ (w)์ ์๊น์ ๊ฒ์ ์ผ๋ก ๋ง๋ค์ด ์ค๋ค.
- ์ฝ์ ๋ ๋ ธ๋(z)์ ๋ถ๋ชจ์ ๋ถ๋ชจ๋ฅผ ๋นจ๊ฐ์ผ๋ก ๋ง๋ค์ด์ค๋ค.
- ๋ง์ฝ ๋ถ๋ชจ์ ๋ถ๋ชจ๊ฐ root node๋ผ๋ฉด 1๋ฒ ์กฐ๊ฑด์ ์ํด์ ๊ฒ์ ์ด ๋๋ค.
- ํ์ง๋ง ์ฌ์ค ์๊ณ ๋ณด๋ ์ง๊ธ ์ฐ๋ฆฌ๊ฐ ๋ณด๋ ํธ๋ฆฌ๊ฐ ์ด๋ค ํธ๋ฆฌ์ ์ผ๋ถ๋ถ ์๋ธํธ๋ฆฌ๋ผ๋ฉด (4๋ฒ์ root๊ฐ ์๋์์) ์ด ์ํ๋ก ๋ฌ์ผํ๋๋ฐ 4๋ฒ ๋ถ๋ชจ ๋
ธ๋๊ฐ ๋นจ๊ฐ์ผ ๊ฒ์ด๋ค. ๊ทธ๋ ๊ฒ ๋๋ฉด
double red๊ฐ ๋ฐ์ํ๊ฒ ๋๋๋ฐ ์ด๊ฒฝ์ฐ recoloring์ด๋ restructuring์ ํด์ค์ผ ํ ์๋ ์๋ ์ํฉ์ ๋๋ค. ์ต์ ์ ๊ฒฝ์ฐ root node๊น์ง ๋ค์ ๋ ๊ฐ์ง ๋ฉ์ปค๋์ฆ์ ์ด์ฉํด์ผ ํ ์๋ ์๋ ๊ฒ์ ๋๋ค.
๊ทธ๋ฌ๋ฉด recoloring์์ ๋ถ๋ชจ ๋
ธ๋์ ๋ถ๋ชจ์ ํ์ ๋
ธ๋๋ฅผ ๊ฒ์ ์ผ๋ก ๋ฐ๊ฟ๋ 4๊ฐ ์กฐ๊ฑด์ ์๋ฐฐ๊ฐ ๋์ง ์๋๊ฐ?
-> 4๋ฒ depth property๋ฅผ ๋ง์กฑํฉ๋๋ค. black depth๋ 1๋ง ์ฆ๊ฐํ๋ ๊ฒ์ด๋ผ ๊ด๊ณ ์์ต๋๋ค.
์๊ฐ ๋ณต์ก๋๋ฅผ ์์๋ณด๋ฉด insertํด์ค ์์น๋ฅผ ์ฐพ๋๋ฐ O(logn) ์์์ ๊ณ์ ๋ดค์ผ๋ ์ด๊ฒ์ ๋ํ ์๋ฌธ์ ์ ์์ผ๋ฆฌ๋ผ ์๊ฐ๋ฉ๋๋ค. recoloring์ ํด์ฃผ๋๋ฐ ์๊น๋ง ๋ฐ๊ฟ์ฃผ๊ธฐ ๋๋ฌธ์ O(1)์ ์๊ฐ์ด ๊ฑธ๋ฆฌ๊ณ ์์ ์ธ๊ธํ root node๊น์ง ํผ์ ธ ๋๊ฐ๋ฉด O(logn)์๊ฐ์ด ๊ฑธ๋ฆฌ๊ฒ ๋ฉ๋๋ค.
Red-black tree์์ ์ฝ์
์ ํด์ฃผ๋ ๊ฒฝ์ฐ ๋ ๊ฐ์ง ๋ฉ์ปค๋์ฆ์ ์๊ฐ ๋ณต์ก๋ ๋ชจ๋ O(logn)์
๋๋ค.
์ ๋ฆฌํ๋ฉด, restructuring, recoloring ๋ ๋ค ๋ถ๋ชจ์ ํ์ ๋
ธ๋์ ์๊น์ ์ดํ๋ด์ผํฉ๋๋ค. ๋ถ๋ชจ์ ํ์ ๋
ธ๋์ ์๊น์ด ๊ฒ์ ์ผ ๋๋ restructuring ๋นจ๊ฐ์ผ ๋๋ recoloring์ ํด์ค์ผํฉ๋๋ค.
- restructuring์ ์ํ์ ๋๋๋ค. ๋ค๋ฅธ ์๋ธํธ๋ฆฌ ์ํฅ x
- recoloring์ 4๊ฐ์ง ์กฐ๊ฑด์ ์๋ฐฐ๋๋ฉด ๊ณ์ ํด์ ๋ค์ ์ํ uncle(๋ถ๋ชจ์ ํ์ ๋ ธ๋) ์๊น์ ๋ณด๊ณ ๋ค์ ๊ตฌ์ฑํด์ผ๋๋๋ฐ, ์ต์ ์ ๊ฒฝ์ฐ์ root node๊น์ง ์ญ ์ฌ๋ผ๊ฐ์ ๊ณ์ ์ฐ์ฐํด์ผํ ์ ์๋ค.
- ๋ง์ง๋ง์ผ๋ก STL์ mapํจ์๋ red black tree๋ก ๊ตฌ์ฑ๋๋ค๊ณ ํฉ๋๋ค.
[์๊ฐ ๋ณต์ก๋](https://lordofkangs.tistory.com/80)
- Red Black Tree์ ์ ์, ์ฑ์ง 4๊ฐ์ง๋ฅผ ๋งํ์์ค.
- Recoloring๊ณผ Restructing์ ์๊ฐ ๋ณต์ก๋์ ํจ๊ป ์ค๋ช ํ์์ค.
- hash์์ red-blackํธ๋ฆฌ๊ฐ ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ๊ฐ ์๋๋ฐ, ์ฌ์ฉํ๋ ์ด์ ์ ์ธ์ ์ฌ์ฉํ๋์ง ์ค๋ช ํ์์ค.















