[1] ํด์ํ ์ด๋ธ (Hash Table) ??
ํด์ ํ ์ด๋ธ์ Key, Value ํํ ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์๋ฃ๊ตฌ์กฐ์ด๋ฉฐ, ํ๊ท ์๊ฐ ๋ณต์ก๋๊ฐ O(1) ์ธ ๋งํผ ๋น ๋ฅธ ๊ฒ์ ์๋๋ฅผ ์ ๊ณตํ๋ค. ํด์ ํ ์ด๋ธ์ด ๋น ๋ฅธ ์๋๋ฅผ ์ ๊ณตํ๋ ์ด์ ๋ ํด์ํจ์(hash function) ์ ํด์ ํ ์ด๋ธ(hash table)์ ๋ฒํท(bucket) ๋๋ถ์ด๋ค. ํด์ ํจ์(hash function) ์ Key ๊ฐ์ ํด์(Hash) ๋ก ๋ณํํด์ฃผ๋ ํจ์๋ฅผ ๋งํ๊ณ , ๋ฒํท(bucket) ์ ํด์ ํ ์ด๋ธ์ ๊ฐ์ ์ ์ฅํ๋ ๊ณต๊ฐ์ด๋ค.
2. ํด์ํ ์ด๋ธ ๋์์๋ฆฌ

Key ๊ฐ์ ํด์ ํจ์(Hash Function) ์ ๊ฑฐ์ณ ํด์ ๊ฐ(Hash) ์ ๋ณํํ์ฌ ํด์ํ ์ด๋ธ์ ํน์ ๋ฒํท์ ์ ์ฅํ ์ธ๋ฑ์ค๋ฅผ ์ค์ ํ๊ณ Key, Value, Hash ์ ๊ฐ์ ๊ฐ๋ค์ ์ ์ฅํ๋ค.
- ํด์ ํจ์(Hash Function) : ์์์ ๋ฐ์ดํฐ๋ฅผ ์ ์(Integer) ๋ก ๋ณํํ๋ ํจ์
3. ํด์ ํจ์
ํด์ ํจ์๋ ํฌ๊ฒ Division Method, Digit Folding, Multiplication Method, Univeral Hashing ๊ธฐ๋ฒ์ด ์กด์ฌํ๋ค.
- Division Method : ๋๋์
์ ์ด์ฉํ๋ ๋ฐฉ๋ฒ์ผ๋ก ์
๋ ฅ๊ฐ์ ํ
์ด๋ธ์ ํฌ๊ธฐ(bucket size)๋ก ๋ชจ๋๋ฌ ์ฐ์ฐ์ ํตํด ์ธ๋ฑ์ค๋ฅผ ๊ฒฐ์ ํ๋ค.
- ( ์ฃผ์ = ์ ๋ ฅ๊ฐ % ๋ฒํท ์ฌ์ด์ฆ) ํ ์ด๋ธ์ ํฌ๊ธฐ๋ฅผ ์์๋ก ์ ํ๊ณ 2์ ์ ๊ณฑ์์ ๋จผ ๊ฐ์ ์ฌ์ฉํด์ผ ํจ๊ณผ๊ฐ ์ข๋ค๊ณ ์๋ ค์ ธ ์๋ค.
- Digit Folding : ๊ฐ Key์ ๋ฌธ์์ด์ ASCII ์ฝ๋๋ก ๋ฐ๊พธ๊ณ ๊ฐ์ ํฉํ ๋ฐ์ดํฐ๋ฅผ ํ ์ด๋ธ ๋ด์ ์ฃผ์๋ก ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ค.
- Multiplication Method : ์ซ์๋ก ๋ Key๊ฐ K์ 0๊ณผ 1์ฌ์ด์ ์ค์ A, ๋ณดํต 2์ ์ ๊ณฑ์์ธ m์ ์ฌ์ฉํ์ฌ ๋ค์๊ณผ ๊ฐ์ ๊ณ์ฐ์ ํด์ค๋ค. h(k)=(kAmod1) × m
- Univeral Hashing : ๋ค์์ ํด์ํจ์๋ฅผ ๋ง๋ค์ด ์งํฉ H์ ๋ฃ์ด๋๊ณ , ๋ฌด์์๋ก ํด์ํจ์๋ฅผ ์ ํํด ํด์๊ฐ์ ๋ง๋๋ ๊ธฐ๋ฒ์ด๋ค.
4. Hash collision
ํด์ ํจ์์ ๊ฒฐ๊ณผ๊ฐ ๊ฐ์ ๊ฒฝ์ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋งํ๋ค. ํด์ ํ ์ด๋ธ bucket ์ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ํฌ๊ฒ open address, seperate chaining ์ ํตํด ํด๊ฒฐํ๊ณ ์๋ค.
[1] ๋ถ๋ฆฌ ์ฐ๊ฒฐ๋ฒ(seperate chaining)

