Red Black Tree
Red Black Tree
Red Black Tree(์ดํ RB)๋ ๊ฐ์ฅ ์ ๋ช ํ๊ณ ๋ง์ด ์ฌ์ฉ๋๋ โ๊ท ํ ์ด์ง ํ์ ํธ๋ฆฌโ ๊ตฌ์กฐ์ด๋ค.
์ด๋ฆ์์ ์ ์ ์๋ฏ์ด RB์ ๋ ธ๋์๋ ์๊น์ด ์๋ค. ๋นจ๊ฐ์๊ณผ ๊ฒ์์.
ํ ๋ฒ ๊ทธ๋ฆผ์ ๋ณด์.

๊ฒ์์ ๋ ธ๋์ ๋นจ๊ฐ์ ๋ ธ๋๊ฐ ์๋ค.
๋ฆฌํ๋
ธ๋๋ฅผ ๋ณด๋ฉด NIL์ด๋ผ๊ณ ํ๊ธฐ๊ฐ ๋์ด์๋๋ฐ, Python์ None, C์ NULL๊ณผ ๊ฐ๋ค.
RB์์๋ NIL ๋ ธ๋๋ฅผ ๋ ๋ฆฝ๋ ๋ ธ๋๋ก ํํํ๊ณ , ํด๋น ๋ ธ๋๋ฅผ ๋ชจ๋ ๋ฆฌํ ๋ ธ๋๋ผ๊ณ ๋ถ๋ฅด๊ธฐ๋ก ํ๋ค.
Red black Tree์์๋ NIL ๋ ธ๋๋ฅผ ๋ฆฌํ๋ ธ๋๋ผ๊ณ ํํ. ๋๋จธ์ง๋ฅผ ๋ด๋ถ ๋ ธ๋๋ผ๊ณ ํํํ๋ค.
Red Black Tree์ ์กฐ๊ฑด
Red Black Tree๊ฐ ๋๊ธฐ ์ํด์๋ ๋ค์ฏ ๊ฐ์ง ์กฐ๊ฑด์ ๋ง์กฑํด์ผ ํ๋ค.
๋น์ฐํ ์๊ธฐ์ง๋ง โ์ด์ง ํ์ํธ๋ฆฌ์ด๋ฉด์โ ํด๋น ์กฐ๊ฑด๋ค์ ๋ง์กฑํด์ผ ํ๋ค.
๋ชจ๋ ๋ ธ๋๋ ์์ด ์์ด์ผ ํ๋ค (Red / Black)
๋ฃจํธ ๋ ธ๋๋ Black Node์ฌ์ผ ํ๋ค.
๋ฆฌํ ๋ ธ๋๋ Black Node์ฌ์ผ ํ๋ค.
Red Node๋ ๋ ๊ฐ์ ์์ ๋ ธ๋๋ฅผ ๊ฐ์ง๋ค. (์ค์)
Red Node๋ ๋ฐ๋์ ๋ ๊ฐ์ ์์ ๋ ธ๋๊ฐ Black Node์ฌ์ผ ํ๋ค.
๊ฐ ๋ ธ๋์์ ๋ฆฌํ ๋ ธ๋(NIL ๋ ธ๋)๋ก ๊ฐ๋ ๊ฒฝ๋ก์ ์๋ Black Node์ ์๋ ํญ์ ๊ฐ์์ผ ํ๋ค.
์ ๊ทธ๋ฆผ์ ์๋ก ๋ค๋ฉด, 18๋ฒ ๋ ธ๋์์ NIL ๋ ธ๋๋ก ๊ฐ๋ ๊ฒฝ๋ก์ Black Node ์๋ ์ด๋๋ก ๊ฐ๋ ํญ์ ๊ฐ๋ค.
์ฌ๊ธฐ๊น์ง ์์ ๋, ์ด๋ฐ ์๊ฐ์ด ๋ ๋ค.
๋์ฒด ์ด ์ง๊ฑฐ๋ฆฌ๋ฅผ ์ ํด์ผํ ๊น? ์ด ํธ๋ฆฌ์ ์ฅ์ ์ด ๋ฌด์์ธ๊ฐ?
์ค๋ช ์ ํ๊ธฐ ์ํด์ ๋ค์๊ณผ ๊ฐ์ด ์ฉ์ด๋ฅผ ์ ์ํ๋ค.
H(v) = V์ ๋์ด (height)
bH(v) = V์์ ๋ฆฌํ๋ ธ๋๋ก ๊ฐ ๋ ๋ง๋๋ Black Node์ ๊ฐ์ (black height)
v๋ ์ ์ธํ๊ณ ๋ฆฌํ๋ ธ๋๋ก ๊ฐ ๋ ๋ง๋๋ Black Node์ ๊ฐ์๋ฅผ ์ผ๋ค.
์ด์ ๋ถํฐ ์๋ ์ฌ์ค์ ์ฆ๋ช ํ๊ฒ ๋ค. ๋ด๋ถ ๋ ธ๋๋ NIL ๋ ธ๋๋ฅผ ์ ์ธํ ๋ ธ๋๋ผ๋ ๊ฒ์ ์๊ธฐํ์.
V์ ์๋ธํธ๋ฆฌ์ ๋ด๋ถ ๋ ธ๋ ๊ฐ์ >= 2^bH(v) - 1
์ฆ๋ช ์ H(v), V์ Height์ ๋ํ ๊ท๋ฉ๋ฒ(induction)์ผ๋ก ํ ์ ์๋ค.
Base Case : H(v) = 0
H(v)๊ฐ ๊ฐ์ฅ ์์ ๋๋ 0์ด๋ค. ๋์ด๊ฐ 0์ด๋ผ๋ ๊ฒ์ ๋ฆฌํ ๋ ธ๋๋ฐ์ ์๋ค๋ ๊ฒ์ด๋ค.
๋ฆฌํ ๋ ธ๋๋ NIL node์ด๋ค. NIL node๋ Black์ด๋ค.
์ฆ, bH(v)๋ 0์ด๋ค.
H(v) = 0 ์ผ ๋, bH(v) = 0์ด๋ค.
v์ ์๋ธํธ๋ฆฌ์ ๋ด๋ถ ๋ ธ๋ ๊ฐ์๋ 0์ผ ๊ฒ์ด๋ค.
2^bH(v)๋ 2์ 0์น์ผ๋ก, 1์ผ ๊ฒ์ด๋ค.
์ฆ, 0 = 0์ผ๋ก ์์ ๊ณต์์ด ์ฑ๋ฆฝํ๋ค.
Hypothesis : H(v) <= k
H(v)๊ฐ ํน์ ํ ์ K๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ๋์ด์ ๋ํด์โฆ
| v์ ์๋ธํธ๋ฆฌ | >= 2^bH(v) - 1
์ด๋ผ๊ณ ๊ฐ์ ํด๋ณด์.
๊ฐ์ ์ด๊ธฐ ๋๋ฌธ์ ์ฆ๋ช ํ ํ์๋ ์๋ค.
Induction : H(v) = k + 1์ผ ๋ ์ฑ๋ฆฝํจ์ ์ฆ๋ช
ํด๋น ๋ถ๋ถ์ ์ ํ๋ธ ๊ฐ์๋ฅผ ์ฐธ๊ณ ํ๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค.
๊ทธ๋ ค๋ณด๋ ค๊ณ ํ๋๋ฐ ์ฌ๋ฅ์ด ๋ชจ์๋ผ์ ๋งํฌ๋ก ๋์ ํ๋ค.
Last updated