์ฉ์ด ์ ๋ฆฌ
Hash ์๋ฃ๊ตฌ์กฐ๋
key์ value๋ฅผ ๊ฐ๋ ์๋ฃ๊ตฌ์กฐ๋ก ํจ์จ์ ์ธ ๊ฒ์๊ณผ ์ ์ฅ์ ์ํด ์ฌ์ฉ๋๋ค.
linked list์ ๋ฌ๋ฆฌ ํด๋น ์๋ฃ๊ฐ ์์นํ ๋ฒํท์ ์ฃผ์๊ฐ์ ๋ฐ๋ก ์์๋ด์ด ์ฐพ์๊ฐ ์ ์๋ค.
์๊ฐ ๋ณต์ก๋๊ฐ O(1)์ ์๋ ดํ๊ฒ ๋๋ค.
Hash ํจ์, Hash ์๊ณ ๋ฆฌ์ฆ, Hash ์ฝ๋
์์์ ๊ธธ์ด์ ๋ฐ์ดํฐ๋ฅผ ๊ณ ์ ๊ธธ์ด์ ๋ฐ์ดํฐ๋ก ๋งคํํ๋ ํจ์
๋น๋๊ธฐ์ง ์๋ฆฌ์ ์ํด ํด์ํจ์์ ๊ฒฐ๊ณผ๊ฐ์ด ์ค๋ณต ๋์ด ํด์ ์ถฉ๋์ ์ผ๊ธฐํ ์ ์๋ค.
* ๋น๋๊ธฐ์ง ์๋ฆฌ : n+1๊ฐ์ ๋ฌผ๊ฑด์ n๊ฐ์ ์์์ ๋ฃ์ ๋, ์ ์ด๋ ์ด๋ ํ ์์์๋ ๋ ๊ฐ ์ด์์ ๋ฌผ๊ฑด์ด ๋ค์ด์๋ค๋ ์๋ฆฌ
๋ฐ์ดํฐ์ value๊ฐ์ ๋ฐฐ์ด์ ์ธ๋ฑ์ค์ธ ์ ์๋ก ๋ณํํ๊ธฐ ์ํด์๋ ์ผ๋ จ์ ๊ณผ์ ์ด ํ์ํ๋ค.
์๋ฅผ๋ค์ด ๋ฐ์ดํฐ๋ฅผ ๋ฌธ์์ด๋ก ๋ฐ๊ฒ ๋์์ ๋ ๋ฌธ์ ํ๊ธ์ ํ๊ธ์์ ์์คํค ์ฝ๋ ๊ฐ์ ๋ํ๋ ๊ณผ์ ์ผ๋ก ๋ฌธ์์ด์ ์ ์ ๊ฐ์ผ๋ก ๋ณํํ ์ ์์ต๋๋ค.
๋ง์ฝ,
hello ๋ผ๋ ๋ฌธ์์ด์ ์ ์ํ key ๊ฐ์ผ๋ก ๋ฐ๊พผ๋ค๋ฉด,
h + e + l + l + o -> 104 +101 + 108 + 108 + 111 = 532๋ผ๋
ํด์์ฝ๋๋ก ๋ณํํ ์ ์๋ค.
์ฌ๋ฌ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ํด์์ฝ๋๋ก ๋ฐ๊พธ๊ธฐ ์ํ ๊ณผ์ ์ ์งํํ๊ฒ ๋๋๋ฐ, ์ฃผ์ด์ง ๋ฌธ์ ๋ง๋ค ์ ์ ํ ํด์ ํจ์(ํด์ ์๊ณ ๋ฆฌ์ฆ)์ ๊ตฌํํ๋ ๊ฒ์ ๊ฐ๋ฐ์์ ์ญ๋์ ๋ฌ๋ ค์๋ค.
Hash ์ฝ๋๋ฅผ ์ฌ์ฉํด์ Hash table์ ์ ์ฅํ๊ธฐ
ํด์์ฝ๋๋ก ๋์ฌ ์ ์๋ ์ซ์์ ๊ฒฝ์ฐ์ ์๋ ์์ฃผ ๋ง๋ค. ์ ์ฅํ ๋ฐฐ์ด์ ํฌ๊ธฐ๋ ๋ฌผ๋ฆฌ์ ํ๊ณ๊ฐ ์๊ณ ์ ๋ง์ ํด์์ฝ๋๋ค์ ๋์ฒ ํ ์ ์๋ค.
์ด๋ฐ ๊ฒฝ์ฐ ํด์์ฝ๋๋ฅผ ๋ฐฐ์ด์ ํฌ๊ธฐ๋ก ๋๋๊ณ , ๊ทธ ๋๋จธ์ง๋ฅผ ์ธ๋ฑ์ค๋ก ์ฌ์ฉํ๊ฒ ๋๋ฉด 0๋ถํฐ ๋ฐฐ์ด์ ์ฌ์ด์ฆ-1 ๋งํผ์ ์ซ์๋ก ๋ณํํ์ฌ ์ฌ์ฉ ํ ์ ์๋ค.
์๋ฅผ๋ค์ด ํด์ฌ์ฝ๋๊ฐ 532์ด๊ณ ๋ฐฐ์ด์ ํฌ๊ธฐ๊ฐ 10์ธ ๊ฒฝ์ฐ ๋๋จธ์ง๊ฐ 2๊ฐ ๋์ค๊ณ , ์ด ๋๋จธ์ง ๊ฐ์ ์ธ๋ฑ์ค๋ก ์ฌ์ฉํ๋ค.
* ๊ฐ ๋ฒํท์ ๋ช ๊ฐ์ ์ฌ๋กฏ์ผ๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
OverFlow๋
์ฌ๋ฌ๊ฐ์ ํค๊ฐ์ด ๊ณตํต๋ ๋ฒํท์ ๊ฐ๋ฆฌํค๋ ๊ฒฝ์ฐ, ๋ฒํท๋ค์ ๊ณต๊ฐ์ ์ ํํด์ ๊ฒฐ๊ตญ ๋ฒํท์ด ๊ฝ ์ฐจ๊ฒ ๋๋ค.
๊ฝ ์ฐจ์๋ ์๊ฐ ๋ํ๋์ ํค๊ฐ์ด ํด๋น ๋ฒํท์ ๋งตํ๋๋ค๋ฉด ์ค๋ฒํ๋ก์ฐ๊ฐ ๋ฐ์ํ๋ค.
์ถฉ๋ Collision
๋ค๋ฅธ ํด์์ฝ๋์์๋ ๊ฐ์ ์ธ๋ฑ์ค๊ฐ ๋์ค๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ ์ ์๋ค.
์ด๋ฐ ๊ฒฝ์ฐ ์ถฉ๋์ด ๋ฐ์ํ๋ค๊ณ ํ๋๋ฐ ์ถฉ๋์ ํด๊ฒฐ๋ฐฉ์์ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์๋ค.
๋ถ๋ฆฌ ์ฒด์ธ๋ฒ, ์ ํ ํ์ฌ๋ฒ, 2์ฐจ ํ์ฌ๋ฒ, ์ด์ค ํด์ฑ ๋ฑ์ด ์กด์ฌํ๋ค.
* ์ด๋ฌํ ์ด์ ๋ก ์๋ฐ์์ hashCode( )๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉ ํ ๋ equals( )๋ ์ค๋ฒ๋ผ์ด๋ฉ ํด์ผํ๋ค. ๋ณ๊ฐ์ ๊ฐ์ฒด๊ฐ ์ฐ์ฐํ ํด์์ฝ๋๊ฐ ๋๊ฐ์ด ๋์ค๊ฒ ๋๋๋ผ๋ equals๋ก ๊ฐ์ ๋๋ฑ์ฑ์ ํ๋ฒ ๋ ํ์ธํ๋ ๊ณผ์ ์ ๊ฑฐ์น๊ฒ ๋๋ฉด ์ถฉ๋์ ๋ฐฉ์งํ ์ ์๋ค.
์ถฉ๋ ํด๊ฒฐํ๊ธฐ
1. ๋ถ๋ฆฌ ์ฒด์ธ๋ฒ seperate chaning (open hashing)
๊ฐ์ ์ธ๋ฑ์ค๋ฅผ ๊ฐ์ง๋ ๋ฐ์ดํฐ๊ฐ ์ฌ๋ฌ๊ฐ์ธ ๊ฒฝ์ฐ, ๊ทธ ์ธ๋ฑ์ค์ Linked List๋ฅผ ์ ์ธํ๊ณ ๊ฐ ๋ฐ์ดํฐ๋ค์ ์ด ๋ฆฌ์คํธ์ ์ ์ฅํ๋ค.
์ด ์ธ๋ฑ์ค์ ๊ฐ์ ์ ์ฅ, ๊ฒ์ํ๋ ๊ฒฝ์ฐ ๋จผ์ ์ธ๋ฑ์ค์ ์ ๊ทผํ๊ณ ์ธ๋ฑ์ค์ ์กด์ฌํ๋ ๋งํฌ๋ ๋ฆฌ์คํธ์ ๋ฐ์ดํฐ๋ค์ ํ๋์ฉ ์กฐํํฉ๋๋ค.
ํ ์ธ๋ฑ์ค์ ๋งํฌ๋ ๋ฆฌ์คํธ์ ์ฌ์ด์ฆ๊ฐ ํฌ๊ฒ ๋์ค๊ฒ ๋๋ฉด ํด์ ํจ์ (ํด์ ์๊ณ ๋ฆฌ์ฆ)์ด ์ฃผ์ด์ง ๋ฌธ์ ์ ์ ์ ํ์ง ์์ ๊ฒฝ์ฐ์ด๋ฏ๋ก ์ค๊ณ๋ฅผ ๋ค์ ๊ณ ๋ คํด๋ด์ผ ํ๋ค.
* ์ถฉ๋์ด ๋ฐ์ํ๋ฉด ์ฃผ์ด์ง ํด์ํ ์ด๋ธ ๊ณต๊ฐ์ธ์ ์๋ก์ด ๊ณต๊ฐ์ ํ ๋นํด์ฃผ๊ธฐ ๋๋ฌธ์ open hashing์ด๋ผ๊ณ ๋ ๋ถ๋ฆฐ๋ค.
2. Open Addressing (Closed Hashing)
์ฃผ์ด์ง ํด์ํ ์ด๋ธ์์ ์ ํด์ง ๊ท์น์ ๋ฐ๋ผ ๋ฒํท์ ์ฐพ์ ์ ์ฅํ๋ ๋ฐฉ๋ฒ์ด๋ค. open addressing์ ๋ฒํท ๊ฒฐ์ ๋ฐฉ๋ฒ์๋ ๋ช๊ฐ์ง๊ฐ ์๋ค.
2.1 ์ ํ ์กฐ์ฌ
์ถฉ๋์ด ์ผ์ด๋ ๋ค์ ์๋ฆฌ์ ์ ์ฅํ๋ ๋ฐฉ๋ฒ
์ 1 ๊ตฐ์ง ํ์์ด ๋ฐ์ํ๋ค
* ์ 1 ๊ตฐ์ง ํ์ : ํน์ ์์ญ์ ๋ฐ์ดํฐ๊ฐ ๋ชฐ๋ฆด ๋, linked list์ ์์ฐจ ํ์์ผ๋ก ๋ฐ์ดํฐ์ ์ ์ฅ๊ณต๊ฐ์ด ์ง์ ๋์ด ์ฑ๋ฅ์ด ์น๋ช ์ ์ผ๋ก ์ ํ๋๋ค. ( ์ด์ฐจ์ ์กฐ์ฌ๋ก ํด๊ฒฐ ๊ฐ๋ฅํ๋ค)
2.2 ์ด์ฐจ์ ์กฐ์ฌ
์ถฉ๋์ด ๋ฐ์ํ ๊ฒฝ์ฐ ๋ค์ ๋ฐ์ดํฐ์ ์๋ฆฌ๋ฅผ ์ด์ฐจํจ์๋ก ๊ฒฐ์ ํ๋ค.
2.3 ๋๋ธ ํด์ฑ
2.4 ๋ฌด์์ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ
<์ฐธ๊ณ >
https://siyoon210.tistory.com/85 https://galid1.tistory.com/171
'๐ฅ > JAVA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JAVA] JVM ๋์ ์๋ฆฌ ๋ฐ ๊ธฐ๋ณธ ๊ฐ๋ (0) | 2021.12.11 |
---|---|
[JAVA] ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ(OOP)์ด๋? (0) | 2021.08.11 |
[JAVA] ์๋ฐ๊ฐ์๋จธ์ , JVM์ด๋? (0) | 2021.08.11 |
[JAVA] HashMap๊ณผ HashTable์ ์ฐจ์ด์ (0) | 2021.08.04 |