ํด์ ํ ์ด๋ธ์ด๋?
ํด์ ํ ์ด๋ธ์ (Key, Value)์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์๋ฃ๊ตฌ์กฐ ์ค ํ๋๋ก key๋ฅผ ํตํด ํ๊ทO(1)์ value๋ฅผ ๊ฒ์ํ ์ ์๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค.- ํด์ ํ
์ด๋ธ์ ํค๊ฐ์
ํด์ํจ์(Hash Function)๋ฅผ ์ฌ์ฉํ์ฌ ๋ณํํ ๊ฐ์ ์์ธ(index)์ผ๋ก ์ผ๋๋ค. ํด์ ํจ์(Hash Function)์ ์ฌ์ฉํด ํค๊ฐ์ ์์ธ(index)์ผ๋ก ๋ณํํ๋ ๊ณผ์ ์ํด์ฑ(Hashing)์ด๋ผ๊ณ ํ๋ค.
ํด์ ํจ์
ํด์ ํจ์์ ๊ฐ์ฅ ์ค์ํ ์ ์ ๊ณ ์ ํ ์ธ๋ฑ์ค๋ฅผ ๋ง๋๋ ๊ฒ์ด๋ค. ๋ง์ฝ ์ค๋ณต๋๋ ์ธ๋ฑ์ค๊ฐ ๋ฐ์ํ๋ค๋ฉด ์ด๋ ์ถฉ๋(Collision)์ผ๋ก ์ด์ด์ง๊ฒ ๋๋ค. ๋ฐ๋ผ์ ํด์ ํจ์๋ฅผ ๊ตฌํํ๋ ํด์ ์๊ณ ๋ฆฌ์ฆ์ ์ ์ ํ ๊ตฌํํ๋ ๊ฒ์ด ์ค์ํ๋ค. ํด์ ํ ์ด๋ธ์ ์ฌ์ฉ๋๋ ๋ํ์ ์ธ ํด์ ์๊ณ ๋ฆฌ์ฆ์๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒ๋ค์ด ์๋ค.
- Division Method : ์ซ์ Key๋ฅผ ํ ์ด๋ธ์ ํฌ๊ธฐ๋ก ๋๋์ด ๋์จ ๋๋จธ์ง๋ฅผ ์ธ๋ฑ์ค๋ก ์ฌ์ฉํ๋ค. ( index = Key % ํ ์ด๋ธ ํฌ๊ธฐ ) ์ด๋ ํ ์ด๋ธ์ ํฌ๊ธฐ๋ฅผ ์์(Prime Number)๋ก ์ ํ๊ณ 2์ ์ ๊ณฑ์์ ๋จผ ๊ฐ์ ์ฌ์ฉํ๋ ๊ฒ์ด ํจ๊ณผ๊ฐ ์ข๋ค. ์๋ฅผ ๋ค์ด Key ๊ฐ์ด 23์ผ ๋ ํ ์ด๋ธ ์ฌ์ด์ฆ๊ฐ 7์ด๋ผ๋ฉด index๋ 2๋ค.
- Digit Folding : Key์ ๋ฌธ์์ด์ ASCII ์ฝ๋๋ก ๋ฐ๊พธ๊ณ ๊ทธ ๊ฐ์ ํฉํด ํ ์ด๋ธ ๋ด์ ์ฃผ์๋ก ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ค. ์ ์์์ ๋น์ทํ0 ์ํฉ์์ ์ฌ์ฉ๋ ์ ์๋ค. "Ryan" ๊ฐ์ ๋ฌธ์์ด์ R->82 + y->121 + a->97 + n->110 = 410 ์ index๋ก ์ฌ์ฉํ๋ฉด ๋๋ค. ๋ง์ฝ ์ด ๋ index๊ฐ ํ ์ด๋ธ์ ํฌ๊ธฐ๋ฅผ ๋์ด๊ฐ๋ค๋ฉด Division Method๋ฅผ ์ ์ฉํ ์ ์์ ๊ฒ์ด๋ค.
- Multiplication Method : ์ซ์๋ก ๋ Key ๊ฐ K์ 0๊ณผ1 ์ฌ์ด์ ์ค์ A, ๋ณดํต 2์ ์ ๊ณฑ์์ธ m์ ์ฌ์ฉํ์ฌ ๋ค์๊ณผ ๊ฐ์ด ๊ณ์ฐํ ๊ฐ์ index๋ก ์ฌ์ฉํ๋ค. index = (K*A mod 1)*m
์ด ์ธ์๋ ๋ง์ ํด์ ์๊ณ ๋ฆฌ์ฆ์ด ๋ค์ํ๊ฒ ์กด์ฌํ๋ค. ๋ํ ์ฌ์ฉ์๊ฐ ํ์์ ์ํด ์ง์ ํด์ ์๊ณ ๋ฆฌ์ฆ์ ๋ง๋ค ์๋ ์๋ค.
์ถฉ๋(Collision)
ํด์ ํจ์๋ฅผ ํตํด index๊ฐ์ ๊ตฌํ์ ๋ ์ค๋ณต์ด ์๊ธฐ๋ ์ถฉ๋์ด ๋ฐ์ํ ์ ์๋ค. ์ด๋ฌํ ์ถฉ๋์ด ๋ฐ์ํ์ ๋์ ํด๊ฒฐ๋ฒ์ผ๋ก ๋ถ๋ฆฌ์ฐ๊ฒฐ๋ฒ(Separate Chaining) ๊ณผ ๊ฐ๋ฐฉ์ฃผ์๋ฒ(Open Addressing) ๋ฑ์ด ์๋ค.
๋ถ๋ฆฌ์ฐ๊ฒฐ๋ฒ(Seperate Chaining)
๋ถ๋ฆฌ ์ฐ๊ฒฐ๋ฒ์ด๋ ๋์ผํ ๋ฒํท(bucket)์ ๋ฐ์ดํฐ์ ๋ํด ์ฐ๊ฒฐ๋ฆฌ์คํธ, ํธ๋ฆฌ ๋ฑ์ ์๋ฃ๊ตฌ์กฐ๋ฅผ ํ์ฉํด ๋ค์ ๋ฐ์ดํฐ์ ์ฃผ์๋ฅผ ์ ์ฅํ๋ ๊ฒ์ด๋ค. ์์ ๊ทธ๋ฆผ์์ ์๋ฅผ ๋ค์ด "๋๋ฆฌ" ์ "๋ฌด์ง"๋ฅผ ํด์ ํจ์๋ก ๋ณ๊ฒฝํ์๋๋ 11์ด๋ผ๋ index๋ก ์ถฉ๋ ๋์๋ค๋ฉด, ๋จผ์ ์ ์ฅํ "๋๋ฆฌ"์ ๋ค์ ์์๋ก "๋ฌด์ง"๋ฅผ ์ ์ฅํ๋ฉด ๋๋ค.
์ด๋ฌํ chaining ๋ฐฉ์์ ํด์ ํ ์ด๋ธ์ ํ์ฅ์ด ํ์์๊ณ ๊ตฌํ์ด ๊ฐ๋จํ๋ฉฐ ์์๋ฅผ ์ฝ๊ฒ ์ญ์ ํ ์ ์๋ค๋ ์ฅ์ ์ด ์๋ค. ํ์ง๋ง ๋ฐ์ดํฐ์ ์๊ฐ ๋ง์์ง๋ฉด ๋์ผํ ๋ฒํท์ chaining ๋๋ ๋ฐ์ดํฐ๊ฐ ๋ง์์ง๋ฉฐ ๊ทธ์ ๋ฐ๋ผ ์บ์์ ํจ์จ์ฑ์ด ๊ฐ์ํ๋ค๋ ๋จ์ ์ด ์๋ค.
๊ฐ๋ฐฉ ์ฃผ์๋ฒ(Open Addressing)
๊ฐ๋ฐฉ ์ฃผ์๋ฒ์ด๋ ์ถ๊ฐ์ ์ธ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ chaining ๋ฐฉ์๊ณผ ๋ค๋ฅด๊ฒ ๋น์ด์๋ ํด์ ํ ์ด๋ธ์ ๊ณต๊ฐ์ ํ์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ค. ๊ฐ๋ฐฉ ์ฃผ์๋ฒ์ ๊ตฌํํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ผ๋ก๋ ๋ค์๊ณผ ๊ฐ์ 3๊ฐ์ง ๋ฐฉ์์ด ์กด์ฌํ๋ค.
1. Linear Probing : ํ์ฌ์ ๋ฒํท index๋ก๋ถํฐ ๊ณ ์ ํญ๋งํผ ์ด๋ํ์ฌ ์ฐจ๋ก๋๋ก ๊ฒ์ํด ๋น์ด ์๋ ๋ฒํท์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค.
2. Quadratic Probing : ํด์์ ์ ์ฅ์์ ํญ์ ์ ๊ณฑ์ผ๋ก ์ ์ฅํ๋ ๋ฐฉ์. ์๋ฅผ ๋ค์ด ์ฒ์ ์ถฉ๋์ด ๋ฐ์ํ ๊ฒฝ์ฐ 1๋งํผ ์ด๋ํ๊ณ , ๊ทธ ๋ค์ ์ถฉ๋์ด ๋ฐ์ํ๋ฉด 2^2, 3^2 ์นธ ์ฉ ์ฎ๊ธฐ๋ ๋ฐฉ์์ด๋ค.
3. Double Hasing Probing : ํด์๋ ๊ฐ์ ํ ๋ฒ ๋ ํด์ฑํ์ฌ ํด์์ ๊ท์น์ฑ์ ์์ ๋ฒ๋ฆฌ๋ ๋ฐฉ์. ํด์๋ ๊ฐ์ ํ๋ฒ ๋ ํด์ฑํ์ฌ ์๋ก์ด ์ฃผ์๋ฅผ ํ ๋นํ๋ฏ๋ก ๊ธฐ์กด ๋ฐฉ์๋ณด๋ค ๋ ๋ง์ ์ฐ์ฐ์ ํ๊ฒ ๋๋ค.