๐๏ธ ํด์ ํ ์ด๋ธ (Hash Table)
์๋ฃ๊ตฌ์กฐ๋ฅผ ๊ณต๋ถํ๋ค ๋ณด๋ฉด "ํ์ ์๊ฐ O(1)"์ด๋ผ๋ ํํ์ ์์ฃผ ๋ง๋ฉ๋๋ค.
๊ทธ๊ฒ ์ด๋ป๊ฒ ๊ฐ๋ฅํ์ง ๊ถ๊ธํด์ ํ๋ฒ ์ ๋ฆฌํด ๋ดค์ต๋๋ค ๐
๐ค ํด์ ํ ์ด๋ธ์ด๋?
ํด์ ํ
์ด๋ธ์ ํค(Key)์ ๊ฐ(Value)์ ์์ผ๋ก ์ ์ฅํ๋ ์๋ฃ๊ตฌ์กฐ์
๋๋ค.
๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์์น๋ฅผ ํด์ ํจ์(Hash Function) ๋ก ๊ณ์ฐํ๊ธฐ ๋๋ฌธ์, ํ๊ท ์ ์ผ๋ก O(1) ์ ์๊ฐ๋ณต์ก๋๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์ฐพ์ ์ ์์ต๋๋ค.
์ฝ๊ฒ ์๊ฐํด๋ณผ๊ฒ์..๐ง
๋์๊ด์์ ์ฑ
์ ์ฐพ๋๋ค๊ณ ์๊ฐํด๋ณด์ฃ .
๋ง์ฝ ์ฑ
์ด ์๋ฌด ๊ท์น ์์ด ๊ฝํ์๋ค๋ฉด ์ ๋ถ ๋ค์ ธ์ผ ํ์ง๋ง, ์ฑ
๋ง๋ค ์ฒญ๊ตฌ๊ธฐํธ(์ซ์)๊ฐ ๋ถ์ด ์๋ค๋ฉด ํด๋น ๋ฒํธ ์๊ฐ๋ก ๋ฐ๋ก ๊ฐ๋ฉด ๋ฉ๋๋ค.
ํด์ ํ
์ด๋ธ์์ ํด์ ํจ์๊ฐ ๋ฐ๋ก ๊ทธ ์ฒญ๊ตฌ๊ธฐํธ๋ฅผ ๋ง๋ค์ด์ฃผ๋ ์ญํ ์ ํฉ๋๋ค.
ํค๋ฅผ ๋ฃ์ผ๋ฉด โ ๋ฒํธ๊ฐ ๋์ค๊ณ โ ๊ทธ ๋ฒํธ์ ๋ฒํท์ผ๋ก ๋ฐ๋ก ์ฐพ์๊ฐ๋ ๊ตฌ์กฐ์์.
โ๏ธ ํต์ฌ ๊ตฌ์ฑ ์์
| ๊ตฌ์ฑ ์์ | ์ค๋ช |
|---|---|
| ํค (Key) | ๋ฐ์ดํฐ๋ฅผ ์๋ณํ๋ ๊ฐ |
| ๊ฐ (Value) | ํค์ ๋์ํ๋ ์ค์ ๋ฐ์ดํฐ |
| ํด์ ํจ์ | ํค๋ฅผ ๋ฐ์ ๋ฒํท ์ธ๋ฑ์ค๋ฅผ ๊ณ์ฐํ๋ ํจ์ |
| ๋ฒํท (Bucket) | ๋ฐ์ดํฐ๋ฅผ ์ค์ ๋ก ์ ์ฅํ๋ ๋ฐฐ์ด์ ๊ฐ ์นธ |
๐ค ์ด๊ฒ ์ด๋ป๊ฒ ์ฐ๊ฒฐ๋๋ ๊ฑธ๊น์?
"apple" โ ํค (Key)
โ
ํด์ ํจ์ โ ํค๋ฅผ ์ซ์๋ก ๋ณํ
โ
10๋ฒ โ ๋ฒํท ์ธ๋ฑ์ค
โ
๋ฒํท[10] โ ("apple", 1) โ ํค-๊ฐ ์์ผ๋ก ์ ์ฅํค๋ฅผ ํด์ ํจ์์ ๋ฃ์ผ๋ฉด ๋ฒํธ๊ฐ ๋์ค๊ณ , ๊ทธ ๋ฒํธ์ ๋ฒํท์ ํค-๊ฐ ์์ ์ ์ฅํฉ๋๋ค.
์ฐพ์ ๋๋ ๋๊ฐ์ด ํค โ ํด์ ํจ์ โ ๋ฒํธ โ ๋ฒํท ์์๋ก ๋ฐ๋ก ์ฐพ์๊ฐ์.
๐ ๋์ ๋ฐฉ์
๐ฅ ๋ฐ์ดํฐ ์ ์ฅ (์ฝ์ )
1๏ธโฃ ํค๋ฅผ ํด์ ํจ์์ ๋ฃ์ด ํด์ ๊ฐ ๊ณ์ฐ
2๏ธโฃ ํด์ ๊ฐ์ผ๋ก ๋ฒํท ์ธ๋ฑ์ค ๊ฒฐ์
3๏ธโฃ ํด๋น ๋ฒํท์ ํค-๊ฐ ์ ์ ์ฅ
๐ ๋ฐ์ดํฐ ์กฐํ
1๏ธโฃ ํค๋ฅผ ํด์ ํจ์์ ๋ฃ์ด ๋ฒํท ์ธ๋ฑ์ค ๊ณ์ฐ
2๏ธโฃ ํด๋น ๋ฒํท์ผ๋ก ๋ฐ๋ก ์ด๋
3๏ธโฃ ํค์ ์ผ์นํ๋ ๊ฐ ๋ฐํ
๐ ์ ์ฅํ ๋์ ์ฐพ์ ๋ ๊ฐ์ ํด์ ํจ์๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์, ์์น๋ฅผ ๋ฐ๋ก ์ ์ ์์ต๋๋ค.
โ ๏ธ ํด์ ์ถฉ๋ (Hash Collision)
ํด์ ํจ์๊ฐ ์๋ฌด๋ฆฌ ์ข์๋ ์๋ก ๋ค๋ฅธ ํค๊ฐ ๊ฐ์ ๋ฒํท ๋ฒํธ๋ฅผ ๊ฐ์ง๋ ๊ฒฝ์ฐ๊ฐ ์๊ธธ ์ ์์ต๋๋ค.
์ด๊ฑธ ํด์ ์ถฉ๋์ด๋ผ๊ณ ํฉ๋๋ค.
๐ค ์ ์ถฉ๋์ด ์๊ธธ ์๋ฐ์ ์์๊น์?
๋ฒํท์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ฌดํ์ ๋๋ฆด ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด ๋ฒํท์ด 16๊ฐ๋ผ๋ฉด, ํด์ ํจ์๋ ์ด๋ค ํค๊ฐ ๋ค์ด์ค๋ 0~15 ์ฌ์ด ์ซ์๋ง ๋ฐํํด์ผ ํฉ๋๋ค.
๊ทผ๋ฐ ์ ์ฅํ ํค๋ "apple", "banana", "hello" ... ์ฌ์ค์ ๋ฌดํํ ๋ง์ต๋๋ค.
16๊ฐ ์นธ์ ๋ฌดํํ ํค๋ฅผ ๋ฃ๋ค ๋ณด๋ฉด ์ธ์ ๊ฐ๋ ๊ฐ์ ๋ฒํธ๊ฐ ๋์ฌ ์๋ฐ์ ์์ต๋๋ค.
"apple" โ ํด์ ํจ์ โ 10๋ฒ ๋ฒํท
"mango" โ ํด์ ํจ์ โ 10๋ฒ ๋ฒํท โ ์ถฉ๋ ๋ฐ์!
๋ฒํท์ ์์ฒญ ํฌ๊ฒ ๋ง๋ค๋ฉด ๋์ง ์์๊น์?
๋ฒํท 100๋ง ๊ฐ๋ฅผ ๋ง๋ค์ด๋ ์ค์ ๋ฐ์ดํฐ๊ฐ 100๊ฐ๋ฟ์ด๋ผ๋ฉด
๋๋จธ์ง 999,900๊ฐ๋ ๋น ์ฑ๋ก ๋ฉ๋ชจ๋ฆฌ๋ง ์ก์๋จน์ต๋๋ค.
๊ทธ๋์ ์ ๋นํ ๋ฒํท ์๋ฅผ ์ ์งํ๋ฉด์ ์ถฉ๋์ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ด ํ์ํฉ๋๋ค.
๋ํ์ ์ธ ๋ฐฉ๋ฒ์ด ๋ ๊ฐ์ง์
๋๋ค.๐๐
1๏ธโฃ ์ฒด์ด๋ (Separate Chaining)
๋ฒํท ์๋ ๊ทธ๋๋ก ์ ์งํ๋, ์ถฉ๋์ด ๋ฐ์ํ๋ฉด ๊ฐ์ ๋ฒํท ์์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ก ์ด์ด ๋ถ์ด๋ ๋ฐฉ์์ ๋๋ค.
๋ฒํท[0] โ null
๋ฒํท[1] โ null
๋ฒํท[3] โ ("cat", 10) โ ("car", 20) โ null โ ์ถฉ๋๋ ๊ฒ๋ค์ด ์ค์ค์ด
๋ฒํท[9] โ null"cat"๊ณผ "car"๊ฐ ๋ ๋ค 3๋ฒ ๋ฒํท์ผ๋ก ๋ฐฐ์ ๋์ ๋,
3๋ฒ ๋ฒํท์ ์ฒซ ๋ฒ์งธ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๊ณ ๋ค์ ์ด์ด ๋ถ์ด๋ ๊ฑฐ์์.
๋์ค์ "car"๋ฅผ ์ฐพ์ ๋๋ 3๋ฒ ๋ฒํท์ผ๋ก ๊ฐ์ โ "cat" ์๋ โ "car" ๋ง์! ์์๋ก ์ฐพ์ต๋๋ค.
| ์ฅ์ | ๋จ์ |
|---|---|
| ๊ตฌํ์ด ๋จ์ํจ | ํ ๋ฒํท์ ๋ฐ์ดํฐ๊ฐ ๋ชฐ๋ฆฌ๋ฉด ํ๋์ฉ ๋ค ๋ค์ ธ์ผ ํด์ ๋๋ ค์ง |
| ๋ฒํท์ด ๊ฝ ์ฐจ๋ ๊ณ์ ์ฝ์ ๊ฐ๋ฅ | ์บ์ ์ฑ๋ฅ์ด ์๋์ ์ผ๋ก ๋จ์ด์ง |
2๏ธโฃ ๊ฐ๋ฐฉ ์ฃผ์๋ฒ (Open Addressing)
์ฐ๊ฒฐ ๋ฆฌ์คํธ ์์ด ์ถฉ๋ ์ ๋ค๋ฅธ ๋น ๋ฒํท์ ์ฐพ์์ ์ ์ฅํ๋ ๋ฐฉ์์
๋๋ค.
๋น ์๋ฆฌ๊ฐ ๋์ฌ ๋๊น์ง ๊ณ์ ํ์ํฉ๋๋ค.
๋ฒํท[3] โ ("cat", 10) โ "cat" ๋จผ์ ์ ์ฅ
๋ฒํท[4] โ ("car", 20) โ "car"๋ 3๋ฒ์ธ๋ฐ ์ถฉ๋! ๋ค์ ์นธ 4๋ฒ์ด ๋น์ด์์ผ๋ ๊ฑฐ๊ธฐ ์ ์ฅ๋์ค์ "car"๋ฅผ ์ฐพ์ ๋๋ ํด์ ํจ์๊ฐ 3๋ฒ์ ์๋ ค์ฃผ๋๋ฐ, 3๋ฒ์ "cat"์ด ์์ผ๋
โ "car" ๋ง๋์ง ํ์ธ โ ์๋ โ 4๋ฒ ํ์ธ โ ๋ง๋ค! ์ด๋ฐ ์์ผ๋ก ์ฐพ์ต๋๋ค.
์ด๋ค ์์๋ก ํ์ํ๋๋์ ๋ฐ๋ผ ๋ฐฉ์์ด ๋๋ฉ๋๋ค.
| ๋ฐฉ์ | ํ์ ์์ | ํน์ง |
|---|---|---|
| ์ ํ ํ์ฌ | ๋ฐ๋ก ๋ค์ ์นธ, ๊ทธ ๋ค์ ์นธ ์์๋๋ก | ๊ตฌํ ๊ฐ๋จ, ํด๋ฌ์คํฐ๋ง ๋ฐ์ ๊ฐ๋ฅ |
| ์ด์ฐจ ํ์ฌ | 1์นธ, 4์นธ, 9์นธ... ๊ฐ๊ฒฉ์ ๋ํ๊ฐ๋ฉฐ | ํด๋ฌ์คํฐ๋ง ์ํ |
| ์ด์ค ํด์ฑ | ๋ ๋ฒ์งธ ํด์ ํจ์๋ก ๊ฐ๊ฒฉ ๊ณ์ฐ | ๊ฐ์ฅ ๊ณ ๋ฅธ ๋ถํฌ |
โน๏ธ ํด๋ฌ์คํฐ๋ง(Clustering)์ด๋?
๋ฐ์ดํฐ๊ฐ ํ์ชฝ ๋ฒํท์ ๋ชฐ๋ฆฌ๋ ํ์์
๋๋ค.
์ ํ ํ์ฌ์์ ํนํ ์์ฃผ ๋ฐ์ํ๋ฉฐ, ํด๋ฌ์คํฐ๋ง์ด ์ฌํด์ง๋ฉด ๋น ๋ฒํท์ ์ฐพ๊ธฐ ์ํด ๊ณ์ ๋ค์ ์นธ์ ๋ค์ ธ์ผ ํด์ ์ฑ๋ฅ์ด ๊ธ๊ฒฉํ ์ ํ๋ฉ๋๋ค.
๐ ์๊ฐ๋ณต์ก๋
| ์ฐ์ฐ | ํ๊ท | ์ต์ |
|---|---|---|
| ์ฝ์ | O(1) | O(n) |
| ์ญ์ | O(1) | O(n) |
| ํ์ | O(1) | O(n) |
๐ค O(1)๊ณผ O(n)์ด ๋ญ๊ฐ์?
๋ฐ์ดํฐ๊ฐ ๋์ด๋ ์๋ก ์ฐ์ฐ์ด ์ผ๋ง๋ ๋๋ ค์ง๋์ง๋ฅผ ๋ํ๋ด๋ ์ฒ๋์ ๋๋ค.
- O(1) โ ๋ฐ์ดํฐ๊ฐ 100๊ฐ๋ 10,000๊ฐ๋ ํญ์ ํ ๋ฒ์ ์ฐพ์
- O(n) โ ๋ฐ์ดํฐ๊ฐ 100๊ฐ๋ฉด ์ต๋ 100๋ฒ, 10,000๊ฐ๋ฉด ์ต๋ 10,000๋ฒ ํ์
ํด์ ํ
์ด๋ธ์ ํค๋ง ์๋ฉด ๋ฒํท์ผ๋ก ๋ฐ๋ก ์ฐพ์๊ฐ๊ธฐ ๋๋ฌธ์ ํ๊ท O(1)์
๋๋ค.
๋จ, ๋ชจ๋ ํค๊ฐ ๊ฐ์ ๋ฒํท์ ๋ชฐ๋ฆฌ๋ฉด ํ๋์ฉ ๋ค ๋ค์ ธ์ผ ํด์ ์ต์
์ ๊ฒฝ์ฐ O(n)์ด ๋ฉ๋๋ค.
์ข์ ํด์ ํจ์์ ์ ์ ํ ๋ก๋ ํฉํฐ๋ฅผ ์ ์งํ๋ฉด ํ๊ท O(1)์ ๊ธฐ๋ํ ์ ์์ด์.
โน๏ธ ๋ก๋ ํฉํฐ(Load Factor)๋?
ํด์ ํ
์ด๋ธ์ ์ฑ์์ง ์ ๋๋ฅผ ๋ํ๋ด๋ ๊ฐ์
๋๋ค.
๋ก๋ ํฉํฐ = ์ ์ฅ๋ ๋ฐ์ดํฐ ์ / ์ ์ฒด ๋ฒํท ์
๋ก๋ ํฉํฐ๊ฐ ๋์์ง์๋ก ์ถฉ๋ ๊ฐ๋ฅ์ฑ์ด ์ฌ๋ผ๊ฐ๋๋ค.๐ ์ธ์ด๋ณ ํด์ ํ ์ด๋ธ ๊ตฌํ์ฒด
| ์ธ์ด | ๊ตฌํ์ฒด |
|---|---|
| Java | HashMap, HashSet |
| Python | dict, set |
| C++ | unordered_map, unordered_set |
| JavaScript | Map, Set |
โ ๋ง๋ฌด๋ฆฌ
| ๊ฐ๋ | ์ค๋ช |
|---|---|
| ํด์ ํ ์ด๋ธ | ํค-๊ฐ ์์ ํด์ ํจ์๋ก ์์น๋ฅผ ๊ฒฐ์ ํด ์ ์ฅํ๋ ์๋ฃ๊ตฌ์กฐ |
| ํด์ ํจ์ | ํค๋ฅผ ๋ฒํท ์ธ๋ฑ์ค๋ก ๋ณํํ๋ ํจ์ |
| ํด์ ์ถฉ๋ | ์๋ก ๋ค๋ฅธ ํค๊ฐ ๊ฐ์ ์ธ๋ฑ์ค๋ฅผ ๊ฐ์ง๋ ํ์ |
| ์ฒด์ด๋ | ์ถฉ๋ ์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ก ์ด์ด์ ์ ์ฅ |
| ๊ฐ๋ฐฉ ์ฃผ์๋ฒ | ์ถฉ๋ ์ ๋ค๋ฅธ ๋น ๋ฒํท์ ํ์ฌํด์ ์ ์ฅ |
| ๋ก๋ ํฉํฐ | ํ ์ด๋ธ์ ์ฑ์์ง ์ ๋ (๋์์๋ก ์ถฉ๋ ์ฆ๊ฐ) |
๐ ์ฐธ๊ณ ์๋ฃ
'Computer Science > ์๋ฃ๊ตฌ์กฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ๋ฒ๋ธ ์ ๋ ฌ(Bubble Sort) (0) | 2026.03.03 |
|---|---|
| ์๋ฃ๊ตฌ์กฐ - ์คํ(Stack) (1) | 2025.04.17 |