BST (Binary Search Tree) ๋?
์ด์งํ์ํธ๋ฆฌ(Binary Search Tree; BST)๋ ์ ๋ ฌ๋ tree์ด๋ค.
์ด๋ node๋ฅผ ์ ํํ๋ ํด๋น node์ left subtree์๋ ๊ทธ node์ ๊ฐ๋ณด๋ค ์์ ๊ฐ๋ค์ ์ง๋ node๋ค๋ก๋ง ์ด๋ฃจ์ด์ ธ ์๊ณ , node์ right subtree์๋ ๊ทธ node์ ๊ฐ๋ณด๋ค ํฐ ๊ฐ๋ค์ ์ง๋ node๋ค๋ก๋ง ์ด๋ฃจ์ด์ ธ ์๋ binary tree์ด๋ค.
๊ฒ์๊ณผ ์ ์ฅ, ์ญ์ ์ ์๊ฐ๋ณต์ก๋๋ ๋ชจ๋ O(logn)์ด๊ณ , worst case๋ ํ์ชฝ์ผ๋ก ์น์ฐ์น tree๊ฐ ๋์ ๋ O(n)์ด๋ค.
BST๋ ์ ์ฅ๊ณผ ๋์์ ์ ๋ ฌ์ ํ๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค. ๋ฐ๋ผ์ ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋ ์ผ์ ํ ๊ท์น์ ๋ฐ๋ผ ์ ์ฅ์ ํ๊ฒ๋๋ค. ์๋ ์๋ฆฌ๋ฅผ ๊ทธ๋ฆผ์ผ๋ก ์ค๋ช ํ ์ ์์ผ๋ฉด ์ข๋ค.
์ด์งํ์ํธ๋ฆฌ๊ฐ ๋๊ธฐ ์ํ ์กฐ๊ฑด์ด ๋ฌด์์ธ์ง, ์๊ฐ๋ณต์ก๋, worst case, worst case๊ฐ ๋ฐ์ํ์ง ์๊ฒ ํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ ์๋ ๊ฒ์ด ์ค์ํ๋ค.
BST ์กฐ๊ฑด
- root node์ ๊ฐ๋ณด๋ค ์์ ๊ฐ์ left subtree์, ํฐ ๊ฐ์ right subtree์ ์๋ค.
- subtree๋ 1๋ฒ ์กฐ๊ฑด์ ๋ง์กฑํ๋ค.(Recursive)
search O(logn)
Hash table ์ด๋?
hash table์ ํจ์จ์ ์ธ ํ์(๋น ๋ฅธ ํ์)์ ์ํ ์๋ฃ๊ตฌ์กฐ๋ก์จ key-value์์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅ ๋ฐ๋๋ค.
hash function h์ key๊ฐ์ ์ ๋ ฅ์ผ๋ก ๋ฃ์ด ์ป์ ํด์๊ฐ h (k)๋ฅผ ์์น๋ก ์ง์ ํ์ฌ key-value ๋ฐ์ดํฐ์์ ์ ์ฅํ๋ค.
์ ์ฅ, ์ญ์ , ๊ฒ์์ ์๊ฐ๋ณต์ก๋๋ ๋ชจ๋ O(1)์ด๋ค.
์ข์ hash function์ ํต์ฌ์ ์ธ ์กฐ๊ฑด์ ํด์๊ฐ์ด ๊ณ ๋ฅด๊ฒ ๋ถํฌ๋๊ฒ ํ๋ ๊ฒ์ด๋ค.
๋ฉด๋ฒ์์ hahs table์ด ์ค์ํ ์ด์
- ์ค๋ฌด์์ ํ์ฉ๋๊ฐ ๋์ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
- Linked list, Array ๋ ๋์๊ฐ๋ฉด Tree๊น์ง ์ง๋ฌธํ ์ ์๋ค.
- ์๊ฐ๋ณต์ก๋์ ๋ํด ๋ฌผ์ด๋ณด๊ธฐ ์ข๋ค.
Direct-address Table (์ง์ ์ฃผ์ํ ํ ์ด๋ธ)
Direct-address Table์ด๋, key ๊ฐ์ผ๋ก k๋ฅผ ๊ฐ๋ ์์๋ index k์ ์ ์ฅํ๋ ๋ฐฉ์์ด๋ค.
key: ์ถ์๋ฒํธ, value: ์ด๋ฆ
(3, ๋
ธ์ ํธ)
(5, ๋ฐฐ์ค์)
(6, ์ ์ฌํ)
(7, ๋จ์์ฑ)
์ง์ ์ฃผ์ํ ๋ฐฉ๋ฒ์ผ๋ก ํตํด key-value ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์ ํ๋ฉด ๋ง์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
- ๋ถํ์ํ ๊ณต๊ฐ๋ญ๋น
key: ์ถ์๋ฒํธ, value: ์ด๋ฆ
(2022390, ๋
ธ์ ํธ)
(2022392, ๋ฐฐ์ค์)
(2022393, ์ ์ฌํ)
(2022401, ๋จ์์ฑ)
- key๊ฐ ๋ค์ํ ์๋ฃํ์ ๋ด์ ์ ์๊ฒ ๋จ
key: ์ถ์๋ฒํธ, value: ์ด๋ฆ
(nossi8128, ๋
ธ์ ํธ)
(js9876, ๋ฐฐ์ค์)
(zebra001, ์ ์ฌํ)
(nam1234, ๋จ์์ฑ)
(key, value) ๋ฐ์ดํฐ ์์ ์ ์ฅํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ผ๋ก ์ง์ ์ฃผ์ํ ๋ฐฉ๋ฒ์ด ์ ๋ง์ง ์๋๋ค.
Hash table
hash table์ hash function h๋ฅผ ์ด์ฉํด์ (key, value)๋ฅผ index: h(k)์ ์ ์ฅํ๋ค.
์ด ๋, "ํค k๊ฐ์ ๊ฐ๋ ์์๊ฐ ์์น h(k)์ hash๋๋ค." ๋ผ๊ณ ํํํ๋ค.
key๋ ๋ฌด์กฐ๊ฑด ์กด์ฌํด์ผ ํ๋ฉฐ, ์ค๋ณต๋๋ key๊ฐ ์์ด์๋ ์๋๋ค.
hash table์ ๊ตฌ์ฑํ๊ณ ์๋, (key, value) ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์๋ ๊ฐ๊ฐ์ ๊ณต๊ฐ์ slot ๋๋ bucket์ด๋ผ๊ณ ํ๋ค.
Collision
collision์ด๋ ์๋ก ๋ค๋ฅธ key์ ํด์๊ฐ์ด ๋๊ฐ์ ๋๋ฅผ ๋งํ๋ค.
์ฆ, ์ค๋ณต๋๋ key๋ ์์ง๋ง ํด์๊ฐ์ ์ค๋ณต๋ ์ ์๋๋ฐ ์ด ๋ collision์ด ๋ฐ์ํ๋ค๊ณ ํ๋ค.
๋ฐ๋ผ์ collision์ด ์ต๋ํ ์ ๊ฒ ๋๋๋ก hash function์ ์ ์ค๊ณํด์ผํ๊ณ , ์ด์ฉ ์ ์์ด collision์ด ๋ฐ์ํ๋ ๊ฒฝ์ฐ seperate chaining ๋๋ open addressing ๋ฑ์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ ํด๊ฒฐํ๋ค.
์๊ฐ ๋ณต์ก๋์ ๊ณต๊ฐ ํจ์จ์ฑ
์๊ฐ๋ณต์ก๋ | ์ ์ฅ, ์ญ์ , ๊ฒ์ ๋ชจ๋ ๊ธฐ๋ณธ์ ์ผ๋ก O(1)์ด์ง๋ง, collision์ผ๋ก ์ธํ ์ต์ ์ ๊ฒฝ์ฐ O(n)์ด ๋ ์ ์๋ค. |
๊ณต๊ฐํจ์จ์ฑ | ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๊ธฐ ์ ์ ๋ฏธ๋ฆฌ ์ ์ฅ๊ณต๊ฐ(slot, bucket)์ ํ๋ณดํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๊ณต๊ฐํจ์จ์ฑ์ด ๋จ์ด์ง๋ค. ์ ์ฅ๊ณต๊ฐ์ด ๋ถ์กฑํ๊ฑฐ๋ ์ฑ์์ง์ง ์์ ๋ถ๋ถ์ด ๋ง์ ๊ฒฝ์ฐ๊ฐ ์๊ธธ ์ ์๋ค. |
Hash table์์ collision ํด๊ฒฐ ๋ฐฉ๋ฒ
collision์ด ๋ฐ์ํ ๊ฒฝ์ฐ ๋ํ์ ์ผ๋ก 2๊ฐ์ง ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์๋ค.
open addressing | collision์ด ๋ฐ์ํ๋ฉด ๋ฏธ๋ฆฌ ์ ํ ๊ท์น์๋ฐ๋ผ hash table์ ๋น์ด์๋ slot์ ์ฐพ๋๋ค. ๋น slot์ ์ฐพ๋ ๋ฐฉ๋ฒ์ ๋ฐ๋ผ ํฌ๊ฒ Linear Probing, Quadratic Probing, Double Hashing์ผ๋ก ๋๋๋ค. |
separete chaining | linked list๋ฅผ ์ด์ฉํ๋ค. collision์ด ๋ฐ์ํ๋ฉด linked list์ ๋ ธ๋(slot)๋ฅผ ์ถ๊ฐํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค. |
seperate chaining๊ณผ open addressing์ด ์ด๋ค ๋งค์ปค๋์ฆ์ผ๋ก ์๋ํ๋์ง, ์ด๋ค ์ฐจ์ด์ ์ด ์๋์ง ์์์ผ ํจ.
seperate chaining์ ๊ฒฝ์ฐ worst case์ ์๊ฐ๋ณต์ก๋์ ๋ํด ์ค๋ช ํ ์ค ์์์ผ ํ๋ค.
์ฝ์ ๊ณผ ์ญ์ , ๊ฒ์์ ์๊ฐ ๋ณต์ก๋๋ O(1)์ด์ง๋ง, worst case์ ๊ฒฝ์ฐ์๋ O(n)๊ฐ ๋ ์ ์๋ค.
Oepn addressing
open addressing ๋ฐฉ์์ collision์ด ๋ฐ์ํ๋ฉด ๋ฏธ๋ฆฌ ์ ํ ๊ท์ง์ ๋ฐ๋ผ hash table์ ๋น์ด์๋ slot์ ์ฐพ๋๋ค.
์ถ๊ฐ์ ์ธ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ฏ๋ก separate chaining ๋ฐฉ์์ ๋นํด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ๊ฒ ์ฌ์ฉํ๋ค.
addressing์ ๋น slot์ ์ฐพ๋ ๋ฐฉ๋ฒ์ ๋ฐ๋ผ ํฌ๊ฒ Linear Probing, Quadratic Probing, Double Hashing์ผ๋ก ๋๋๋ค.
Linear Probing (์ ํ ์กฐ์ฌ๋ฒ) & Quadratic Probing (์ด์ฐจ ์กฐ์ฌ๋ฒ) |
์ ํ ์กฐ์ฌ๋ฒ์ ์ถฉ๋์ด ๋ฐ์ํ ํด์๊ฐ์ผ๋ก ๋ถํฐ์ผ์ ํ ๊ฐ๋งํผ (+1, +2, +3, ...) ๊ฑด๋ ๋ฐ์ด, ๋น์ด ์๋ slot์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค. ์ด์ฐจ ์กฐ์ฌ๋ฒ์ ์ ๊ณฑ์ (+1^2, +2^2, +3^2, ...)๋ก ๊ฑด๋ ๋ฐ์ด, ๋น์ด ์๋ slot์ ์ฐพ๋๋ค. ์ถฉ๋์ด ์ฌ๋ฌ๋ฒ ๋ฐ์ํ๋ฉด ์ฌ๋ฌ๋ฒ ๊ฑด๋๋ฐ์ด ๋น slot์ ์ฐพ๋๋ค. ์ ํ ์กฐ์ฌ๋ฒ๊ณผ ์ด์ฐจ ์กฐ์ฌ๋ฒ์ ๊ฒฝ์ฐ ์ถฉ๋ ํ์๊ฐ ๋ง์์ง๋ฉด ํน์ ์์ญ์ ๋ฐ์ดํฐ๊ฐ ์ง์ค์ ์ผ๋ก ๋ชฐ๋ฆฌ๋ ํด๋ฌ์คํฐ๋ง(clustering) ํ์์ด ๋ฐ์ํ๋ ๋จ์ ์ด ์๋ค. ํด๋ฌ์คํฐ๋ง ํ์์ด ๋ฐ์ํ๋ฉด, ํ๊ท ํ์์๊ฐ์ด ์ฆ๊ฐํ๊ฒ ๋๋ค. |
Double Hashing (์ด์คํด์, ์ค๋ณตํด์) |
์ด์ค ํด์ฑ์ open addressing ๋ฐฉ์์ ํตํด collision์ ํด๊ฒฐํ ๋, probingํ๋ ๋ฐฉ์ ์ค์ ํ๋์ด๋ค. linear probing์ด๋ quadratic probing์ ํตํด ํ์ฌํ ๋๋ ํ์ฌ์ด๋ํญ์ด ๊ฐ๊ธฐ ๋๋ฌธ์ ํด๋ฌ์คํฐ๋ง๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค. ํด๋ฌ์คํฐ๋ง ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์๋๋ก 2๊ฐ์ ํด์ํจ์๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์์ ์ด์ค ํด์ฑ์ด๋ผ๊ณ ํ๋ค. ํ๋๋ ์ต์ด์ ํด์๊ฐ์ ์ป์ ๋ ์ฌ์ฉํ๊ณ ๋ ๋ค๋ฅธ ํ๋๋ ํด์ ์ถฉ๋์ด ๋ฐ์ํ ๋ ํ์ฌ ์ด๋ํญ์ ์ป๊ธฐ ์ํด ์ฌ์ฉํ๋ค. |
Separate chaining
Separate chaining ๋ฐฉ์์ linked list(๋๋ Tree)๋ฅผ ์ด์ฉํ์ฌ collision์ ํด๊ฒฐํ๋ค. ์ถฉ๋์ด ๋ฐ์ํ๋ฉด linked list(๋๋ Tree)์ ๋ ธ๋(slot)์ ์ถ๊ฐํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค.
- ์ฝ์ : ์๋ก ๋ค๋ฅธ ๋ key๊ฐ ๊ฐ์ ํด์๊ฐ์ ๊ฐ๊ฒ ๋๋ฉด linked list์ node๋ฅผ ์ถ๊ฐํ์ฌ (key, value) ๋ฐ์ดํฐ ์์ ์ ์ฅํ๋ค. ์ฝ์ ์ ์๊ฐ๋ณต์ก๋๋ O(1)์ด๋ค.
- ๊ฒ์: ๊ธฐ๋ณธ์ ์ผ๋ก O(1)์ ์๊ฐ๋ณต์ก๋ ์ด์ง๋ง ์ต์ ์ ๊ฒฝ์ฐ O(n)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ๋๋ค.
- ์ญ์ : ์ญ์ ๋ฅผ ํ๊ธฐ ์ํด์ ๊ฒ์์ ๋จผ์ ํด์ผํ๋ฏ๋ก ๊ฒ์์ ์๊ฐ๋ณต์ก๋์ ๋์ผํ๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก O(1)์ด์ง๋ง ์ต์ ์ ๊ฒฝ์ฐ O(n)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ๋๋ค.
worst case์ ๊ฒฝ์ฐ n๊ฐ์ ๋ชจ๋ key๊ฐ ๋์ผํ ํด์๊ฐ์ ๊ฐ๊ฒ ๋๋ฉด ๊ธธ์ด n์ linked list๊ฐ ์์ฑ๋๊ฒ ๋๋ค. ์ด ๋, ๊ฒ์์ ์๊ฐ๋ณต์ก๋๊ฐ O(n)์ด ๋๋ค.
separate chaining์ ๊ธฐ๋ณธ์ ์ผ๋ก linked list๋ฅผ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ์ง๋ง, collision์ด ๋ง์ด ๋ฐ์ํ์ฌ linked list์ ๊ธธ์ด๊ฐ ๊ธธ์ด์ง๋ฉด Binary Search Tree(BST) ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ๋ ํ๋ค. BST๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ ๊ฒ์์ worst case ์๊ฐ๋ณต์ก๋๋ฅผ O(n) ์์ O(logn)์ผ๋ก ๋ฎ์ถ ์ ์๋ค.
worst case์ ์๊ฐ๋ณต์ก๋ O(n)์ ์ด๋ค ์ํฉ์ธ๊ฐ?
n๊ฐ์ ๋ชจ๋ key๊ฐ ๋์ผํ ํด์๊ฐ์ ๊ฐ๊ฒ ๋๋ฉด์ ๊ธธ์ด n์ linked list๊ฐ ์์ฑ๋๊ฒ ๋๋ค.
์ด ๋, ํน์ key๋ฅผ ์ฐพ๊ธฐ ์ํด์๋ ๊ธธ์ด n์ linked list๋ฅผ ๊ฒ์ํ๋ O(n)์ ์๊ฐ๋ณต์ก๋์ ๋์ผํ๊ฒ ๋๋ค.
์ด์ค ํด์ฑ(double hashing)์ด ๋ฌด์์ธ๊ฐ?
์ด์ค ํด์ฑ์ open addressing ๋ฐฉ์์ ํตํด collision์ ํด๊ฒฐํ ๋, probingํ๋ ๋ฐฉ์์ค์ ํ๋์ด๋ค.
linear probing์ด๋ quadratic probing์ ํตํด ํ์ฌํ ๋๋ ํ์ฌ ์ด๋ํญ์ด ๊ฐ๊ธฐ ๋๋ฌธ์ ํด๋ฌ์คํฐ๋ง ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
ํด๋ฌ์คํฐ๋ง ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์๋๋ก 2๊ฐ์ ํด์ํจ์๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์์ ์ด์ค ํด์ฑ์ด๋ผ๊ณ ํ๋ค.
ํ๋๋ ์ต์ด์ ํด์๊ฐ์ ์ป์ ๋ ์ฌ์ฉํ๊ณ ๋ ๋ค๋ฅธ ํ๋๋ ํด์ ์ถฉ๋์ด ๋ฐ์ํ ๋ ํ์ฌ ์ด๋ํญ์ ์ป๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
- ํด๋ฌ์คํฐ๋ง(Clustering, ๊ตฐ์ง): ๋ฐ์ดํฐ๊ฐ ํ ์ชฝ์ ๋ชฐ๋ฆด ์ ์๋ค.
์ฐธ๊ณ
https://cdn.programiz.com/sites/tutorial2program/files/bst-vs-not-bst.png