Seperating Chaining ์ ๋์ผํ ๋ฒํท์ ๋ฐ์ดํฐ์ LinkedList ์ ๊ฐ์ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ถ๊ฐํด ๋ค์ ๋ฐ์ดํฐ ์ฃผ์๋ฅผ ์ ์ฅํ๋ ๊ฒ์ ๋งํ๋ค. Seperating Chaining ๋ฐฉ์์ ํด์ ํ ์ด๋ธ์ ํ์ฅ์ด ํ์์๊ณ ๊ฐ๋จํ๊ฒ ๊ตฌํํ๋ ๊ฒ์ด ๊ฐ๋ฅํ์ง๋ง ๋์ผํ ๋ฒํท์ ์ฒด์ด๋๋๋ ๋ฐ์ดํฐ๊ฐ ๋ง์์ง๋ฉด ํ์ ์๋๊ฐ ๋จ์ด์ง๋ ๋จ์ ์ด ์๋ค.
[2] ๊ฐ๋ฐฉ ์ฃผ์๋ฒ(Open Addressing)

Open Addressing ์ ๋น์ด์๋ ํด์ ํ ์ด๋ธ์ ๋ฒํท์ ํ์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ค. Open Addressing ์ ๊ตฌํํ๊ธฐ ์ํ ๋ํ์ ์ธ ๋ฐฉ๋ฒ์ Linear Probing, Quadratic Probing, Double Hashing Probing ์ด ์กด์ฌํ๋ค.
- Linear Probing : ํ์ฌ์ ๋ฒํท index๋ก๋ถํฐ ๊ณ ์ ํญ ๋งํผ์ฉ ์ด๋ํ์ฌ ์ฐจ๋ก๋๋ก ๊ฒ์ํด ๋น์ด ์๋ ๋ฒํท์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค.
- Quadratic Probing : ํด์์ ์ ์ฅ์์ ํญ์ ์ ๊ณฑ์ผ๋ก ์ ์ฅํ๋ ๋ฐฉ์์ด๋ค. ์๋ฅผ ๋ค์ด ์ฒ์ ์ถฉ๋์ด ๋ฐ์ํ ๊ฒฝ์ฐ์๋ 1๋งํผ ์ด๋ํ๊ณ ๊ทธ ๋ค์ ๊ณ์ ์ถฉ๋์ด ๋ฐ์ํ๋ฉด 2^2, 3^2 ์นธ์ฉ ์ฎ๊ธฐ๋ ๋ฐฉ์์ด๋ค.
- Double Hashing Probing : ํด์๋ ๊ฐ์ ํ๋ฒ ๋ ํด์ฑํ์ฌ ํด์์ ๊ท์น์ฑ์ ์์ ๋ฒ๋ฆฌ๋ ๋ฐฉ์์ด๋ค. ํด์๋ ๊ฐ์ ํ๋ฒ ๋ ํด์ฑํ์ฌ ์๋ก์ด ์ฃผ์๋ฅผ ํ ๋นํ๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ๋ฐฉ๋ฒ๋ค๋ณด๋ค ๋ง์ ์ฐ์ฐ์ ํ๊ฒ ๋๋ค.
5. java ์์์ HashMap

์๋ฐ์์๋ ํด์ ์ถฉ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ผ๋ก Seperate chaining ๋ฐฉ์์ ์ ํํ๊ณ ์์ผ๋ฉฐ, ๋ฐ์ดํฐ ์ ๊ทผ, ์ฝ์ , ์ญ์ ์๊ฐ ๋ชจ๋ ์์ ์๊ฐ์ ์ ๊ทผํ์ง๋ง, ๊ฐ์ ํด์ ๊ฐ์ด ๋์ด๋๋ค๋ฉด ๊ฐ์ด ํด๋น ๋ฒํท์ ๋ํ ๊ฒ์ ์๊ฐ์ด ์ ํ ์๊ฐ์ผ๋ก ๋ณ๊ฒฝ๋ ์ ์๊ธฐ ๋๋ฌธ์ ์์์ ์ธ๊ธํ ํด์ํจ์๋ฅผ ์ ์ธํ๋ ๊ฒ์ ๋ํด ์ ์คํ ํ์๊ฐ ์๋ค. ([์ดํํฐ๋ธ ์๋ฐ] ์์ดํ 11. equals๋ฅผ ์ฌ์ ์ํ๋ ค๊ฑฐ๋ hashCode๋ ์ฌ์ ์ํ๋ผ)
Reference
- https://www.youtube.com/watch?v=ZBu_slSH5Sk
- https://mangkyu.tistory.com/102
- https://www.codingeek.com/data-structure/complete-guide-open-addressing-classification-eliminate-collisions/
- https://en.wikipedia.org/wiki/Hash_table
'๐ computer-science' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ์บ์ ์ ๋ฆฌ (Cache Summary) (0) | 2025.03.09 |
|---|---|
| Multi Programming, Processing, Tasking, Threading (0) | 2024.02.16 |
| thread type & model (0) | 2024.02.15 |
| ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ (Virtual Memory) (0) | 2024.01.26 |
