์ถ์ฒ
https://www.geeksforgeeks.org/introduction-to-hashing-2/
ChatGPT
ํด์น ์ถฉ๋์ ๋งํ๊ธฐ ์ ์์์ผํ ๊ฐ๋ ๋ค
ํด์๋ Hash
์์์ ํฌ๊ธฐ์ ๋ฐ์ดํฐ๋ฅผ ํด์ ํจ์๋ฅผ ํตํด ๊ณ ์ ๋ ํฌ๊ธฐ์ ๋ฐ์ดํฐ๋ก ๋งคํํ ๊ฐ. ํด์ ๊ฐ์ด๋ผ๊ณ ๋ ํ๋ค. ํด๊ธฐ ์ฝ๋๋ผ ๋ถ๋ฅด๊ธฐ๋ ํ๋ค.
ํด์ฑ์ด๋ Hashing
์์์ ํฌ๊ธฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅ ๊ฐ์ผ๋ก ๋ฐ์ ํด์๊ฐ์ผ๋ก ๋ณํํ๋ ๊ณผ์ ๋๋ ๋ฐฉ๋ฒ.
ํด์ ํจ์๋ Hash Function
์์์ ํฌ๊ธฐ์ ์ ๋ ฅ๊ฐ(์: ๋ฌธ์์ด, ์ ์)์ ๊ณ ์ ๋ ํฌ๊ธฐ์ ๊ฐ์ผ๋ก ๋ณํํ๋ ํจ์
- ๋ชฉํ : ์๋ก ๋ค๋ฅธ ์
๋ ฅ๊ฐ์ด ๊ณ ์ ํ ํด์๊ฐ์ ๊ฐ์ง๊ฒ ํ๋ค.
- ๊ทธ๋์ ๋์ผํ ์ ๋ ฅ๊ฐ์ ๋ํด ํญ์ ๋์ผํ ํด์๊ฐ์ ๋ฐํํด์ผ ํ๋ค.
- ํ์ง๋ง ์ด๊ฒ์ ์๋ฒฝํ ๋ณด์ฅํ๋ ๊ฑด ๋ถ๊ฐ๋ฅํ๋ค. ์๋ก ๋ค๋ฅธ ์ ๋ ฅ ๊ฐ์ ํด์๊ฐ๋ค์ด ๋์ผํ ์ํฉ์ ํด์ ์ถฉ๋์ด๋ผ๊ณ ํ๋ค.
ํด์ ํ ์ด๋ธ์ด๋ Hash Table
ํด์ฑ์ ํตํด ํค์ ๊ฐ์ ๋งคํํ ์๋ฃ๊ตฌ์กฐ. ๋ฐฐ์ด์ด๋ค. ์ ๋ ฅ๊ฐ์ธ ํค๋ก ์์ฑ๋ ํด์๊ฐ์ ์ด ๋ฐฐ์ด์ ์ธ๋ฑ์ค ๊ฐ์ผ๋ก ์ด์ฉํ๋ค.
๐ค ๋ฐฐ์ด์ ์ฐ์๋ ์ ์ฅ๊ณต๊ฐ์ด๊ณ , Java๋ ํด์๊ฐ์ ์ ์๋ก ์ฐ๋๊น, JVM์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ ์ ํฌ๊ธฐ๋งํผ Hash Table์ด ํ ๋น๋์ด์ผ ํ๋ ๊ฑฐ ์๋๊ฐ?
๐ก ์๋๋ค. ํด์์ฝ๋์ ๋ฒ์ ์ ์ฒด๊ฐ ํด์ ํ ์ด๋ธ์ ํฌ๊ธฐ๋ก ํ ๋น๋๋ ๊ฒ์ด ์๋๋ค. ํด์์ฝ๋๋ ์ผ๋ฐ์ ์ผ๋ก 32๋นํธ ์ ์(์๋ฐ์์๋ int)์ด๋ฏ๋ก, ๋ชจ๋ ์ ์์ ๋ฒ์(์ฝ 43์ต ๊ฐ)๋ฅผ ์ธ๋ฑ์ค๋ก ์ฌ์ฉํ๋ ค๋ฉด ์์ฒญ๋ ์์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ์ํ๊ฒ ๋๋ค. ๋์ , ํด์ ํ ์ด๋ธ์ ๋ณดํต ์ ์ ํ ํฌ๊ธฐ๋ก ์ค์ ๋๊ณ , ํด์์ฝ๋๋ฅผ ํ ์ด๋ธ ํฌ๊ธฐ์ ๋ง๊ฒ ์กฐ์ ํด ์ธ๋ฑ์ค๋ฅผ ๊ฒฐ์ ํ๋ค.
์๋ฐ์์ ํด์์ฝ๋์ ํ ์ด๋ธ ํฌ๊ธฐ์ ๊ฐ์ ๊ด๊ณ
1. ํด์์ฝ๋ ์์ฑ ๋ฐ ๋ณํ
- ์๋ฐ์์ ๊ฐ์ฒด์ ํด์์ฝ๋๋ int ํ์ ์ผ๋ก ํํ๋๋ฉฐ, ์ด๋ 32๋นํธ ์ ์ ๊ฐ์ผ๋ก ํํ๋๋ค.
- ํด์์ฝ๋๋ ๋ชจ๋ ์ ์ ๋ฒ์๋ฅผ ๊ฐ์ง ์ ์์ง๋ง, ํด์ ํ ์ด๋ธ์ ํฌ๊ธฐ๋ ๋ณดํต ์ด๋ฅผ ํจ์ฌ ์์ ๊ฐ์ผ๋ก ์ ํํ๋ค.
2. ํด์ ํ ์ด๋ธ์ ํฌ๊ธฐ์ ์ธ๋ฑ์ค ๊ฒฐ์
- ์ค์ ๋ก ํด์ ํ ์ด๋ธ์ ์ผ๋ฐ์ ์ผ๋ก ๊ณ ์ ๋ ํฌ๊ธฐ์ ๋ฐฐ์ด์ด๋ค. ์ด ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ ๋ณดํต ๋ ๋์ ์ฑ๋ฅ์ ์ํด ์์(์: 101, 1009 ๋ฑ)๋ก ์ค์ ๋๋ฉฐ, ๋ฐ์ดํฐ์ ์์ ๋ค๋ผ ๋์ ์ผ๋ก ์กฐ์ ๋๊ธฐ๋ ํ๋ค.
- ํด์์ฝ๋๋ฅผ ํด์ ํ
์ด๋ธ์ ํฌ๊ธฐ์ ๋ง๊ฒ ๋ณํํ๊ธฐ ์ํด, ๋ณดํต ๋ชจ๋๋ฌ ์ฐ์ฐ(%)์ ์ฌ์ฉํด ํด์์ฝ๋๋ฅผ ํ
์ด๋ธ์ ํฌ๊ธฐ์ ๋ง๋ ์ธ๋ฑ์ค๋ก ์ ์ฅํ๋ค.
- ์๋ฅผ ๋ค์ด, ํด์ ํ ์ด๋ธ์ ํฌ๊ธฐ๊ฐ 100์ด๋ผ๋ฉด, hashcode % 100์ ํตํด ํด์์ฝ๋๋ฅผ 0์์ 99์ฌ์ด์ ๊ฐ์ผ๋ก ๋ณํํด ํด์ ํ ์ด๋ธ์ ์ธ๋ฑ์ค๋ฅผ ๊ฒฐ์ ํ๋ค.
3. ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ํจ์จํ
- ํด์ ํ
์ด๋ธ์ ํฌ๊ธฐ๋ ํค์ ํด์๊ฐ๊ณผ ๋ค๋ฅด๋ฉฐ, ๋ชจ๋ ๊ฐ๋ฅํ ํด์์ฝ๋์ ๋ํด ๋ณ๋์ ์ฌ๋กฏ์ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋นํ๋ ๊ฒ์ด ์๋๋ค.
- ์ฌ๋กฏ slot : ํด์ ํ ์ด๋ธ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์๋ ๊ฐ๋ณ์ ์ธ ์ ์ฅ ๊ณต๊ฐ. ๋ฐฐ์ด์ ํน์ ์์น์ ๋์ผํ ๊ฐ๋
- ํด์ ํ ์ด๋ธ์ ํฌ๊ธฐ๋ ์ผ๋ฐ์ ์ผ๋ก ์ค์ ์ ์ฅํด์ผ ํ๋ ๋ฐ์ดํฐ์ ์์ ์ถฉ๋์ ๋น๋๋ฅผ ๊ณ ๋ คํ์ฌ ์ค์ ๋๋ฉฐ, JVM์ ์ด๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๋ค.
- ํนํ, ํด์์ฝ๋ ์ ์ฒด ๋ฒ์๋ฅผ ์ธ๋ฑ์ค๋ก ์ฌ์ฉํ์ง ์๊ณ , ํด์ ํ ์ด๋ธ์ ํฌ๊ธฐ์ ๋ง๊ฒ ๋ณํํ์ฌ ๋ฐฐ์ด์ ํน์ ์์น์ ๊ฐ์ ์ ์ฅํ๋ ๋ฐฉ์์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ํจ์จํํ๋ค.
๐ค ํด์ ํ ์ด๋ธ๊ณผ ํด์๋งต์ ๋ญ๊ฐ ๋ค๋ฅด์ง?
ํน์ง | ํด์ ํ ์ด๋ธ Hash Table | ํด์๋งต HashMap |
์ญ์ฌ์ ๋ฐฐ๊ฒฝ | ์๋ฃ ๊ตฌ์กฐ์ ๊ฐ๋
์ ์ค๋ช
ํ๋ ๋ฐ ์ฌ์ฉ๋๋ค. ํด์ ํ ์ด๋ธ์ ํด์ ํจ์์ ๋ฐฐ์ด ๊ธฐ๋ฐ ์ธ๋ฑ์ฑ์ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ๊ฒ์ํ๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค. |
ํด์ ํ ์ด๋ธ์ ํ ๊ตฌํ์ฒด์ด๋ค. ์ฃผ๋ก ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๊ตฌ์ฒด์ ์ธ ์๋ฃ๊ตฌ์กฐ ํด๋์ค๋ ํ์ ์ผ๋ก ์ฌ์ฉ๋๋ค. |
ํํ ๋ฐฉ์ ์ฌ์ฉ ๊ด์ |
์ด๋ป๊ฒ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์ ์ฅํ๊ณ ๊ฒ์ํ ์ง์ ๋ํ ์์ด๋์ด์ ๊ธฐ์ ์ ์ด ๋์์ ์ค๋ช ํ ๋ ์ฃผ๋ก ์ฌ์ฉ๋๋ค. | ํน์ ์ธ์ด์์ ์ ๊ณตํ๋ ๊ตฌํ๋ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ค๋ช ํ๋ ์ฉ์ด์ด๋ค. |
ํด์ ์ถฉ๋์ด๋ Hash Collision
ํด์ ํจ์๋ ์ ๋ ฅ์ ๊ณ ์ ๋ ํฌ๊ธฐ์ ํด์๊ฐ์ผ๋ก ๋ณํํ๊ธฐ ๋๋ฌธ์, ์๋ก ๋ค๋ฅธ ์ ๋ ฅ๊ฐ์ด ๊ฐ์ ํด์๊ฐ์ ๊ฐ์ง๋ ๊ฒ.
ํด์ ์ถฉ๋์ ๋ฐ์ ํ๋ฅ ์ ์๊ณ ๋ฆฌ์ฆ์ ํฌ๊ธฐ, ํด์ ๊ฐ์ ๋ถํฌ ๋ฐ ํด์ ํจ์์ ํจ์จ์ฑ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค.
ํด์ ์ถฉ๋์ด ๋ฐ์ํ๋ฉด, ์๋ก ์ ๋ ฅ๋ฐ์ ํค์ ํด์๊ฐ์ด ์ด๋ฏธ ์ ์ ๋ ์ฌ๋กฏ์ผ๋ก ๋งคํ๋๊ธฐ ๋๋ฌธ์ ์ถฉ๋ ์ฒ๋ฆฌ ๊ธฐ์ ์ ์ฌ์ฉํด ์ฒ๋ฆฌํด์ผ ํ๋ค.
ํด์ ์ถฉ๋์ ์๋ฐฉํ๋ ๋ฐฉ๋ฒ
ํด์ ์ถฉ๋์ ์๋ฒฝํ๊ฒ ์๋ฐฉํ ์๋ ์์ง๋ง, ๋ฐ์ ํ๋ฅ ์ ์ค์ผ ์๋ ์๋ค.
1. ์ข์ ํด์ ํจ์๋ฅผ ์ค๊ณ
๐ค ์ข์ ํด์ ํจ์๋ ์ด๋ค ํน์ง์ ๊ฐ์ง๊ณ ์๋?
1. ํจ์จ์ ์ผ๋ก ๊ณ์ฐํ๋ค.
- ์ ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๋ฅํ ๋น ๋ฅด๊ฒ ํด์๊ฐ์ผ๋ก ๋ณํํด์ผ ํ๋ค.
2. ํค๋ฅผ ๊ท ๋ฑํ๊ฒ ๋ถ๋ฐฐํด์ผ ํ๋ค. (๊ฐ ํ ์ด๋ธ ์์น๊ฐ ๋์ผํ ํ๋ฅ ์ ๊ฐ๋๋ค.)
- ๋ชจ๋ ๊ฐ๋ฅํ ์ ๋ ฅ๊ฐ๋ฐ ๋ํด ํด์๊ฐ์ด ๊ท ๋ฑํ๊ฒ ๋ถํฌ๋๋๋ก ์ค๊ณํด์ผ ํ๋ค. ์ด๋ฅผ ํตํด ํน์ ์์ญ์ ๋ฐ์ดํฐ๊ฐ ๋ชฐ๋ฆฌ์ง ์๊ฒ ํ๋ค.
3. ์ถฉ๋์ ์ต์ํํด์ผ ํ๋ค.
- ๋น์ทํ ์ ๋ ฅ๊ฐ์ ๋ํด ๋น์ทํ ํด์๊ฐ์ ์์ฑํ์ง ์๋๋ก ์ค๊ณํด์ผ ํ๋ค.
4. ๋ก๋ ํฉํฐ๊ฐ ๋ฎ์์ผ ํ๋ค.
- ๋ก๋ ํฉํฐ load factor : ํด์ ํ ์ด๋ธ์ ์ ์ฅ๋ ๋ฐ์ดํฐ ๊ฐ์๋ฅผ ํ ์ด๋ธ์ ํฌ๊ธฐ๋ก ๋๋ ๊ฐ.
- ๋ก๋ ํฉํฐ = ํด์ ํ ์ด๋ธ์ ์ด ๋ฐ์ดํฐ ์ / ํด์ ํ ์ด๋ธ์ ํฌ๊ธฐ
- ๋ก๋ ํฉํฐ๋ก ์ ์ ์๋ ๊ฒ : ํด์ ํ
์ด๋ธ์ด ์ผ๋ง๋ ๋นฝ๋นฝํ๊ฒ ์ฑ์์ ธ ์๋์ง. ํด์ ํ
์ด๋ธ์ ์ฑ๋ฅ ๋ฐ ํ์ฅ ์๊ธฐ๋ฅผ ๊ฒฐ์ ํ๋ ์งํ์ด๋ค.
- ์ผ๋ฐ์ ์ผ๋ก ๋ก๋ ํฉํฐ๊ฐ ํน์ ๊ธฐ์ค ์ด์(์: 0.7~0.75 ์ด์)์ด ๋๋ฉด, ํด์ ํ
์ด๋ธ์ ํฌ๊ธฐ๋ฅผ ๋ ๋ฐฐ๋ก ๋๋ฆฌ๋ ์ฌํด์ฑ์ ์ํํ๋ค.
- ์ฌํด์ฑ : ํด์ ํ ์ด๋ธ์ด ์ถฉ๋๋ก ์ธํด ํจ์จ์ด ๋จ์ด์ง๊ฑฐ์ ๋ฐ์ดํฐ๊ฐ ๋ง์์ง ๊ฒฝ์ฐ, ์๋ก์ด ๋ ํฐ ํด์ ํ ์ด๋ธ๋ก ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฐฐ์นํ๋ ๋ฐฉ๋ฒ
- ์ฌํด์ฑ์ ์ฅ์ : ํด์ ์ถฉ๋์ ์ค์ด๊ณ ์ฑ๋ฅ์ ๊ฐ์ ํ ์ ์๋ค.
- ์ฌํด์ฑ์ ๋จ์ : ์ฌํด์ฑ ๊ณผ์ ์์ ์ถ๊ฐ์ ์ธ ์ฐ์ฐ์ด ํ์ํด ๋ฆฌ์์ค๊ฐ ๋ง์ด ์๋ชจ๋๋ค.
- ์ผ๋ฐ์ ์ผ๋ก ๋ก๋ ํฉํฐ๊ฐ ํน์ ๊ธฐ์ค ์ด์(์: 0.7~0.75 ์ด์)์ด ๋๋ฉด, ํด์ ํ
์ด๋ธ์ ํฌ๊ธฐ๋ฅผ ๋ ๋ฐฐ๋ก ๋๋ฆฌ๋ ์ฌํด์ฑ์ ์ํํ๋ค.
- ๋ฎ์ ๋ก๋ ํฉํฐ : ํด์ ํ ์ด๋ธ์ ๋ง์ ๋น ์ฌ๋กฏ์ด ์๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ถฉ๋ ๊ฐ๋ฅ์ฑ์ด ๋ฎ์์ง๊ณ ํ์ ์ฑ๋ฅ์ด ์ข์์ง ์ ์์ง๋ง, ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๊ฐ ๋ฐ์ํ ์ ์๋ค.
- ๋์ ๋ก๋ ํฉํฐ : ํด์ ํ ์ด๋ธ์ ๋ง์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋์ด ์๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ถฉ๋ ๊ฐ๋ฅ์ฑ์ด ๋์์ง๊ณ , ๊ทธ์ ๋ฐ๋ผ ๋ฐ์ดํฐ ๊ฒ์๊ณผ ์ฝ์ ์ ์ฑ๋ฅ์ด ์ ํ๋ ์ ์๋ค.
2. ํด์ ํ ์ด๋ธ์ ํฌ๊ธฐ ์กฐ์
ํด์ ํ ์ด๋ธ์ ํฌ๊ธฐ๊ธ ์ ์ ํ ํฐ ์์๋ก ์ค์ ํ๋ฉด ํด์ ์ถฉ๋ ๋ฐ์ ๊ฐ๋ฅ์ฑ์ด ๋ฎ์์ง๋ค.
๐ค ์ ํด์ ํ ์ด๋ธ์ ํฌ๊ธฐ๋ฅผ ์์๋ก ์ค์ ํ๋ฉด ํด์ ์ถฉ๋ ๋ฐ์ ๊ฐ๋ฅ์ฑ์ด ์ค์ด๋๋?
๐ก ์์์ ํน์ง์ผ๋ก ์ธํด ๊ณ ๋ฅธ ๋ถํฌ๋ฅผ ๊ฐ์ง๋ค. + ๋ชจ๋๋ฌ ์ฐ์ฐ์ ๊ท ์ผ์ฑ ์ฆ๊ฐ + ํจํด ํํผ
ํด์ ํจ์๋ ์ผ๋ฐ์ ์ผ๋ก ํด์๊ฐ์ ํ ์ด๋ธ ํฌ๊ธฐ๋ก ๋๋๊ณ (๋ชจ๋๋ฌ ์ฐ์ฐ ์ฌ์ฉ), ๊ทธ ๋๋จธ์ง๋ฅผ ์ฌ์ฉํด ์ธ๋ฑ์ค๋ฅผ ๊ฒฐ์ ํ๋ค.
ํด์ ํ ์ด๋ธ์ ํฌ๊ธฐ๊ฐ ์์๊ฐ ์๋ ์ง์์ด๊ฑฐ๋ ๋ค๋ฅธ ํน์ ํ ์(์: 10, 20, 100 ๋ฑ)์ผ ๊ฒฝ์ฐ, ํด์ ํจ์๊ฐ ์์ฑํ ํด์๊ฐ์ด ํน์ ํจํด์ ๊ฐ์ง๋ฉด, ์ผ๋ถ ์ธ๋ฑ์ค์ ๊ฐ์ด ์ง์ค๋์ด ์ถฉ๋์ด ์์ฃผ ๋ฐ์ํ ์ ์๋ค.
์์๋ ๋ค๋ฅธ ์์ ๊ณตํต ์ธ์๋ฅผ ๊ฐ์ง์ง ์์ผ๋ฏ๋ก, ํด์๊ฐ์ ํจํด์ ๊ด๊ณ์์ด ํด์๊ฐ๋ค์ด ๋ ๋ค์ํ ์ธ๋ฑ์ค์ ๋ถํฌํ๊ฒ ๋๋ค.
ํด์ ์ถฉ๋์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ
1. ์ฒด์ด๋ Chaining : ์ถฉ๋ ์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ
- ํด์ ํ ์ด๋ธ์ ๊ฐ ์ฌ๋กฏ์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ(๋๋ ๋ค๋ฅธ ์๋ฃ๊ตฌ์กฐ)๋ก ๊ด๋ฆฌํด ์ถฉ๋์ด ๋ฐ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ์ ์ฅํ๋ ๋ฐฉ์
- ํด์ ๊ฐ์ด ๊ฐ์ ๋ฐ์ดํฐ๊ฐ ์ถ๊ฐ๋ ๋, ํด๋น ์ฌ๋กฏ์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๋ค.
- ์ฅ์ : ํ ์ด๋ธ ํฌ๊ธฐ์ ์ ํ์ด ์์ผ๋ฉฐ, ๋ฐ์ดํฐ๊ฐ ๊ณ์ ์ถ๊ฐ๋ ์ ์๋ค.
- ๋จ์ : ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๋ฐ์ดํฐ๊ฐ ๋ง์์ง๋ฉด, ํ์ ์๊ฐ์ด O(n)์ผ๋ก ์ฆ๊ฐํ ์ ์๋ค. ํด์๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ํ์, ์ฝ์
, ์ญ์ ๊ธฐ๋ฅ์ด O(1)์ด๋ผ๋ ์ฅ์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ด๊ธฐ์ ๋ฌธ์ ๊ฐ ๋๋ค.
- ์ด๋ฐ ๋ฌธ์ ๋ก ์ฐ๊ฒฐ ๋ฆฌ์คํธ ๋์ ๊ท ํ ์ด์ง ํ์ ํธ๋ฆฌ๋ฅผ ์ฌ์ฉํด ํ์ ์๊ฐ์ O(log n)์ผ๋ก ๊ฐ์ ํ ์ ์๋ค.
2. ๊ฐ๋ฐฉ ์ฃผ์๋ฒ Open Addressing : ์ถฉ๋ ์ ๋ค๋ฅธ ์ฃผ์ ๊ณต๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฐฉ๋ฒ
๋ํ์ ์ธ ๊ธฐ๋ฒ์ผ๋ก ์ ํ ํ๋ก๋น(Linear Probing), ์ด์ฐจ์ ํ๋ก๋น(Quadratic probing), ์ด์ค ํด์(Double hashing)์ด ์๋ค.
1. ์ ํ ํ๋ก๋น Linear Probing
์ถฉ๋์ด ๋ฐ์ํ๋ฉด ๊ณ ์ ๋ ํฌ๊ธฐ๋งํผ ๊ณ์ํด์ ๋ค์ ์ฌ๋กฏ์ ํ์ฌํด ๋น ์ฌ๋กฏ์ ์ฐพ๋๋ค.
๋์ ๋ฐฉ์
1. ์ถฉ๋ ๋ฐ์ ์ : ํด์ ํจ์์ ์ํด ๊ณ์ฐ๋ ์ธ๋ฑ์ค๊ฐ ์ด๋ฏธ ์ฌ์ฉ ์ค์ธ ๊ฒฝ์ฐ, ํ ์นธ์ฉ ์์ฐจ์ ์ผ๋ก ์ด๋ํด ๋น ์ฌ๋กฏ์ ์ฐพ๋๋ค.
2. ์๋ก์ด ์ฌ๋กฏ์ ์ฐพ์ ๋๊น์ง ๋ค์ ์ธ๋ฑ์ค๋ก ์ด๋ํ๋ฉฐ(๋ณดํต +1), ๋น ์ฌ๋กฏ์ด ๋์ค๋ฉด ํด๋น ์์น์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค.
3. ํด์ ํ ์ด๋ธ์ ๋์ ๋๋ฌํ๋ฉด ์ํํ์ฌ ํ ์ด๋ธ์ ์ฒ์๋ถํฐ ํ์์ ์ด์ด๊ฐ๋ค.
์์ ํํ
- h() = ํด์ ํจ์
- k = ํด์ฑ๋๋ ํค
- i = ์ถฉ๋ ํ์
- n = ํด์ ํ ์ด๋ธ์ ํฌ๊ธฐ
- h(k, i) = (h(k) + i) % n
์ ํ ํ๋ก๋น์ ์ฅ์
๊ตฌํ์ด ๊ฐ๋จํ๊ณ ์ถ๊ฐ์ ์ธ ์๋ฃ๊ตฌ์กฐ๊ฐ ํ์์๋ค.
์ ํ ํ๋ก๋น์ ๋จ์
1์ฐจ ํด๋ฌ์คํฐ๋ง ๋ฐ์ : ์ฌ๋ฌ ์ถฉ๋์ด ์ธ์ ํ ์ฌ๋กฏ์ ๋ชจ์ด๊ฒ ๋๋ฉด, ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํ๊ฑฐ๋ ๊ฒ์ํ ๋ ๊ฐ์ ์์ญ์์ ํ์์ด ์ด๋ฃจ์ด์ง๋ฏ๋ก ํ์ ์๊ฐ์ด ๊ธธ์ด์ง๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
2. ์ด์ฐจ์ ํ๋ก๋น Quadratic Probing
์ ํ ํ๋ก๋น๊ณผ ๋ค๋ฅด๊ฒ ์ ์ ๋ ํฐ ํญ์ผ๋ก ํ์ฌํ๋ ๋ฐฉ์์ผ๋ก, ๋น ์ฌ๋กฏ์ ์ฐพ๊ธฐ ์ํด ์ ๊ณฑ ๋จ์๋ก ์ด๋ํ๋ค.
๋์ ๋ฐฉ์
1. ์ถฉ๋ ๋ฐ์ ์ : ๊ธฐ๋ณธ ํด์ ์ธ๋ฑ์ค์์ ์ถฉ๋์ด ๋ฐ์ํ๋ฉด ์ ๊ณฑ ๊ฐ๊ฒฉ์ผ๋ก ์ด๋ํด ์๋ก์ด ์ฌ๋กฏ์ ์ฐพ๋๋ค.
2. i ๋ฒ์งธ ์ถฉ๋์์๋ i ์ ๊ณฑ๋งํผ์ ๊ฐ๊ฒฉ์ผ๋ก ์ด๋ํ๋ค. ์๋ฅผ ๋ค์ด, +1, +4, +9, +16 ๋ฑ์ผ๋ก ํ์ํ๋ค.
์์ ํํ
- h() = ํด์ ํจ์
- k = ํด์ฑ๋๋ ํค
- i = ์ถฉ๋ ํ์
- n = ํด์ ํ ์ด๋ธ์ ํฌ๊ธฐ
- h(k, i) = (h(k) + i * i) % n
์ด์ฐจ์ ํ๋ก๋น์ ์ฅ์
1์ฐจ ํด๋ฌ์คํฐ๋ง ๋ฌธ์ ๋ฅผ ์ค์ผ ์ ์๋ค. ์ฌ๋กฏ์ด ์ ๊ณฑ ๊ฐ๊ฒฉ์ผ๋ก ๋จ์ด์ง๊ธฐ ๋๋ฌธ์, ์ถฉ๋๋ ์์๋ค์ด ์๋ก ๋ฉ๋ฆฌ ๋จ์ด์ ธ ์ ์ฅ๋ ๊ฐ๋ฅ์ฑ์ด ๋์์ ธ ๋ฐ์ง ๋ฌธ์ ๊ฐ ์ํ๋๋ค.
์ด์ฐจ์ ํ๋ก๋น์ ๋จ์
2์ฐจ ํด๋ฌ์คํฐ๋ง ๋ฌธ์ : ๋์ผํ ํด์๊ฐ์ ๊ฐ์ง๋ ํค๋ค์ด ๋์ผํ ์์๋ก ํ์ฌํ๋ ๊ฒฝํฅ์ด ์์ด, ์ฌ์ ํ ์ถฉ๋ ๋ฌธ์ ๋ฅผ ์์ ํ ํด๊ฒจํ์ง๋ ๋ชปํ๋ค.
๋น์ฌ๋กฏ์ ์ฐพ์ ๋ ์ด๋ ๊ฐ๊ฒฉ์ด ์ปค์ง ์ ์์ด, ๋ชจ๋ ์ฌ๋กฏ์ ํ์ํ๊ธฐ ์ ์ ๋ฐฐ์ด์ ์ํํ์ง ๋ชปํ๋ ๊ฒฝ์ฐ๊ฐ ์๊ธธ ์ ์๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ํ ์ด๋ธ ํฌ๊ธฐ๋ฅผ ์์๋ก ์ค์ ํ๋ ๊ฒ์ด ์ค์ํ๋ค.
3. ์ด์ค ํด์ Double Hashing
๋ ๊ฐ์ ํด์ ํจ์๋ฅผ ์ฌ์ฉํ๋ค. ์ถฉ๋ ๋ฐ์ ์, ๋ ๋ฒ์งธ ํด์ ํจ์๋ฅผ ์ฌ์ฉํด ํ์ ๊ฐ๊ฒฉ์ ๊ฒฐ์ ํ๊ณ ๋ค๋ฅธ ์์น๋ก ์ด๋ํ๋ค.
์ด์ค ํด์๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ์ ํด์ ํจ์์ ์กฐํฉ์ ๋ค์๊ณผ ๊ฐ๋ค.
- i = ์ถฉ๋ ํ๋ฅผ ๋ํ๋ด๋ ์์ด ์๋ ์ ์
- k = ํด์ฑ๋๋ ํค
- n = ํด์ ํ ์ด๋ธ์ ํฌ๊ธฐ
- h1() = ์ฒซ ๋ฒ์งธ ํด์ ํจ์
- h2() = ๋ ๋ฒ์งธ ํด์ ํจ์
- h(k, i) = (h1(k) + i * h2(k)) % n
๊ฐ๋ฐฉ ์ฃผ์๋ฒ์ ์ฅ์ : ๋ณ๋์ ์๋ฃ๊ตฌ์กฐ๊ฐ ํ์ํ์ง ์์ผ๋ฉฐ, ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ํด์ ํ ์ด๋ธ ๋ด์ ์ ์ฅ๋๋ค.
๊ฐ๋ฐฉ ์ฃผ์๋ฒ์ ๋จ์ : ํ ์ด๋ธ์ด ๊ฐ๋ ์ฐผ์ ๋ ์ฑ๋ฅ์ด ๊ธ๊ฒฉํ ์ ํ๋ ์ ์๋ค.
'๋น ๊ตฌ๋ฉ ์ฑ์ฐ๊ธฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] Thread์ stop()๊ณผ interrupt()์ ๋น๊ต (2) | 2024.10.01 |
---|---|
[Java] ์ค๋ ๋ ์๋ช ์ฃผ๊ธฐ (1) | 2024.10.01 |
[Java] Retrofit2์์ Annotation์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ ์ดํผ๊ธฐ (1) | 2024.09.23 |
[Java] PriorityQueue (2) | 2024.09.18 |
[์๋ฃ ๊ตฌ์กฐ]์ด์ง ํ Binary Heap (1) | 2024.09.18 |