Balanced Tree - B-tree, Red-black tree, AVL tree
Balanced Tree(Balanced Tree)
์ด์ง ํธ๋ฆฌ๋ ์์์ ์ต๋ ๋ ๊ฐ๋ง ๊ฐ์ง์ผ๋ก์จ O(log N) ์ ํ์ ํจ์จ์ ๋ณด์ธ๋ค. ๊ทธ๋ฐ๋ฐ ์ข์ฐ ์๋ธํธ๋ฆฌ์ ๊ท ํ์ด ๋ง์ง ์์ ๋๋ ์ด๋ ํ ์ชฝ๋ง ํ์ํ๊ฒ ๋๋ฏ๋ก O(N) ์ด๋ผ๋ ๋นํจ์จ์ ์ธ ์ฑ๋ฅ์ ๋ณด์ฌ์ฃผ๋ ์ข์ฐ ๋ฐธ๋ฐ์ค๋ฅผ ๋ง์ถ ํ์๊ฐ ์๋ค. ๋ฃจํธ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ผ์ชฝ, ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ์ ๋ ธ๋ ๊ฐ์๊ฐ ๊ท ํ์ ์ด๋ฉด Balanced Tree ๋ผ๊ณ ํ๋ค. Blanced Tree ์๋ B-tree, red-black tree, AVL tree ๋ฑ์ด ์๋ค.
์ฌ๊ธฐ์ '๊ท ํ์ด ์กํ๋ค' ๋ผ๋ ๋ป์ ์์ชฝ ๋ ธ๋์ ์์ ๋ ธ๋๊ฐ 2๊ฐ ์ด์ ์ฐจ์ด๊ฐ ๋์ง ์๋, ์ฆ ๋์ด ์ฐจ์ด๊ฐ 2 ์ด์ ์ฐจ์ด๋์ง ์๋ ์ํ๋ฅผ ๋งํ๋ค. (1๊ฐ ๊น์ง๋ ๊ด์ฐฎ๋ค.) ๊ฐ์ ๋ ๋ฒจ์ ๊ฝ ์ฐจ ์๋ ๊ฒฝ์ฐ๋ ์์ ๊ท ํ์ด๋ผ๊ณ ํ๋ค.
B-tree
์ด์ง ํธ๋ฆฌ๋ฅผ ํ์ฅํด, ํ๋์ ๋ ธ๋๊ฐ ์ฌ๋ฌ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง ์ ์๋ ํธ๋ฆฌ์ด๋ค. ๋ ธ๋๊ฐ ๊ฐ์ง ๋ฐ์ดํฐ์ ๊ฐ์์ ๋ฐ๋ผ ์์ ๋ ธ๋์ ๊ฐ์๊ฐ ์ ํด์ง๋ค. ํ ๋ ธ๋๊ฐ ์ต์ n๊ฐ ์ด์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง B-tree ๋ฅผ n์ฐจ B-tree ๋ผ๊ณ ํ๋ฉฐ ํ์์ฐจ์๋ ์ง์์ฐจ์๋์ ๋ฐ๋ผ ์๊ณ ๋ฆฌ์ฆ์ด ๋ค๋ฅด๋ค. ์๋ ๊ท์น์ ๋ฐ๋ผ Balanced Tree ํํ๋ฅผ ์ ์งํ๋ค.
B-tree์ ๊ท์น
- ๋ ธ๋์ ๋ฐ์ดํฐ ๊ฐ์๊ฐ n๊ฐ๋ผ๋ฉด ์์ ๋ ธ๋์ ์๋ n+1๊ฐ๋ค.
- ๊ฐ ๋ ธ๋ ์์ ๋ฐ์ดํฐ๋ค์ ์ ๋ ฌ๋ ์ํ์ฌ์ผ ํ๋ค.
- ๋ฐ์ดํฐ์ ์ผ์ชฝ ์๋ธํธ๋ฆฌ๋ ๋ฐ์ดํฐ๋ณด๋ค ์์ ๊ฐ๋ค์ด๊ณ , ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ๋ ํฐ ๊ฐ๋ค์ด๋ค.
- ๋ฃจํธ ๋ ธ๋๋ ์ ์ด๋ 2๊ฐ ์ด์์ ์์์ ๊ฐ์ ธ์ผ ํ๋ค. (์์ ๋ ธ๋์ ์๊ฐ n+1๊ฐ์ฌ์ผ ํ๋๊น)
- n์ฐจ B-tree๋ ๋ฃจํธ ๋ ธ๋๋ฅผ ์ ์ธํ ๋ชจ๋ ๋ ธ๋๊ฐ ์ ์ด๋ n๊ฐ ์ด์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ผ ํ๋ค.
- leaf ๋ ธ๋๋ ๊ฐ์ ๋ ๋ฒจ์ ์์ด์ผ ํ๋ค.
- ์ ๋ ฅ๋ ๋ฐ์ดํฐ๋ ์ค๋ณต๋ ์ ์๋ค.
AVL Tree
์ค์ค๋ก ๊ท ํ์ ์ก๋ Self-Balancing ์ด ์ ์ฉ๋ ์ด์ง ํ์ ํธ๋ฆฌ๋ค. ์ด์ง ํ์ ํธ๋ฆฌ์ ๊ฒฝ์ฐ ๋ทธ๊ท ํ ์ํ์์๋ O(N)์ด๋ผ๋ ์ฑ๋ฅ์ ๋๋ฏ๋ก ์ฑ๋ฅ์ด ๋จ์ด์ง์ง ์๊ฒ ๊ท ํ์ ์ ์งํ๊ฒ ํ ๊ฒ์ด๋ค. ์ฐธ๊ณ ๋ก AVL ์ ์ด ์๋ฃ๊ตฌ์กฐ๋ฅผ ๋ง๋ ์ฌ๋๋ค์ ์ ์ด๋ฆ์ ๋๋ค๊ณ ํ๋ค...
AVL ํธ๋ฆฌ์์๋ ๊ฐ ๋ ธ๋๊ฐ Balance Factor(BF) ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ค. BF ๋ (์ผ์ชฝ ์๋ธํธ๋ฆฌ์ ๋์ด - ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ์ ๋์ด) ์ด๋ค. ๊ท ํ์ด ์ ์ง๋๊ณ ์๋ค๋ฉด BF ๋ -1, 0, 1์ ๊ฐ์ ๊ฐ์ง๋ค. ์ด ์ด์์ด ๋์ค๋ฉด ๊ท ํ์ด ๊นจ์ง ๊ฒ์ผ๋ก ๋ณด๊ณ ๐ ์ด์งํ์ํธ๋ฆฌ์ฒ๋ผ rotation ์ ํ๋ค.
Red-Black Tree
๋ง์ฐฌ๊ฐ์ง๋ก, ์ค์ค๋ก ๊ท ํ์ ์ก๋ Self-Balancing ์ด ์ ์ฉ๋ ์ด์ง ํ์ ํธ๋ฆฌ๋ค. AVL ํธ๋ฆฌ์ ๊ท ํ์ ์ก๋ ๊ท์น์ด ๋ค๋ฅด๋ค. ๊ฐ ๋ ธ๋์ Red or Black ์๊น์ ์ ์ฅํด, ์๊น์ ๊ธฐ์ค์ผ๋ก ๊ท ํ์ ๋ง์ถ๋ค. ๊ท ํ์ ์๋์ ๊ฐ์ ๊ท์น์ผ๋ก ์ ์ง๋๋ค. ์๋ ๊ท์น์ ๋ฐ๋ฅด๋ฉด ๋ฃจํธ๋ถํฐ ๋ฆฌํ๊น์ง ๋ธ๋ ๋ ธ๋์ ๊ฐ์๊ฐ ๊ฐ์์ง๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ๊ท ํ์ ์ก๊ธฐ ์ํด ์ด์งํ์ํธ๋ฆฌ์ฒ๋ผ rotation ์ ํ๋ค.
๋ ์ค๋ช ํด์๋ฉด, 2-3-4ํธ๋ฆฌ(3์ฐจ B-Tree์ ๋์ผํ ๊ตฌ์กฐ)๋ฅผ Balanced ํ๊ฒ ์ ์งํ ํธ๋ฆฌ์ด๋ค. ํ ๋ ธ๋๊ฐ ํ ๋ ธ๋ ์์ ๋ค์ด ์๋ 3 ๊ฐ์ ๋ฐ์ดํฐ ๊ฐ์ด๋ฐ๋ฅผ ๊ฒ์ ์, ์ ์์ ๋นจ๊ฐ์์ผ๋ก ๋๋ ๊ฒ.
Red-Black Tree ๊ท์น
- ๋ชจ๋ ๋ ธ๋๋ Red or Black ์ด๋ค.
- ๋ฃจํธ์ ๋ชจ๋ leaf ๋ ธ๋๋ Black ์ด๋ค.
- Red ๋ ธ๋์ ์์ ๋ ธ๋๋ ๋ชจ๋ Black ์ด๋ค. => No double red
- ๊ฐ์ ๋ ๋ฒจ์ ๋ ธ๋๋ค์ ๋ฆฌํ๋ ธ๋๊น์ง ๊ฐ๋ ๊ฒฝ๋ก์ ๊ฐ์ ์์ Black ๋ ธ๋๋ฅผ ํฌํจํ๋ค. => black height
AVL Tree vs Red-Black Tree
Red-Black Tree ๋ ์๋์ ์ผ๋ก AVL Tree ๋ณด๋ค ๊ท ํ์ด ๋์จํด์ rotation์ด ๊ฑฐ์ ์ด๋ฃจ์ด์ง์ง ์๋๋ค. ๋๋ฌธ์ AVL ํธ๋ฆฌ๋ณด๋ค ๋น ๋ฅด๊ฒ ์ฝ์ /์ญ์ ์ฐ์ฐ์ ์ํํ๋ค. ๋ AVL ํธ๋ฆฌ๋ BF ๋ผ๋ int ๊ฐ์ ๊ฐ์ง๊ณ ์์ด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ ์ก์๋จน๋๋ค. Red-Black ํธ๋ฆฌ๋ 2๊ฐ์ง ์์์ด๋ฏ๋ก bit ๊ฐ์ด ๋ ๊ฐ์ง ๊ฐ๋ง ํํํ๋ฉด ๋๋ค. ์ด๋ฐ ์ด์ ๋ค๋ก Red Black Tree ๊ฐ ๋ง์ด ์ฐ์ด๊ณ ์๋ค.