RedBlack Tree ์(Why) ์๊ธด ๊ฒ์ผ๊น์?
7,6,5,4,3,2,1 ์์๋๋ก ์ฝ์ ํด์ ์ด์งํ์ ํธ๋ฆฌ(Binary Search Tree)๋ฅผ ๋ง๋ค์ด ๋ณด๋ฉด ์ด๋จ๊น์?
- ์์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ํ์ชฝ์ผ๋ก ์น์ฐ์น Tree๊ฐ ์์ฑ๋ฉ๋๋ค.
1์ ์ฐพ์ผ๋ ค๊ณ ํ๋ค๋ฉด?
- ํญ์ ํธ๋ฆฌ์ ๋์ด๋งํผ ์๊ฐ์ด ํ์ํฉ๋๋ค.
- ๊ทธ๋ ๋ค๋ฉด ์ด์งํ์ ํธ๋ฆฌ(Binary Search Tree)๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๊ฐ ์๊ฒ ์ฃ ?
- ์ด๋ฌํ ๋ฌธ์ ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด ๋์จ ์๋ฃ๊ตฌ์กฐ๊ฐ Balanced binary search tree์ ํ ์ข ๋ฅ์ธ RedBlack Tree์ ๋๋ค.
RedBlack Tree๋?
- ๊ฐ ๋ ธ๋์ ์๊น์ ์ ์ฅํ๋ ๊ณต๊ฐ์ ์ถ๊ฐํ์ฌ ์๊น์ ๊ธฐ์ค์ผ๋ก ๊ท ํ์ ๋ง์ถ๋ ํธ๋ฆฌ์ ๋๋ค.
RedBlack Tree Rule
- ๋ชจ๋ ๋ ธ๋๋ RED์ด๊ฑฐ๋ BLACK์ด๋ค.
- ๋ฃจํธ๋ BLACK์ด๋ค.
- ๋ชจ๋ ๋ฆฌํ(NIL)๋ BLACK์ด๋ค.
- ๋ ธ๋๊ฐ RED์ด๋ฉด ๊ทธ ๋ ธ๋์ ์์์ ๋ชจ๋ BLACK์ด๋ค. // NO Double Red
- ๊ฐ ๋ ธ๋๋ก๋ถํฐ ๊ทธ ๋ ธ๋์ ์์์ธ ๋ฆฌํ๋ก ๊ฐ๋ ๊ฒฝ๋ก๋ค์ ๋ชจ๋ ๊ฐ์ ์์ BLACK ๋ ธ๋๋ฅผ ํฌํจํ๋ค.
NIL์ ํ๋์ ๊ฐ์ฒด๋ก ๊ด๋ฆฌํ๋ค๋ฉด?
- ํ๋์ Node๋ก ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ฝํ ์ ์์ต๋๋ค.
RedBlack Tree Insert
- ์ฝ์ ๋๋ ๋ชจ๋ ๋ ธ๋์ ์๊น์ RED๋ก ์์ํฉ๋๋ค.
8,18,5,15,17,25,40,80
Step 1 : Insert 8
- ๋ฃจํธ๋ ํ์์ธ ๊ท์น์ ๋ฐ๋ผ 8์ ๋ธ๋์ผ๋ก ๋ณ๊ฒฝ๋ฉ๋๋ค.
Step 2 : Insert 18
Step 3 : Insert 5
Step 4 : Insert 15
-
RED ๋ ธ๋๊ฐ ์ฐ์์ ์ผ๋ก ๋์ฌ ์ ์๋ค
๊ท์น์ ์๋ฐํ์ต๋๋ค. -
์ฐ์๋ RED๊ฐ ๋์ค๊ฒ ๋๋ค๋ฉด ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ ๊ฐ์ง ํด๊ฒฐ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
- Recoloring
- ์ฝ์ ๋ ๋ ธ๋์ ๋ถ๋ชจ์ ํ์ ์๊น์ด RED์ธ ๊ฒฝ์ฐ
- Restructuring
- ์ฝ์ ๋ ๋ ธ๋์ ๋ถ๋ชจ์ ํ์ ์๊น์ด BLACK์ธ ๊ฒฝ์ฐ, NULL์ธ ๊ฒฝ์ฐ
- Recoloring
-
ํ์ฌ ์ํฉ์ 15 ๋ ธ๋์ ๋ถ๋ชจ์ ํ์ ์๊น์ด RED์ด๊ธฐ ๋๋ฌธ์ Recoloring์ผ๋ก ์งํํฉ๋๋ค.
- ์ฝ์ ๋ ๋ ธ๋์ ๋ถ๋ชจ์ ๋ถ๋ชจ ํ์ ๋ ธ๋๋ฅผ BLACK์ผ๋ก ๋ถ๋ชจ์ ๋ถ๋ชจ๋ ธ๋๋ฅผ RED๋ก Coloringํฉ๋๋ค.
- ๋ถ๋ชจ์ ๋ถ๋ชจ๋
ธ๋๊ฐ Root Node์ธ ๊ฒฝ์ฐ
Root Node์ธ ๊ฒฝ์ฐ Black์ธ ๊ท์น
์ ์ํด ๋ณ๊ฒฝ๋์ง ์์ต๋๋ค.- ๋ถ๋ชจ์ ๋ถ๋ชจ๋ ธ๋๊ฐ Root node๊ฐ ์๋ ๊ฒฝ์ฐ Double Red๊ฐ ๋ค์ ๋ฐ์ ํ ์ ์์ต๋๋ค.
Step 5 : Insert 17
- ์ฝ์
๋ ๋
ธ๋์ ๋ถ๋ชจ์ ํ์ ์๊น์ด NULL์ด๊ธฐ ๋๋ฌธ์ Restructuring์ผ๋ก ์งํํฉ๋๋ค.
- ์ฝ์ ๋ ๋ ธ๋, ๋ถ๋ชจ, ๋ถ๋ชจ์ ๋ถ๋ชจ(Grand Parent) ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํฉ๋๋ค.
- ์ค์ ๊ฐ์ ๋ถ๋ชจ ๋ ธ๋๋ก ๋ง๋ค๊ณ ๋๋จธ์ง ๋ ธ๋๋ฅผ ์์์ผ๋ก ๋ณํํฉ๋๋ค.
- ๋ถ๋ชจ ๋ ธ๋๊ฐ ๋ ๋ ธ๋๋ฅผ BLACK ๋๋จธ์ง ๋ ธ๋๋ฅผ RED๋ก Coloringํฉ๋๋ค.
Step 6 : Insert 25
RED ๋ ธ๋๊ฐ ์ฐ์์ ์ผ๋ก ๋์ฌ ์ ์๋ค
๊ท์น์ ์๋ฐํ์ต๋๋ค.- ์ฝ์
๋ ๋
ธ๋์ ๋ถ๋ชจ์ ํ์ ์๊น์ด RED์ธ ๊ฒฝ์ฐ์ ํด๋น๋ฉ๋๋ค.
- Recoloring์ผ๋ก ๊ท์น์ ์๋ฐํ์ง ์๊ฒ ์กฐ์ ํฉ๋๋ค.
- ์ฝ์ ๋ ๋ ธ๋์ ๋ถ๋ชจ์ ๋ถ๋ชจ ํ์ ๋ ธ๋๋ฅผ BLACK์ผ๋ก ๋ถ๋ชจ์ ๋ถ๋ชจ๋ ธ๋๋ฅผ RED๋ก Coloringํฉ๋๋ค.
Step 7 : Insert 40
- ์ฝ์
๋ ๋
ธ๋์ ๋ถ๋ชจ์ ํ์ ์๊น์ด NULL์ด๊ธฐ ๋๋ฌธ์ Restructuring์ผ๋ก ์งํํฉ๋๋ค.
- ์ฝ์ ๋ ๋ ธ๋, ๋ถ๋ชจ, ๋ถ๋ชจ์ ๋ถ๋ชจ(Grand Parent) ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํฉ๋๋ค.
- ์ค์ ๊ฐ์ ๋ถ๋ชจ ๋ ธ๋๋ก ๋ง๋ค๊ณ ๋๋จธ์ง ๋ ธ๋๋ฅผ ์์์ผ๋ก ๋ณํํฉ๋๋ค.
- ๋ถ๋ชจ ๋ ธ๋๊ฐ ๋ ๋ ธ๋๋ฅผ BLACK ๋๋จธ์ง ๋ ธ๋๋ฅผ RED๋ก Coloringํฉ๋๋ค.
Step 7 : Insert 80
RED ๋ ธ๋๊ฐ ์ฐ์์ ์ผ๋ก ๋์ฌ ์ ์๋ค
๊ท์น์ ์๋ฐํ์ต๋๋ค.- ์ฝ์
๋ ๋
ธ๋์ ๋ถ๋ชจ์ ํ์ ์๊น์ด RED์ธ ๊ฒฝ์ฐ์ ํด๋น๋ฉ๋๋ค.
- Recoloring์ผ๋ก ๊ท์น์ ์๋ฐํ์ง ์๊ฒ ์กฐ์ ํฉ๋๋ค.
- ์ฝ์ ๋ ๋ ธ๋์ ๋ถ๋ชจ์ ๋ถ๋ชจ ํ์ ๋ ธ๋๋ฅผ BLACK์ผ๋ก ๋ถ๋ชจ์ ๋ถ๋ชจ๋ ธ๋๋ฅผ RED๋ก Coloringํฉ๋๋ค.
- Recoloring์ด ๋๋ ์ดํ์ ๋ณด๋ Double Red๊ฐ ์ฌ๋ฐ์ํ์ต๋๋ค.
- 25 ๋
ธ๋์ ๋ถ๋ชจ์ ํ์ ์๊น์ด BLACK์ด๊ธฐ ๋๋ฌธ์ Restructuring์ผ๋ก ์งํํฉ๋๋ค.
- ์ฝ์ ๋ ๋ ธ๋, ๋ถ๋ชจ, ๋ถ๋ชจ์ ๋ถ๋ชจ(Grand Parent) ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํฉ๋๋ค.
- ์ค์ ๊ฐ์ ๋ถ๋ชจ ๋ ธ๋๋ก ๋ง๋ค๊ณ ๋๋จธ์ง ๋ ธ๋๋ฅผ ์์์ผ๋ก ๋ณํํฉ๋๋ค.
- ๋ถ๋ชจ ๋ ธ๋๊ฐ ๋ ๋ ธ๋๋ฅผ BLACK ๋๋จธ์ง ๋ ธ๋๋ฅผ RED๋ก Coloringํฉ๋๋ค.
- 25 ๋
ธ๋์ ๋ถ๋ชจ์ ํ์ ์๊น์ด BLACK์ด๊ธฐ ๋๋ฌธ์ Restructuring์ผ๋ก ์งํํฉ๋๋ค.
๊ฐ์ฅ ๋ง์ง๋ง Step์ ์คํ๋ก Node 8 โ Node 10์ผ๋ก ๋ฐ๋์์ต๋๋ค.
RedBlack Tree Remove
- RB ํธ๋ฆฌ์์ ๊ฒ์ ์ ๋ ธ๋๋ฅผ ์ญ์ ํ ๋๋ ์ญ์ ์ฐ์ฐ์ผ๋ก RB ํธ๋ฆฌ์ ์์ฑ์ด ๊นจ์ง์ง ์๋๋ก ํด์ผ ํฉ๋๋ค.
- Insert ๋ ๊ณ ๋ คํ๋ ๊ฒ๊ณผ ์ ์ฌํ ๋ฐฉ์์ผ๋ก rotation์ ๊ตฌํํจ์ผ๋ก์จ ํด๊ฒฐํ ์ ์์ต๋๋ค.
- ๋ค๋ง ๋นจ๊ฐ์ ๋ ธ๋๋ฅผ ์ญ์ ํ ๋๋ ๊ทธ๋ฅ ์ญ์ ๋ฅผ ์ํํ๋ฉด ๋๋ค๊ณ ํฉ๋๋ค.
RedBlack Tree ๋ณต์ก๋(Complexity)์ ๋ํด
Algorithm | Average | Worst case |
---|---|---|
Space | O(n) | O(n) |
Search | O(log n) | O(log n) |
Insert | O(log n) | O(log n) |
Delete | O(log n) | O(log n) |
AVL Tree์ Red Black Tree ์ฐจ์ด์ ๋ํด
- AVL Tree๊ฐ Red Black Tree๋ณด๋ค ๋น ๋ฅธ Search๋ฅผ ์ ๊ณตํฉ๋๋ค.
- AVL Tree๊ฐ ๋ ์๊ฒฉํ Balanced๋ฅผ ์ ์งํ๊ณ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
- Red Black Tree์ AVL Tree๋ณด๋ค ๋น ๋ฅธ ์ฝ์
๊ณผ ์ ๊ฑฐ๋ฅผ ์ ๊ณตํฉ๋๋ค.
- AVL Tree๋ณด๋ค Balanced๋ฅผ ๋์จํ๊ฒ ์ ์งํ๊ณ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
- Red Black Tree๋ AVL Tree๋ณด๋ค ์๊น์ ์ ์ฅํ๊ธฐ ์ํด ๋ ๋ง์ Space Complexity๊ฐ ํ์ํฉ๋๋ค.
- Red Black Trees๋ ๋๋ถ๋ถ์ ์ธ์ด์ map, multimap, multiset์์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
- AVL tree๋ ์กฐํ์ ์๋๊ฐ ์ค์ํ Database์์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.