Hash-Table
๐ซ @TODO
Hash
Hash Table
ํด์ฌ ํจ์์ ํจ๊ป ๋ฐ์ดํฐ ๊ฒ์์ ํจ์จ์ ์ผ๋ก ํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ๊ตฌ์กฐ
Key(๋ฐ์ดํฐ ์๋ณ์), Value(๋ฐ์ดํฐ์ ๋ด์ฉ)์ด ํ ์์ ์ด๋ฃจ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ
ํน์ ๋ฐ์ดํฐ๊ฐ ๋ช ๋ฒ์งธ์ ์ ์ฅ๋ผ ์๋์ง ๋ชจ๋ฅด๋ฏ๋ก ์์์๋ถํฐ ์ฐจ๋ก๋๋ก ํ์ธ?
์ ํ ํ์
๋ฐ์ดํฐ์์ ๋น๋กํด์ ๊ณ์ฐ ์๊ฐ์ด ๋์ด๋จ
๋ฐฐ์ด ํ์์ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ฏ๋ก ํ์์๋ ์ ํฉํ์ง ์์ ๊ตฌ์กฐ
So,
- ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ ๋ ํด์ํจ์๋ฅผ ์ด์ฉํด์, Key์ ํด๋นํ๋ ํด์๊ฐ์ ๊ณ์ฐ
- i.e. Joe -> 4928
- ๊ตฌํ ํด์๊ฐ์ ํด์ ํ
์ด๋ธ์ ํฌ๊ธฐ๋ก ๋๋จธ์ง ์ฐ์ฐ (mod ์ฐ์ฐ)
- i.e. 4928 % 5 = 3
- ๊ณ์ฐํ ๊ฐ ์์น์ ๋ฐ์ดํฐ ์ ์ฅ
- i.e. 3๋ฒ ์์น์ ์ ์ฅ
- ๋ฐ๋ณต, ๋ง์ฝ ์ค๋ณต๋ ๊ฐ์ด ๋์ค๋ฉด (์ถฉ๋์ด๋ผ๊ณ ํจ) ์ฐ๊ฒฐ๋ฆฌ์คํธ๊ตฌ์กฐ๋ก ๊ธฐ์กด ๋ฐ์ดํฐ์ ์ฐ๊ฒฐ (์ฐ์๋ฒ Chaining์ด๋ผ๊ณ ํจ)
- ๊ฒ์ ์ ๋ง์ฐฌ๊ฐ์ง๋ก mod ์ฐ์ฐ ๊ฐ์ผ๋ก ์ฐพ์, ์ถฉ๋๋ก ์ธํด ์ฐ๊ฒฐ๋ฆฌ์คํธ๊ฐ ๋ง๋ค์ด์ง ์์น์ผ ๊ฒฝ์ฐ, ์ ํ ํ์ ์ค์
ํด์ ํจ์๋ฅผ ํตํด ๋ฐฐ์ด ๋ด์ ํน์ ๋ฐ์ดํฐ์ ๋น ๋ฅด๊ฒ ์ ๊ทผ ๊ฐ๋ฅ
ํํธ, ํด์๊ฐ์ด ์ถฉ๋ํ ๋๋ ๋ฆฌ์คํธ๋ฅผ ์ด์ฉํ๊ณ ์์ด์ ์ ์ฅํ ๋ฐ์ดํฐ ์๊ฐ ์ ํด์ ธ ์์ง ์๋๋ผ๋ ์ ์ฐํ๊ฒ ๋์ํ ์ ์์
ํด์ํ
์ด๋ธ์ ๋ฐฐ์ด ํฌ๊ธฐ
๋๋ฌด ์์ผ๋ฉด ์ถฉ๋์ด ๋ง์์ง๊ณ -> ์ ํ ํ์์ ๋น๋๊ฐ ๋์์ง
๋๋ฌด ์ปค์ง๋ฉด ๋ฐ์ดํฐ๊ฐ ์๋ ๊ณต๊ฐ์ด ๋ง์์ ธ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ญ๋น
์ ์ ํ ํฌ๊ธฐ๋ก ์ค์ ํ๋ ๊ฒ์ด ์ค์
์ถฉ๋ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ์ ์ฐ์๋ฒ ๋ง๊ณ ๋ ์ฌ๋ฌ ๊ฐ์ง๊ฐ ์์
๊ฐ๋ฐฉ ์ฃผ์๋ฒ Open addressing
์ถฉ๋์ด ๋ฐ์ํ ๊ฒฝ์ฐ ๋ค์ ํ๋ณด๊ฐ ๋ ์ฃผ์ (๋ฐฐ์ด ์์ ์์น)๋ฅผ ๊ตฌํด์ ๊ฑฐ๊ธฐ์ ์ ์ฅํ๋ ๋ฐฉ์
ํด๋น ์ฃผ์์๋ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ๋ค๋ฉด ๋ค์ ํ๋ณด ์ฃผ์๋ฅผ ๊ตฌํ๋ฉฐ ๋น์ด์๋ ๊ณณ์ ์ฐพ์ ๋๊น์ง ๋ค์๋ฒ ์ฃผ์๋ฅผ ๊ตฌํจ
๋ค์ ์ฃผ์๋ฅผ ์ด๋ป๊ฒ ๊ตฌํ๋ ๊ฐ๋
ํด์ ํจ์๋ฅผ ์ฌ๋ฌ ๊ฐ ์ฌ์ฉํ๋ค๋์ง, โ์ ํ ํ์ฌโ ๋ฑ ๋ช ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์
ํด์ ํจ์์ ๊ฒฝ์ฐ,
ํด์๊ฐ์ผ๋ก๋ถํฐ ์๋ ๊ฐ์ ์ถ์ธกํ ์ ์๋๋ก ๊ตฌํํ๊ธฐ๋ ํ์ง๋ง,
๋ณด์์ ์ํ ๊ฒ์ด๋ฏ๋ก ํ์์ ์ธ ์กฐ๊ฑด์ ์๋
๋ฐ์ดํฐ์ ์ ์ฐํ ์ ์ฅ๊ณผ ๋น ๋ฅธ ์ ๊ทผ์ด ๊ฐ๋ฅํ ํด์ ํ
์ด๋ธ์
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ์ฐ๊ด ๋ฐฐ์ด Associative array๋ฑ์ ์ฌ์ฉ๋๊ณ ์์