์ด์ง ๊ฒ์ ํธ๋ฆฌ (Binary Search Tree - BST)
์ด์ง ๊ฒ์ ํธ๋ฆฌ๋ ์ด์งํธ๋ฆฌ(Binary Tree)์ ํ ์ข ๋ฅ์ด๋ฉฐ, ๋น์ด์๊ฑฐ๋ ๋ค์ ์กฐ๊ฑด์ ๋ง์กฑํด์ผ ํฉ๋๋ค.
1. ๋ชจ๋ ์์๋ Key๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ์ด๋ ํ ์์๋ ๋์ผํ ํค๋ฅผ ๊ฐ์ง์ง ์์ต๋๋ค. ์ฆ Key๋ ์ ์ผํฉ๋๋ค.
2. ํธ๋ฆฌ์ ๋ฃจํธ๋ ๋น์ด์์ง ์์ ์ผ์ชฝ ์๋ธํธ๋ฆฌ์ ์๋ Key๋ณด๋ค ํฐ ๊ฐ์ ๊ฐ์ง๋๋ค.
2. ํธ๋ฆฌ์ ๋ฃจํธ๋ ๋น์ด์์ง ์์ ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ์ ์๋ Key๋ณด๋ค ์์ ๊ฐ์ ๊ฐ์ง๋๋ค.
4. ์ผ์ชฝ ์๋ธํธ๋ฆฌ์ ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ๋ ๋๋ค์ ์ด์ง๊ฒ์ํธ๋ฆฌ์ ๋๋ค.
์ด์ง ๊ฒ์ ํธ๋ฆฌ๋ AVLํธ๋ฆฌ, 2-3ํธ๋ฆฌ, Bํธ๋ฆฌ, ๋ ๋-๋ธ๋ ํธ๋ฆฌ ๋ฑ, ์์ผ๋ก ๋ฐฐ์ธ ์ฌ๋ฌ ํธ๋ฆฌ๋ค์ ๊ธฐ๋ณธ์ด ๋๋ ์๋ฃ๊ตฌ์กฐ์ด๋ฏ๋ก ํ์คํ๊ฒ ์๊ณ ๋์ด๊ฐ์ผ ํฉ๋๋ค.
์๊ฐ๋ณต์ก๋
์ด์ง ๊ฒ์ ํธ๋ฆฌ๋ ์์์ ์ฝ์ ๊ณผ ์ญ์ , ๊ฒ์์ ์์ด์ ํ๊ท ์ ์ผ๋ก log n์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋๋ค.
์ ๋ ฌ๋์ง ์์ ๋ฐฐ์ด | ์ ๋ ฌ๋ ๋ฐฐ์ด | ์ด์ง๊ฒ์ํธ๋ฆฌ(BST) | |
์ฝ์ | $$O(1)$$ | $$O(n)$$ | $$O(log\;n)$$ |
์ญ์ | $$O(n)$$ | $$O(n)$$ | $$O(log\;n)$$ |
๊ฒ์ | $$O(n)$$ | $$O(log\;n)$$ | $$O(log\;n)$$ |
๊ทธ๋ฌ๋ ์ด์ง ๊ฒ์ ํธ๋ฆฌ๋ ์์๋ค์ด ์ฝ์ ๋๋ ์์์ ๋ฐ๋ผ, ์ต์ ์ ๊ฒฝ์ฐ ํ์ชฝ์ผ๋ก ์น์ฐ์น ์ฌํฅ ์ด์ง ํธ๋ฆฌ๊ฐ ๋ ์๋ ์์ต๋๋ค.
์ด๋ฌํ ๊ฒฝ์ฐ LinkedList์ ๋ณ๋ฐ ๋ค๋ฅผ๊ฒ์ด ์๋ ๊ตฌ์กฐ๊ฐ ๋๋ฉฐ, ์๊ฐ ๋ณต์ก๋๋ O(n)์ผ๋ก ์ฆ๊ฐํฉ๋๋ค.
์ด๋ฌํ ๋ฌธ์ ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด BST์ ๊ท ํ์ ๋ง์ถ์ด์ฃผ๋ ๋ค์ ํธ๋ฆฌ๋ค์ ์ฌ์ฉํฉ๋๋ค.
AVL Tree, 2-3 Tree , Red-Black Tree, B-tree, ...
์๊ฐ ๋ณต์ก๋์ ํธ๋ฆฌ์ ๋์ด์ ๊ด๊ณ
์ด์ง ๊ฒ์ ํธ๋ฆฌ์์๋ ์ฝ์ , ์ญ์ , ๊ฒ์ ๋ชจ๋ $log \;n$ ์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋๋ค.
์ด์งํธ๋ฆฌ์ ๋ ธ๋์ ๊ฐ์๊ฐ n์ผ ๋ ์์ ์ด์งํธ๋ฆฌ์ ๊ฒฝ์ฐ ๋์ด๋ $[log2(n)]+1$ ์ด๋ฉฐ,
๋ฐ๋ผ์ ์์ ์ ์ด ํ์๋ $log_2(n)$ ๋ฒ์ ๋์ง ์์ต๋๋ค.
๋ฐ๋ผ์ ์ฝ์ , ์ญ์ , ๊ฒ์์ ์๊ฐ๋ณต์ก๋๋ ํ๊ท ์ ์ผ๋ก ํธ๋ฆฌ์ ๋์ด๋งํผ์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋๋ค.
๊ทธ๋ฌ๋ ๋ชจ๋ ์ํฉ์์ ์ด์ง ๊ฒ์ ํธ๋ฆฌ๊ฐ ์์ ์ด์ง ํธ๋ฆฌ๊ฐ ๋๊ธฐ๋ ์ด๋ ต์ต๋๋ค.
ํ๊ท ์ ์ผ๋ก ๋ฐ์ดํฐ๊ฐ ๋๋คํ๊ฒ ๋ค์ด์ค๋ ๊ฒฝ์ฐ ์์ ์ด์ง ํธ๋ฆฌ์ ์๋ ดํ๊ฒ ์ผ๋,
ํธ๋ฆฌ๊ฐ ํ์ชฝ์ผ๋ก ์น์ฐ์น ํธํฅ ์ด์ง ํธ๋ฆฌ(skewed binary tree)์ ๊ฒฝ์ฐ ์๊ฐ ๋ณต์ก๋๋ O(n) ๊น์ง ์ฆ๊ฐํ ์ ์์ต๋๋ค.
์ด์ง ๊ฒ์ ํธ๋ฆฌ์ ์ฝ์
์ฝ์ ์ ๊ฐ๋จํฉ๋๋ค.
์ฝ์ ํ ๊ฐ์ Key์ ๋ฃจํธ์ Key๋ฅผ ๋น๊ตํ์ฌ, ์ถ๊ฐํ๋ ค๋ Key์ ๊ฐ์ด ์์ผ๋ฉด ์ผ์ชฝ์ผ๋ก, ํฌ๋ค๋ฉด ์ค๋ฅธ์ชฝ์ผ๋ก ์งํํ์ฌ, ๋ค์ ์์น์ ๋ ธ๋๊ฐ ์กด์ฌํ์ง ์๋๋ค๋ฉด ์ถ๊ฐํฉ๋๋ค.
์ด์ง ๊ฒ์ ํธ๋ฆฌ์ ์ญ์
์ธ๊ฐ์ง ๊ฒฝ์ฐ๋ก ๋๋ ์ ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
์ ๋ ธ๋์ ์ญ์
์ ๋ ธ๋์ ๊ฒฝ์ฐ ๋ฐ๋ก ์ญ์ ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
์์์ด 1๊ฐ์ธ ๋ ธ๋์ ์ญ์
๋ ธ๋๋ฅผ ์ญ์ ํ ๋ค, ์์ ๋ ธ๋๋ฅผ ๋ถ๋ชจ ๋ ธ๋ ์์น๋ก ์ฎ๊ฒจ์ฃผ๋ฉด ๋ฉ๋๋ค.
์์์ด 2๊ฐ์ธ ๋ ธ๋์ ์ญ์
๋ ธ๋๋ฅผ ์ญ์ ํ ํ, ํด๋น ๋ ธ๋์ ์ข์ธก ์๋ธํธ๋ฆฌ ์ค ์ต๋๊ฐ์ ์ฐพ์ ์ญ์ ํ ๋ ธ๋์ ์์น๋ฅผ ๋์ ํฉ๋๋ค.
์ด๋ ์ข์ธก ์๋ธํธ๋ฆฌ์ ์ ์ฅ์์๋ ๋ ธ๋๊ฐ ํ๋ ์ญ์ ๋๋ ํํ์ธ๋ฐ, ์ด๋ ์ ๋ ธ๋ ํน์ ์์ ๋ ธ๋๊ฐ 1๊ฐ์ธ ๋ ธ๋์ ์ญ์ ๋ก ์๊ฐํ ์ ์์ต๋๋ค.
์ด์ง ๊ฒ์ ํธ๋ฆฌ ์ค๋ฆ์ฐจ์์ผ๋ก ์ถ๋ ฅํ๊ธฐ
์์ ์ด์ง ํธ๋ฆฌ๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก ์ถ๋ ฅํ๊ธฐ ์ํด์๋ ์ค์ ํ์(Inorder traversal)์ ์งํํ๋ฉด ๋ฉ๋๋ค.
์ค์ ํ์์ ์์๋ left -> root -> right์ ์์๋ก, ์ด๋ BST ์ ์ฅ์์ left๋ root๋ณด๋ค ์์ ๊ฐ, right๋ root๋ณด๋ค ํฐ ๊ฐ์ด๋ฏ๋ก, ์ค๋ฆ์ฐจ์์ ์ถ๋ ฅ ์์์ ๋์ผํฉ๋๋ค.
์ด์ง ๊ฒ์ ํธ๋ฆฌ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ถ๋ ฅํ๊ธฐ
์์ ์ด์ง ํธ๋ฆฌ๋ฅผ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ถ๋ ฅํ๊ธฐ ์ํด์๋ ์ค์ ํ์์ ์ญ์ผ๋ก ์งํํ๋ฉด ๋ฉ๋๋ค.
์ฆ right -> root -> left์ ์์๋ก ์ถ๋ ฅํ๋ฉด ์ด๋ ๋ด๋ฆผ์ฐจ์์ด ๋ฉ๋๋ค.
์๋ฐ๋ก ๊ตฌํ
https://ttl-blog.tistory.com/707
์ด์ง ๊ฒ์ ํธ๋ฆฌ ์๋ฎฌ๋ ์ดํฐ
https://www.cs.usfca.edu/~galles/visualization/BST.html
'๐ฅ Computer Science > ์๋ฃ๊ตฌ์กฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๋ฃ๊ตฌ์กฐ] - ์ฐ์ ์์ ํ(Priority Queue) (0) | 2022.06.06 |
---|---|
[์๋ฃ๊ตฌ์กฐ] - ํ(Heap) (0) | 2022.06.06 |
[์๋ฃ๊ตฌ์กฐ] - ํธ๋ฆฌ(Tree)[5] - ์ด์ง ํธ๋ฆฌ์ ๊ตฌํ (0) | 2022.06.05 |
[์๋ฃ๊ตฌ์กฐ] - ํธ๋ฆฌ(Tree)[4] - ํธ๋ฆฌ์ ํ์ (์ํ) (0) | 2022.06.05 |
[์๋ฃ๊ตฌ์กฐ] - ํธ๋ฆฌ(Tree)[3] - ์ด์ง ํธ๋ฆฌ(Binary Tree) (0) | 2022.06.05 |