Red Black Tree
BST (์ด์ง ํ์ ํธ๋ฆฌ)๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ Tree.
๊ฐ ๋ ธ๋๋ ๊ฐ(key)๋ง๊ณ ๋ ์์ ๊ฐ๊ณ ์์ ๋ ๋ or ๋ธ๋ 2์ข ๋ฅ๋ค.
์ฝ์ , ์ญ์ , ํ์์ ์๊ฐ๋ณต์ก๋๋ O(log n)
RB Tree 4๊ฐ์ง ์กฐ๊ฑด
1. Root Property : ๋ฃจํธ(root)๋
ธ๋๋ ๋ธ๋(black)์ด๋ค.
2. External Property : ๋ชจ๋ ์ธ๋ถ ๋
ธ๋ (external node)๋ ๋ธ๋์ด๋ค.
3. Depth Property : ๋ชจ๋ ๋จ๋ง ๋
ธ๋(leaf node)์ ๊ฒฝ์ฐ ๋ฃจํธ๋ถํฐ ์ธ๋ถ ๋
ธ๋ ๊น์ง ๋ฐฉ๋ฌธํ๋ ๋ธ๋ ๋
ธ๋์ ์๊ฐ ๊ฐ๋ค.
4. Internal Property : ๋นจ๊ฐ ๋
ธ๋์ ์์์ ๋ธ๋์ด๋ค.
== No Double Red :๋ ๋ ๋
ธ๋๋ ๋๊ฐ๊ฐ ์ฐ์ํด์ ์ฌ ์ ์๋ค.
ํน์ง
BST์ ๋ชจ๋ ํน์ง์ ๊ฐ๋๋ค.๋ ธ๋์ ์์์ด ์๋ ๊ฒฝ์ฐ ์์์ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๋ NULL๊ฐ์ ์ ์ฅ ( NULL์
leaf node๋ก ๊ฐ์ฃผ)๋ฃจํธ ๋ ธ๋ ๋ถํฐ ๋จ๋ง ๋ ธ๋(leaf node)๊น์ง ๋ชจ๋ ๊ฒฝ๋ก ์ค ์ต์ ๊ฒฝ๋ก์ ์ต๋ ๊ฒฝ๋ก์ ํฌ๊ธฐ ๋น์จ์ 2๋ณด๋ค ํฌ์ง ์๋ค. (
balanced์ํ )
์ฌ์ฉ์
Java Collection์ ArrayList
HashMap์ Separate Chaining
C++ map
์ฅ์ (ํด์ฌ์ ๋น๊ตํด์)
์์๊ฐ ์๋ ์๋ฃ์ผ ๊ฒฝ์ฐ ์ข๋ค. ( ํด์ฌ๋ ์์๊ฐ ์์ )
์ผ๊ด์ฑ์๋ ํผํฌ๋จผ์ค๋ฅผ ๋ณด์ฌ์ค๋ค. ( ํด์ฌ๋ rehashing์ ๋น์ ์์ ์๊ฐ์ด ๊ฑธ๋ฆด ์ ์์ )
ํด์ฌ๋ ํ์ด์งํดํธ๋ฅผ ์ผ์ผํฌ ์ ์๋ค.
์ฐ์๋ ์ฝ์ ๊ฐ์ ๊ณต๊ฐ ์ง์ญ์ฑ์ ์ ์งํ๊ธฐ ์ฝ๋ค. ( ๋ ์ ์ I/O ๋ฐ์)
ํธ๋ฆฌ๋ ๋ถ์ ํํ ๊ฒ์์ ์ฌ์ฉ๋ ์ ์๋ค.
๊ตฌํ
Insert ( ์ฝ์ )
Delete ( ์ญ์ )
Search ( ํ์ )
์๊ฐ ๋ณต์ก๋
์ผ๋ฐ BST์ skewdํ ๊ฒฝ์ฐ๋ฅผ balancing๊ธฐ๋ฒ์ ํตํด balancedํ tree๋ฅผ ๋ง๋ค์์ผ๋ฏ๋ก ํ์๊ณผ์ ์ ์ํ๋ ๋๋ก O(lgn)์ด ๋์จ๋ค. ์ฝ์ ์ ์ผ๋ฐ BST์์ ์ต๋ 2๋ฒ์ rotate๊ณผ์ ๊ณผ ์ ๋ณํ์ด ์ถ๊ฐ ๋์๋ ๋ฐ, rotate๊ณผ์ ์ ํฌ์ธํฐ๋ณ์๋ฅผ ๊ตํํด์ฃผ๋ ๊ฒ์ด๋ฏ๋ก O(1)์ ์๊ฐ ๋ณต์ก๋์ ์๋ณํ๋ ๋จ์ํ ๋ณ์๊ฐ ๋ณ๊ฒฝ์ด๋ฏ๋ก O(1)์ ์ ๋ณํ์ด O(lgn)๋ฒ ์ผ์ด๋๊ธฐ ๋๋ฌธ์, O(lgn)์ ๊ฐ๋๋ค. ์ญ์ ๋ ์ฝ์ ๊ณผ ๋์ผํ ์ด์ ์ด๋ฉฐ, rotate๊ณผ์ ์ ์ต๋ 3๋ฒ์ด O(lgn)๋ฒ ์ผ์ด๋๊ธฐ ๋๋ฌธ์ O(lgn)์ด ๋์จ๋ค.
Last updated