aaTree
RB-Tree๋ฅผ ์์ฉํ ํธ๋ฆฌ๋ก RB-Tree์ ๋ง์ ์กฐ๊ฑด์ ์ผ๋ถ ์ ๊ฑฐํ์ฌ ๊ตฌํ์ ๋ ๊ฐ๋จํ๊ฒ ๋ง๋ ํธ๋ฆฌ๋ก ๊ท ํ์ ๋ง์ถ๊ธฐ ์ํด ๋ ๋ฒจ์ ๊ฐ๋
์ ์ฌ์ฉํ ํธ๋ฆฌ์ด๋ค.
๋ถ๋ชจ์ ๋ ๋ฒจ์ด ๊ฐ์ ์์ ๋
ธ๋์ ์ฐ๊ฒฐ์ ์ํ ๋งํฌ๋ผ๊ณ ํ๋ฉฐ, ์ด ๋
ธ๋๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํด RED๋ผ๋ ๊ฐ๋
์ ์ด์ฉํ๋ค.
1. ํน์ง
์ผ์ชฝ ์์์ RED๊ฐ ๋ ์ ์๋ค.
์ฐ์์ผ๋ก RED๊ฐ ์ฌ ์ ์๋ค. (์ด์ค RED ๋ถ๊ฐ == ์ด์ค ์ํ ๋งํฌ)
๋ฃจํธ์์ null๊ฐ์ง leafnode๊น์ง์ ๊ฒฝ๋ก์๋ ๋์ผํ ์์ ๋ธ๋ ๋ ธ๋๊ฐ ์กด์ฌํ๋ค. (RB Tree์ ๊ท์น)
๋ชจ๋ leaf node์ ๋ ๋ฒจ์ 1์ด๋ค
๋ชจ๋ ์ผ์ชฝ ์์์ ๋ ๋ฒจ์ ๋ถ๋ชจ์ ๋ ๋ฒจ๋ณด๋ค 1 ๋ฎ๋ค
๋ชจ๋ ์ค๋ฅธ์ชฝ ์์์ ๋ ๋ฒจ์ ๋ถ๋ชจ์ ๊ฐ๊ฑฐ๋ 1 ๋ฎ๋ค
๋ชจ๋ ์ค๋ฅธ์ชฝ ์์์ ๋ ๋ฒจ์ ํ ์๋ฒ์ง ๋ ธ๋๋ณด๋ค ๋ฎ๋ค
1๋ณด๋ค ํฐ ๋ ๋ฒจ์ ๋ชจ๋ ๋ ธ๋๋ค์ 2๊ฐ์ ์์์ ๊ฐ๋๋ค
{
}
์ผ์ชฝ ํธ๋ฆฌ๋ฅผ ์ผํ ๋ณด๋ฉด RB-Tree๊ฐ์ง๋ง ์ผ์ชฝ ์์์ RED๋ฅผ ๊ฐ์ง ์๋ AA-Tree์ด๊ณ , ์ด๋ฅผ ๋ ๋ฒจ์ ๊ธฐ์ค์ผ๋ก ๋ณด๋ฉด ์ค๋ฅธ์ชฝ๊ณผ ๊ฐ์ด ๊ทธ๋ ค ๋ณผ ์ ์๋ค.
2. ์ฌ์ฉ ๊ธฐ๋ฒ
๐ Split
์ด์ค ์ํ ๋งํฌ(์ด์ค red)์ผ ์ ํด๊ฒฐํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ผ๋ก ์ง๊ธ๊น์ง ๋ค๋ฅธ BBST์ ๋์ผํ๊ฒ rotate์ ๊ฐ๋ ์ด๋ค.
{
}
์ด์ค red๊ฐ ์๊ธฐ๋ ๊ฒฝ์ฐ๋ ์ ์ฌ์ง๊ณผ ๊ฐ์ด ๋ฌด์กฐ๊ฑด ์ค๋ฅธ์ชฝ ๋ฐฉํฅ์ผ๋ก ์๊ธฐ๊ธฐ ๋๋ฌธ์ ํ ์๋ฒ์ง ๋ ธ๋(35) ๊ธฐ์ค์ผ๋ก left๋ฐฉํฅ์ผ๋ก๋ง rotate์ํค๊ณ ์์ ๋ฐ๊ฟ ์ฃผ๋ฉด ๋๋ค.
ํน์ง์ผ๋ก Split์ ์ํํ๋ฉด level์ด ๋ฌ๋ผ์ง๋ค.
๐ Skew
red๊ฐ ์ผ์ชฝ์์์ผ๋ก ์์น ํ ๊ฒฝ์ฐ ๊ท์น์ ์๋ฐฐ๋๊ธฐ ๋๋ฌธ์ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๋ฌธ์ ๊ฐ ๋๋ ๋ ธ๋(40)๊ณผ ๋ถ๋ชจ ๋ ธ๋(50)์ right rotate ์ํค๊ณ ์์ ๋ฐ๊ฟ ์ด์ค ๋ ๋๋ก ๋ง๋๋ ๋ฐฉ๋ฒ์ด๋ค.
{
}
Skew๋ ํ์ ์ ์ํํด๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋์ผํ level์ ์์์ ๋ฐ๋๋ค.
3. ๊ตฌํ
์์์ ๋งํ ๊ฒ์ฒ๋ผ ์ค์ ๊ตฌํ์ ์์ด, ์ค์ red / black์ ๊ฐ์ ๊ฐ๋ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ์ง ์์๋ ๊ตฌํ์ด ๊ฐ๋ฅํ๋ค. ๋์ level์ ์ ์ฅํ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํด์ผ ํ๋ค.
๐ ์ฝ์
BST๊ท์น์ ๋ง๊ฒ ์ฝ์ ํ ๋ฌธ์ ๊ฐ ๋๋ ๋ ธ๋๋ฅผ Split๊ณผ Skew๋ฅผ ํตํด rebalancingํ๋ฉฐ root๊น์ง ์ฌ๋ผ๊ฐ๋ฉด์ ๊ท์น์ ์๋ฐฐ๋์ง ์์ ๋ ๊น์ง split๊ณผ skew๋ฅผ ์ํํ๋ฉด ๋๋ค.
๐ ์ญ์
1. ์ญ์ ํ ๋ ธ๋๊ฐ red leafnode
๊ทธ๋ฅ ์ ๊ฑฐํ๋ฉด ๋๋ค.
2. ์ญ์ ํ ๋ ธ๋๊ฐ ํ๋์ leaf node ์์์ ๊ฐ๋ ๋ด๋ถ ๋ ธ๋ ์ธ ๊ฒฝ์ฐ
์ญ์ ํ ๋ ธ๋๋ ๊ฒ์์์ด๊ณ , ์์์ ๋ ๋์ผ ์ ๋ฐ์ ์๊ธฐ ๋๋ฌธ์ ์์๊ณผ ๊ฐ์ ๊ตํ ํ, ์ญ์ ํ๋ฉด ๋๋ค.
3. ๋๊ฐ์ ์์์ด ์๊ณ successor๊ฐ red์ผ ๊ฒฝ์ฐ
์ด๋ red๊ฐ leafnode์ผ ๊ฒฝ์ฐ๋ฐ์ ์๊ธฐ ๋๋ฌธ์ ๊ฐ์ ๊ตํ ํ leafnode๋ฅผ ์ญ์ ํ๋ฉด ๋๋ค.
4. ๋๊ฐ์ ์์์ด ์๊ณ successor๊ฐ ํ ๊ฐ์ leaf node ์์์ ๊ฐ๋ ๊ฒฝ์ฐ
๊ฐ์ ๊ตํ ํ 2๋ฒ ๊ท์น ์ ์ฉํ๋ฉด ๋๋ค.
5. ๋๊ฐ์ ์์์ด ์๊ณ , Successor๊ฐ black leaf node ์ด๊ฑฐ๋ ์ญ์ ํ ๋ ธ๋๊ฐ black leaf node ์ผ ๊ฒฝ์ฐ
black leaf node๋ฅผ ์ญ์ ์ ๋ ๋ฒจ 2์ด์์ ๋ ธ๋๋ 2๊ฐ์ ์์์ ๊ฐ๋ ๋ค๋ ๊ท์น์ด ๊นจ์ง๋ฏ๋ก ์๋์ ๊ฐ์ ๊ณผ์ ์ ์ํํด์ฃผ์ด์ผ ํ๋ค.
{
}
Leaf node๋ฅผ ์ญ์ ํ๊ณ ๊ทธ ๋ถ๋ชจ ๋ ธ๋(15)์ ๋ ๋ฒจ์ ํ ๋จ๊ณ ๊ฐ์์ํจ๋ค.
{
}
ํ ์๋ฒ์ง ๋ ธ๋(30)์ ๋ ๋ฒจ๊ณผ ๋ถ๋ชจ ๋ ธ๋์ ๋ ๋ฒจ์ด 2์ด์ ์ฐจ์ด ๋๋ค๋ฉด ํ ์๋ฒ์ง ๋ ๋ฒจ๋ 1๊ฐ์์ํจ๋ค. {
}
๋, ํ ์๋ฒ์ง ๋ ธ๋์ ์ค๋ฅธ์ชฝ ์์(80)์ด red์ผ ๊ฒฝ์ฐ ์ค๋ฅธ์ชฝ ์์๋ ๋ ๋ฒจ 1๊ฐ์ ์ํจ๋ค. {
}
๊ทธ ํ, ํ ์๋ฒ์ง ๋ ธ๋(30)๋ฅผ ๊ธฐ์ค์ผ๋ก skew, ํ ์๋ฒ์ง ์ค๋ฅธ์ชฝ ์์(80)์ ๋ ธ๋ ๊ธฐ์ค์ผ๋ก skew ํ๋ค. {
}
ํ ์๋ฒ์ง(30) ์ค๋ฅธ์ชฝ ์์ ๋ ธ๋(80)๋ฅผ ๊ธฐ์ค์ผ๋ก skew๋ฅผ ์ํํ๋ค.
{
}
๊ทธ ํ, ํ ์๋ฒ์ง ๋ ธ๋(30)์ ๊ธฐ์ค์ผ๋ก split์ ์ํํ๋ค.
{
}
๋ง์ง๋ง์ผ๋ก ํ ์๋ฒ์ง ๋ ธ๋์ ์ค๋ฅธ์ชฝ ์์(60)์ ๊ธฐ์ค์ผ๋ก split์ ์ํํ๋ค.
๐ ์ํ ๊ณผ์
์ผ๋ฐ BST์ ๋์ผํ๊ฒ ์ ์ / ์ค์ /ํ์ ๋ก ์ํ๋ฅผ ํ๋ ๋ฐฉ๋ฒ์ด ์๋ค.
๐ ํ์ ๊ณผ์
AA Tree๋ํ, BBST์ด๋ฏ๋ก ํ์ ๋ฐฉ๋ฒ์ ๋์ผํ๊ณ O(lgn)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๋ณด์ฅํ๋ค.
4. ์๊ฐ ๋ณต์ก๋
์ฝ์ ๊ณผ ์ญ์ ๊ณผ์ ์์ rotate๊ฐ ์ผ์ด๋๋๋ฐ ์ด๋ O(1)๋งํผ์ ์๊ฐ์ด ์์๋๊ณ ์ด rotate๊ฐ ์ต๋ O(lgn) ๋งํผ ์ผ์ด๋๊ธฐ ๋๋ฌธ์ O(lgn)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ๋๋ค.
5. RB Tree์ ๋น๊ต
RB-Tree์ ๋น๊ตํด์ ์์์ ์ผ์ชฝ์ ์๋ ์ค๋ฅธ์ชฝ์ ์๋ ๋์นญ์ด์ง๋ ์๊ณ ๋ฌด์กฐ๊ฑด ํ์ชฝ๋ฐฉํฅ์ผ๋ก๋ง ํ์ ๋ ํ ์ ์๊ณ case ์๋ ํจ์ฌ ์ ์ด ๊ตฌํ์ด ๊ฐ๋จํ๋ฉฐ, red/black์ ์ค๋ช ์ ์ฝ๊ฒ ํ๊ธฐ ์ํด ๊ตฌ๋ถ ์ง์ด ์ค๋ช ํ ๊ฒ์ด์ง ์ค์ ๊ตฌํ์ ์์ด์๋ red/black์ ๊ฐ์ ๊ฐ๋ ์ถ๊ฐ ๋ฐ์ดํฐ๊ฐ ํ์ํ์ง ์๋ค. (์์์ด์ง๋ง ๊ฐ์ ๋ ๋ฒจ์ ์๋ ์์์ red๋ผ๊ณ ๋ช ๋ช ํ์ ๋ฟ)
๊ตฌํ ์ฝ๋
๐ ๊ตฌํ ์ฝ๋ (c++) ( ์ ๊ธฐ / ํผ์น๊ธฐ )
Last updated