ํด์ ํ
์ด๋ธ์ ํค(Key)๋ฅผ ํด์ ํจ์(Hash Function)์ ์
๋ ฅํ์ฌ ์ป์ ์ ์ ๊ฐ์ ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ก ์ฌ์ฉํด ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์กฐํํ๋ ์๋ฃ๊ตฌ์กฐ๋ค.
๋ฐฐ์ด์ ์ธ๋ฑ์ค ์ ๊ทผ ํน์ฑ์ ํ์ฉํ๊ธฐ ๋๋ฌธ์ ํ๊ท ์ ์ผ๋ก ํ์, ์ฝ์
, ์ญ์ ์ฐ์ฐ์ O(1) ์๊ฐ์ ์ํํ ์ ์๋ ๊ฒ์ด ํน์ง์ด๋ค.
[๊ด๋ จ ์๋ฃ๊ตฌ์กฐ]
์ด๋ฌํ ์๋ฃ๊ตฌ์กฐ๋ ํด์ ํ
์ด๋ธ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌํ๋ ๊ฒฝ์ฐ ํ๊ท ์ ์ผ๋ก ํ์, ์ฝ์
, ์ญ์ ๊ฐ O(1)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค.
๋จ ํด์ ์ถฉ๋์ด ๋ง์์ง ๊ฒฝ์ฐ ํด์ ํ
์ด๋ธ์ ์ต์
์ ์๊ฐ ๋ณต์ก๋๋ O(n)์ด ๋ ์ ์์ผ๋ฉฐ ์ด์ง ํ์ ํธ๋ฆฌ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌํ๋๋ ๊ฒฝ์ฐ์๋ O(log n)์ด ๋ ์ ์๋ค.
ํด์ ํจ์๋ ์
๋ ฅ๊ฐ(Key)์ ๋ฐ์ ์ ์ ํํ์ ํด์๊ฐ(Hash Value)์ผ๋ก ๋ณํํ๋ ํจ์๋ค.
์ข์ ํด์ ํจ์๋ ๋์ผํ ํค์ ๋ํด ํญ์ ๋์ผํ ํด์๊ฐ์ ๋ฐํํ๊ณ ์๋ก ๋ค๋ฅธ ํค๊ฐ ๊ฐ๋ฅํ ํ ๋ค๋ฅธ ํด์๊ฐ์ ๊ฐ์ง๋๋ก ๊ท ๋ฑํ๊ฒ ๋ถํฌํ๋๋ก ๋ง๋ ๋ค.
ํ์ง๋ง ์
๋ ฅ ๋ฐ์ดํฐ์ ๋ฒ์์ ๋นํด ํด์๊ฐ์ ๊ณต๊ฐ์ด ์ ํ์ ์ด๊ธฐ ๋๋ฌธ์ ์๋ก ๋ค๋ฅธ ํค๊ฐ ๋์ผํ ํด์๊ฐ์ ๊ฐ์ง๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ ์ ์๋ค.
ํด์ ํจ์๋ ํค๋ฅผ ์ ์ ํํ์ ํด์๊ฐ์ผ๋ก ๋ณํํ ๋ฟ์ด๋ค. ๋ฐ๋ผ์ ์ค์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํด์๋ ํด์๊ฐ์ ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ก ๋ณํํ๋ ๊ณผ์ ์ด ํ์ํ๋ฉฐ ์ด๋ฅผ ๋ฒํท ์ธ๋ฑ์ฑ์ด๋ผ๊ณ ํ๋ค.
์ผ๋ฐ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ธ๋ฑ์ค๋ฅผ ๊ณ์ฐํ๋ค.
index = hash(key) % capacityํด์ ํจ์๋ก ์ป์ ์ ์๊ฐ์ ๋ฐฐ์ด์ ํฌ๊ธฐ(capacity)๋ก ๋๋ ๋๋จธ์ง๋ฅผ ์ฌ์ฉํ์ฌ ์ธ๋ฑ์ค๋ฅผ ๊ฒฐ์ ํ๋ค. ๋๋จธ์ง ์ฐ์ฐ์ ์ฌ์ฉํ๋ ์ด์ ๋ ํด์๊ฐ์ด ์๋ฌด๋ฆฌ ํฐ ๊ฐ์ด๋๋ผ๋ ๋ฐฐ์ด์ ์ธ๋ฑ์ค ๋ฒ์๋ฅผ ๋ฒ์ด๋์ง ์๋๋ก ํ๊ธฐ ์ํจ์ด๋ค.
ํด์ ํจ์๋ ๋ง์ ํค๋ฅผ ์ ํ๋ ํฌ๊ธฐ์ ๋ฐฐ์ด ์ธ๋ฑ์ค ๊ณต๊ฐ์ ๋งคํํด์ผ ํ๋ค. ์ด ๊ณผ์ ์์ ์๋ก ๋ค๋ฅธ ํค๊ฐ ๋์ผํ ์ธ๋ฑ์ค๋ฅผ ๊ฐ๋ฆฌํค๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ ์ ์์ผ๋ฉฐ ์ด๋ฅผ ์ถฉ๋(Collision)์ด๋ผ๊ณ ํ๋ค.
"dog" -> hash = 42 -> index = 42 % 16 = 10
"god" -> hash = 58 -> index = 58 % 16 = 10 (์ถฉ๋)
์์ ๊ฐ์ด ์๋ก ๋ค๋ฅธ ํค๊ฐ ๋์ผํ ์ธ๋ฑ์ค๋ฅผ ๊ฐ์ง๊ฒ ๋๋ฉด ์ถฉ๋์ด ๋ฐ์ํ๋ค. ์ถฉ๋์ ์ ์ ํ ์ฒ๋ฆฌํ์ง ์์ผ๋ฉด ๊ธฐ์กด ๋ฐ์ดํฐ๊ฐ ๋ฎ์ด์จ์ง๊ฑฐ๋ ํ์, ์ฝ์
, ์ญ์ ์ฐ์ฐ์ด ์ ์์ ์ผ๋ก ์ํ๋์ง ์์ ์ ์๋ค.
๋ฐ๋ผ์ ์ถฉ๋์ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ๋๋๊ฐ ํด์ ํ
์ด๋ธ์ ์ฑ๋ฅ์ ๊ฒฐ์ ํ๋ ์ค์ํ ์์๊ฐ ๋๋ค.
๊ฐ์ ์ธ๋ฑ์ค์ ๋งคํ๋ ํค๋ค์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ(๋๋ ํธ๋ฆฌ) ํํ๋ก ์ ์ฅํ๋ ๋ฐฉ์์ด๋ค. ์ฆ ๋ฐฐ์ด์ ๊ฐ ๋ฒํท์ด ํ๋์ ์ฒด์ธ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ฒ ๋๋ค.
bucket[10] -> [("dog", var1)] -> [("god", var2)] -> ...๊ตฌํ์ด ๋น๊ต์ ๋จ์ํ๋ฉฐ ๋ ธ๋ ์ฐ๊ฒฐ๋ง ๋ณ๊ฒฝํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ์ญ์ ์ฐ์ฐ์ด ์ฝ๋ค๋ ์ฅ์ ์ด ์๋ค. ๋ *๋ก๋ ํฉํฐ(load factor)๊ฐ 1์ ๋์ด๋ ๋์์ด ๊ฐ๋ฅํ๋ค.
*๋ก๋ ํฉํฐ(Load Factor)๋?
ํด์ ํ ์ด๋ธ์ด ์ผ๋ง๋ ์ฑ์์ ธ ์๋์ง๋ฅผ ๋ํ๋ด๋ ๋น์จ
๊ณต์) ๋ก๋ ํฉํฐ ฮฑ = ์ ์ฅ๋ ์์ ์ / ์ ์ฒด ๋ฒํท ์
๋ค๋ง ๊ฐ ๋ ธ๋๊ฐ ํฌ์ธํฐ๋ฅผ ๊ฐ์ง๊ธฐ ๋๋ฌธ์ ์ถ๊ฐ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๋ฉฐ ๋ฐ์ดํฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ ์์์ ์ฐ์์ ์ผ๋ก ์ ์ฅ๋์ง ์๊ธฐ ๋๋ฌธ์ ์บ์ ํจ์จ์ด ๋ฎ๋ค๋ ๋จ์ ๋ ์กด์ฌํ๋ค.
์ถฉ๋์ด ๋ฐ์ํ์ ๋ ํด์ ํ ์ด๋ธ ๋ด๋ถ์์ ๋ค๋ฅธ ๋น ๋ฒํท์ ์ฐพ์ ์ ์ฅํ๋ ๋ฐฉ์์ด๋ค. ์ฆ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ๋ฐฐ์ด ๋ด๋ถ์ ์ง์ ์ ์ฅ๋๋ค.
bucket[10] -> ์ด๋ฏธ ์ฌ์ฉ์ค
bucket[11] ํ์ธ -> ๋น์ด์์ -> ์ ์ฅ
๋ณ๋์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ ํฌ์ธํฐ ๊ตฌ์กฐ๊ฐ ํ์ ์๊ณ ๋ฐ์ดํฐ๊ฐ ๋ฐฐ์ด์ ์ฐ์์ ์ผ๋ก ์ ์ฅ๋๋ฏ๋ก ์บ์ ํจ์จ์ด ๋๋ค.
์ฃผ์ํ ์ ์ ์ญ์ ์ ๊ฐ์ ๋จ์ํ ์ ๊ฑฐํ๋ฉด ํ์ ๊ฒฝ๋ก๊ฐ ๋์ด์ง ์ ์์ผ๋ฏ๋ก ๋ณดํต ์ญ์ ํ์(tombstone) ๋ฐฉ์์ ์ฌ์ฉํ๊ณ ํ
์ด๋ธ์ด ์ฑ์์ง์๋ก ๋น ๋ฒํท์ ์ฐพ๊ธฐ ์ํ ํ์ ๋น์ฉ์ด ์ฆ๊ฐํ๋ฏ๋ก ๋ก๋ ํฉํฐ๊ฐ ๋ฎ๊ฒ ์ ์ง๋์ด์ผ ์ฑ๋ฅ์ด ์์ ์ ์ด๋ค.
ํด์ ํ
์ด๋ธ์ ๋ก๋ ํฉํฐ๊ฐ ์ค์ ๋ ์๊ณ๊ฐ(threshold)์ ์ด๊ณผํ๋ฉด ํ
์ด๋ธ์ ํฌ๊ธฐ๋ฅผ ๋๋ฆฌ๋ ์์
์ด ์ํ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ๊ณผ์ ์ผ๋ก ์งํ๋๋ค.
์ด ๊ณผ์ ์ ๋ฆฌ์ฌ์ด์ฆ ๋๋ ๋ฆฌํด์๋ผ๊ณ ํ๋ค.
๋ฆฌ์ฌ์ด์ฆ๋ ํ ๋ฒ ์ํ๋ ๋ O(n)์ ๋น์ฉ์ด ๋ฐ์ํ๋ค. ๋ฐ๋ผ์ ๋๋์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๊ฒ์ด ์์๋๋ ๊ฒฝ์ฐ ์ด๊ธฐ ์ฉ๋์ ์ถฉ๋ถํ ์ค์ ํ๋ ๊ฒ์ด ์ฑ๋ฅ์ ์ ๋ฆฌํ๋ค.
