Hash
๐ฆย ํด์ฑ๊ณผ ํด์ํจ์
๐ก Hash Function : ์์์ ๋ฐ์ดํฐ๋ฅผ ๊ณ ์ ๋ ๊ธธ์ด์ ๋ฐ์ดํฐ๋ก ๋งคํํ๋ ๋จ๋ฐฉํฅ ํจ์.
Hashing : ํด์ํจ์๋ฅผ ์ด์ฉํด์ ๋ฐ์ดํฐ๋ฅผ ํด์ ํ
์ด๋ธ์ ์ ์ฅํ๊ณ ๊ฒ์ํ๋ ๊ธฐ๋ฒ.
Hash function
- ๋ณดํต ๋ณต์กํ์ง ์์ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๊ตฌํ๋๊ธฐ ๋๋ฌธ์ ์๋์ ์ผ๋ก ์์คํ
์์ ์๋ชจ๊ฐ ๋ํ๋ค.
- ํด์๊ฐ (ํด์์ฌ, ์ฒดํฌ์ฌ) : ํด์ ํจ์๋ฅผ ์ ์ฉํ์ฌ ๋์จ ๊ณ ์ ๋ ๊ธธ์ด์ ๊ฐ
Hashing
- ํด์ํจ์๋ฅผ ์ด์ฉํด์ ๋ฐ์ดํฐ๋ฅผ ํด์ ํ
์ด๋ธ์ ์ ์ฅํ๊ณ ๊ฒ์ํ๋ ๊ธฐ๋ฒ.
- ํด์ํจ์๋ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋์ด ์๋ ๊ณณ์ ์๋ ค์ฃผ๊ธฐ ๋๋ฌธ์ ๋ค๋์ ๋ฐ์ดํฐ ์ค์์ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ์ฐพ์ ์ ์๋ค.
- HashSet, HashMap, Hashtable ๋ฑ์ด ํด์ฑ์ ๊ตฌํํ์๋ค.
- ์ค์ ํด์ฑ์ ๊ตฌํํ Collection ํด๋์ค์์๋ Object ํด๋์ค์ ์ ์๋ hashCode()๋ฅผ ํด์ํจ์๋ก ์ฌ์ฉํ๋ค.
- hashCode()๋ ๊ฐ์ฒด์ ์ฃผ์๋ฅผ ์ด์ฉํ์ฌ ํด์์ฝ๋๋ฅผ ๋ง๋ค์ด ๋ด๊ธฐ ๋๋ฌธ์ ๊ฑฐ์ ๋ชจ๋ ๊ฐ์ฒด์ ํด์๊ฐ์ด ์ถฉ๋ํ์ง ์๋๋ค.
- ์ฐธ๊ณ ) String ํด๋์ค๋ hashCode()๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉํ์ฌ ๋ฌธ์์ด์ ๋ด์ฉ์ผ๋ก ํด์๊ฐ์ ๋ง๋ค์ด๋ธ๋ค.
โ ์๋ฃ๊ตฌ์กฐ์์์ ํ์ฉ
[์ ์ฅํ๋ ๊ณผ์ ]
- ์ถฉ๋ถํ ๊ณต๊ฐ์ ํ ๋น๋ฐ์ ๋ค์ ํด์ ํจ์๋ฅผ ์ด์ฉํ์ฌ ๊ณ ์ index๋ฅผ ์์ฑํ๊ณ , ์ด index์ ๊ฐ์ ์ ์ฅํ๋ค.
- ์ถฉ๋ถํ ๊ณต๊ฐ์ ๊ธฐ์ค
- ์ด์์ ์ผ๋ก๋ ๋ค๋ค์ต์ ์ผ๋ก ํด ์๋ก ํด์ ์ถฉ๋์ ๋ง์ ์ ์๋ค.
- ๊ทธ๋ฌ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ํ์ฉํ๊ธฐ ์ํด ์ ๋นํ ํฐ ๊ณต๊ฐ์ ํ ๋นํ๋ค.
- ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ๋ฅผ ๋ฏธ๋ฆฌ ์ ์ธํ์ง ์๊ณ ๋์ ์ผ๋ก ํ ๋นํ๋ ๋ฐฉ๋ฒ๋ ์๋ค.
- ํต๊ณ์ ์ผ๋ก ํด์ ํ
์ด๋ธ ์ฌ์ฉ ๊ณต๊ฐ์ด 70~80% ์ ๋๊ฐ ๋๋ฉด ํด์์ ์ถฉ๋์ด ๋น๋ฒํ๊ฒ ๋ฐ์ํ์ฌ ์ฑ๋ฅ์ด ์ ํ๋๊ธฐ ์์ํ๋ค๊ณ ํ๋ค.
[๊บผ๋ด๋ ๊ณผ์ ]
- ํด์ ํจ์๋ ํญ์ ๋์ผํ ํด์๊ฐ์ ๋ฐํํ๊ธฐ ๋๋ฌธ์ key์ ๋ฐ๋ผ ํญ์ ๊ฐ์ index๋ฅผ ๋ฐํํ๋ค.
- ๋ฐ๋ผ์, ์ ๋ ฌํ์ง ์๊ณ ๋ ํด์๊ฐ์ ์ด์ฉํด ๊ฐ์ ๋ฐ๋ก ์ฐพ์ ์ ์๋ค.
- ์ด๋ฅผ ํ์ฉํ๊ธฐ ์ํด์๋ ๊ฒ์ ์๊ณ ๋ฆฌ์ฆ๋ณด๋ค ํด์ ํจ์ ์ฐ์ฐ์ด ๋ ํจ์จ์ ์ด์ด์ผ ํ๋ค.
โ ํด์ ์ถฉ๋
- ๊ฐ์ ํด์๊ฐ์ด ๋์ค๋ ์ถฉ๋์ด ๋ฐ์ํ๋ฉด index๊ฐ ๋์ผํ ์ ์๋ค.
- ๋ฐ์ดํฐ ๊ฐ์๊ฐ ์ ์ ๋๋ ์คํ ์ด๋๋ ์ฑ, ๋ฐ๋์ ๊ฒฝ์ฐ ์ฒด์ด๋์ด ํจ์จ์ด ์ข๋ค.
๐ย ํด๊ฒฐ ๋ฐฉ๋ฒ1 - ๊ฐ๋ณ ์ฒด์ด๋(Seperate Chaining)
- ํด์ํ
์ด๋ธ์ ๊ธฐ๋ณธ ๋ฐฉ์
- ๊ฐ๊ฐ์ index๋ฅผ ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ก ๋ง๋ค์ด์ ๊ฐ์ ํด์๊ฐ์ ๊ฐ์ ธ๋ ์ํ๋ ๋ฐ์ดํฐ์ ์ ๊ทผ
- JAVA์ HashMap์ด ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
๐ย ํด๊ฒฐ ๋ฐฉ๋ฒ2 - ์คํ ์ด๋๋ ์ฑ(Open Addressing)
- ๋ค์์ ์์นํ index ์ค ๋น์ด์๋ ๊ณณ์ ๋ฃ์
- ์ ์ฒด ์ฌ๋กฏ์ ๊ฐ์ ์ด์์ ์ ์ฅํ ์ ์๋ค.
- ๋ชจ๋ ์์๊ฐ ๋ฐ๋์ ์์ ์ ํด์๊ฐ๊ณผ ์ผ์นํ๋ ์ฃผ์์ ์ ์ฅ๋๋ค๋ ๋ณด์ฅ์ ์๋ค.
โ ํด์ํ
์ด๋ธ ์๊ฐ ๋ณต์ก๋
- O(1) : key๊ฐ์ ํด์ํจ์์ ์ํด ๊ณ ์ index๋ฅผ ๊ฐ์ง๊ฒ ๋์ด ๋ฐ๋ก ์ ๊ทผํ ์ ์๋ค.
- ๋ฐ์ดํฐ ์ถฉ๋์ด ๋ฐ์ํ ๊ฒฝ์ฐ chaining์ ์ฐ๊ฒฐ๋ ๋ฆฌ์คํธ๋ ํ์ํ๋ฏ๋ก O(N)๊น์ง ์ฆ๊ฐํ ์ ์๋ค.
- ํ
์ด๋ธ์ด ๊ฝ ์ฐจ์๋ ๊ฒฝ์ฐ๋ผ๋ฉด ํ
์ด๋ธ์ ํ์ฅํด์ฃผ์ด์ผ ํ๋๋ฐ, ์ด๋ ์ฌ๊ฐํ ์ฑ๋ฅ ์ ํ๋ฅผ ๋ถ๋ฌ์ค๊ธฐ ๋๋ฌธ์ ๊ฐ๊ธ์ ํ์ฅ์ ํ์ง ์๋๋ก ์ค๊ณํด์ผ ํ๋ค.
โ HashTable vs HashMap
- ๋์ ๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ ๋๊ธฐํ ๋ณด์ฅ ์ ๋ฌด, ํค์ ๊ฐ์ null ๊ฐ๋ฅ ์ฌ๋ถ์ด๋ค.
- ๋๊ธฐํ : ๋๊ธฐํ๊ฐ ํ์ํ๋ฉด HashTable์ ์ฌ์ฉํ์ง๋ง, ํ์์๋ค๋ฉด ๋น ๋ฅธ HashMap์ด ์ ๋ฆฌํ๋ค.
- HashMap : ๋๊ธฐํ๋ฅผ ๋ณด์ฅํ์ง ์์ผ๋ฉฐ not-thread safeํ๋ค.
- HashTable : ๋๊ธฐํ๋ฅผ ๋ณด์ฅํ๋ค. ๋ฉํฐ์ฐ๋ ๋ ํ๋ก๊ทธ๋๋ฐ์์๋ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ ์ ์ง๋ฅผ ์ํด ๋๊ธฐํ๊ฐ ํ์ํ๋ค. ๋์ , ๋๊ธฐํ๋ ์๋๋ฅผ ๋๋ฆฌ๊ฒ ํ๋ค.
- null ๊ฐ :
- HashMap : null๊ฐ์ ํ์ฉํ๋ค.
- HashTable : null๊ฐ์ ํ์ฉํ์ง ์๋๋ค.
- HashTable์ Collection ํ๋ ์์ํฌ๊ฐ ๋ง๋ค์ด์ง๊ธฐ ์ ์ ์กด์ฌํ๋ ๊ฒ์ผ๋ก ํธํ์ ์ํด ๋จ๊ฒจ๋์์ง๋ง ๊ฐ๋ฅํ๋ฉด ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ์ข๋ค.