๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํด, ์์์ ๊ธธ์ด ๋ฐ์ดํฐ๋ฅผ ๊ณ ์ ๋ ๊ธธ์ด์ ๋ฐ์ดํฐ๋ก ๋งคํํ๋ ๊ฒ
ํด์ ํจ์๋ฅผ ๊ตฌํํ์ฌ ๋ฐ์ดํฐ ๊ฐ์ ํด์ ๊ฐ์ผ๋ก ๋งคํํ๋ค.
ํค๋ฅผ ์ธ๋ฑ์ค์ ๋งตํํ์ฌ ๋ฐฐ์ด(ํด์ ํ ์ด๋ธ)์์ ํค๋ฅผ ์ ์ฅํ๊ณ ๊ฒ์ํ๋ ๊ธฐ์
=> ๊ฒ์, ์ฝ์ , ์ญ์ Performance : O(1)
โ ์์ : ์ฒซ๋ฒ์งธ ๊ธ์๋ฅผ ํค๋ฅผ ์ฌ์ฉํด์ ํด์ฑํจ
--------------------
| index | bucket |
------------------
| 0 | Korea |
| 1 | Japan |
| 2 | China |
| 3 | Thiwan |
| 4 | Spain |
--------------------
ํ์ง๋ง ๋ฐ์ดํฐ๊ฐ ๋ง์์ง๋ฉด ๋ค๋ฅธ ๋ฐ์ดํฐ๊ฐ ๊ฐ์ ํด์ ๊ฐ์ผ๋ก ์ถฉ๋๋๋ ํ์์ด ๋ฐ์ํจ
-------------------------------------
| index | bucket | |
--------------------------------------
| 0 | Korea | |
| 1 | Japan | |
| 2 | China | |
| 3 | Thiwan | Thailand |
| 4 | Spain | Singapore | -> Sri Lanka (overflow)
-------------------------------------
๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ํด์ํ ์ด๋ธ์ ์ฌ์ฉํ๋ ์ด์ ?
์ ์ ์์์ผ๋ก ๋ง์ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํด
ํ๋๋์คํฌ๋, ํด๋ผ์ฐ๋์ ์กด์ฌํ๋ ๋ฌดํํ ๋ฐ์ดํฐ๋ค์ ์ ํํ ๊ฐ์์ ํด์๊ฐ์ผ๋ก ๋งคํํ๋ฉด ์์ ๋ฉ๋ชจ๋ฆฌ๋ก๋ ํ๋ก์ธ์ค ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํด์ง!
์ธ๋ฑ์ค์ ํด์๊ฐ์ ์ฌ์ฉํจ์ผ๋ก์จ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ดํผ์ง ์์๋ ๊ฒ์๊ณผ ์ฝ์
/์ญ์ ๋ฅผ ๋น ๋ฅด๊ฒ ์ํํ ์ ์์.
ํด์ํจ์๋ ์ธ์ ๋ ๋์ผํ ํด์๊ฐ์ ๋ฆฌํด ํ๊ณ , ํด๋น ์ธ๋ฑ์ค๋ง ์๋ฉด ํด์ํ
์ด๋ธ์ ํฌ๊ธฐ์ ์๊ด์์ด ๋ฐ์ดํฐ์ ๋๋จํ ๋น ๋ฅด๊ฒ ์ ๊ทผํ ์ ์์ผ๋ฉฐ, ์ธ๋ฑ์ค๋ ๊ณ์ฐ์ด ๊ฐ๋จํ ํจ์(์์์๊ฐ)๋ก ์๋ํ๊ธฐ ๋๋ฌธ์ ๋งค์ฐ ํจ์จ์ ์
๋๋ค.
์ฆ, ํผํฌ๋จผ์ค๊ฐ O(1)์ด๊ธฐ ๋๋ฌธ
ํด์ํ ์ด๋ธ์ ๋ค๋ฅธ ์๋ฃ๊ตฌ์กฐ์ ๋น๊ตํด๋ดค์ ๋,
๋ฐ์ดํฐ ์ถ์ฝ
๊ธฐ๋ฅ๋ ์ํํ ์ ์์ต๋๋ค.ํด์ ํ
์ด๋ธ
?key
mod hash_table_size
โ๏ธ Collision ์์ฒด๋ฅผ ์ค์ด๋ ๊ฒ๋ ์๋ฏธ๊ฐ ์์ง๋ง, ์ค์ํ ๊ฒ์ collision์ด ํด์๊ฐ ์ ์ฒด์ ๊ฑธ์ณ ๊ท ๋ฑํ๊ฒ ๋ฐ์ํ๊ฒ ํ๋ ๊ฒ์ด ํฌ์ธํธ!
ํ์ฌ๊น์ง ๊ฐ๋ฐ๋ ๊ฑฐ์ ๋ชจ๋ ํด์ํจ์๋ ํด์์ถฉ๋์ ์ผ์ผํค๋ ๊ฒ์ผ๋ก ํ์ธ๋๋ค๊ณ ํจ
๊ทธ๋งํผ collision์ด ์์ ์ ์ผ์ด๋๊ฒ๋ โ, ๊ทธ๋ฆฌ๊ณ ์ด์จ๋ collision์ด ์ผ์ด๋ ํค๋ฅผ ์ ์ฅํ ๊ณณ์ด ํ์ํจ.
๊ณ์ฐ๋ ์ธ๋ฑ์ค์ ๊ทธ๋๋ก !
โ๏ธ ๊ฐ๊ฐ์ ์ธ๋ฑ์ค์ collision์ด ๋ ํค๋ค์ ์ ์ฅํ ์ ์๋ ๋๋~ํ ๋ฒํท์ ๋
โ๏ธ ๋น ๋ฅธ access, overflow โ
โ๏ธ ๊ณต๊ฐ๋ญ๋น ์ต์
=> ์ค์ง์ ์ผ๋ก ์ฌ์ฉํ์ง ๋ชปํจ
๐ 2D - array ์ฌ์ฉ
-------------------------------------------------------
| index | bucket | | |
-------------------------------------------------------
| 0 | Korea | | |
| 1 | Japan | | |
| 2 | China | | |
| 3 | Thiwan | Thailand | |
| 4 | Spain | Singapore | Sri Lanka |
-------------------------------------------------------
๐ Overflow chaining (no collision bucket)
-------------------
| index | bucket |
-------------------
| 0 | Korea |
| 1 | Japan |
| 2 | China |
| 3 | Thiwan | -> Thailand
| 4 | Spain | -> Singapore -> Sri Lanka
-------------------
๐ ํ์ํ๋ ๋ฐฉ๋ฒ
๋ค๋ฅธ ์ธ๋ฑ์ค์ ๊ฐ๋ฅํ ๋ฒํท์ ์ฐพ์ ๋ ๋จ !
๐ 1) Linear Probing
collision์ด ๋ฐ์ํ๋ฉด ์ฐ์์ ์ผ๋ก ์ญ ๊ฒ์ํ๋ฉด์ ๋น์ด์๋ ๋ฒํท์ ์ฐพ์
-------------------
| index | bucket |
-------------------
| 0 | Korea |
| 1 | |
| 2 | |
| 3 | Thiwan |
| 4 | Spain | -> Singapore (Collision !!) ๐๐ป
-------------------
-------------------
| index | bucket |
-------------------
| 0 | Korea | ๐๐ป
| 1 |Singapore| -> find free space !
| 2 | |
| 3 | Thiwan |
| 4 | Spain |
-------------------
๐ ํ์ํ๋ ๋ฐฉ๋ฒ
๐ ๋ฌธ์ ์
0 | Korea |
1 | Singapore |
2 | Qatar |
3 | Sri Lanka |
4 | China |
5 | Taiwan |
6 | Spain |
์ฌ๊ธฐ์ homeless key์ธ Singapore๋ฅผ ์ญ์ ํจ
0 | Korea |
1 | ๐๐ป ์ฌ๊ธฐ์ ์์น๊ฐ ๋ฉ์ถค |
2 | Qatar |
3 | Sri Lanka |
4 | China |
5 | Taiwan |
6 | Singapore |
๊ทธ ํ์ Sri Lanka๋ฅผ ์ฐพ์ผ๋ ค๊ณ ํ ๋ ์์น๊ฐ ๋ฉ์ถฐ๋ฒ๋ฆผ
โ๏ธ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด State ๋ฅผ ๋๊ธฐ ์์ => Occupied / Empty / Deleted
๐ 2) Quadratic Probing
Linear probing์ ์์ ๋ฒ์ ์
collision์ด ๋ฐ์ํ๋ฉด k^2๋งํผ ์์ง์ด๋ฉด์ ๊ฒ์ํด์ ๋น์ด์๋ ๋ฒํท์ ์ฐพ์
๐ 3) Double Hashing
๋๊ฐ์ hash function์ ์ฌ์ฉํจ
ํ๋๋ ์ธ๋ฑ์ค๋ฅผ ์ฐพ๋๋ฐ ์ฌ์ฉ, ํ๋๋ homeless key๋ฅผ ๋ฃ๋ interval ์ธ๋ฑ์ค๋ฅผ ์ฐพ๊ธฐ ์ํด ์ฌ์ฉํจ
key
mod 13
/ h2 = 1 + key
mod 11
์ด๋ ๊ฒ ์ฌ์ฉโ๏ธ linear & quadratic๊ณผ์ ์ฐจ์ด์ : ์ธ๋ฑ์ค๊ฐ key๊ฐ์ ๋ฐ๋ผ ๊ฒฐ์ ๋๋ค.