How to choose a good Hash Function? - minseok127/HashSimulator GitHub Wiki
What is a good Hash Function?
์ข์ Hash Function์ด๋ ๋ฌด์์ผ๊น์? ์๋ง๋ Hash Table์ด ์ข์ ์ฑ๋ฅ์ ๊ฐ์ง๋๋ก ํ๋ ํจ์๋ผ๊ณ ๋ณผ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
๊ทธ๋ฌ๋ฉด Hash Function์ด ์ด๋ป๊ฒ Hash Table์ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์๊น์?
Time to get Hash code
๋จผ์ Hash code๋ฅผ ๋์ถํด๋ด๋ ์๋๋ฅผ ์๊ฐํด๋ณผ ์ ์์ต๋๋ค.
๊ฒฐ๊ตญ Hash Table์ ์ฌ์ฉํ๋ ์ด์ ๋ ์ ์ฅ๋์ด ์๋ Data๋ก ๋น ๋ฅด๊ฒ ์ ๊ทผํ๊ณ ์ ํ๋ ๊ฒ์ ๋๋ค.
์ด ๊ณผ์ ์์ Hash Function์ด ๋๋ฌด ๋ง์ ์๊ฐ์ ์๋ชจํ๋ค๋ฉด ์ ์ฒด์ ์ธ Hash Table์ ์ฑ๋ฅ์ ์ ์ํฅ์ ์ค ๊ฒ์ ๋๋ค.
Collision
ํ๋์ bin์ ๋๋ฌด ๋ง์ Data๋ค์ด ์ ์ฅ๋๋ค๋ฉด ์ด ๋ํ Hash Table์ ์ฑ๋ฅ์ ๋ฎ์ถ๋ ์์ธ์ด ๋ ๊ฒ์ ๋๋ค.
์๋ฅผ ๋ค์ด 10๊ฐ์ data์ 10๊ฐ์ bins๊ฐ ์กด์ฌํ๋ค๊ณ ๊ฐ์ ํด๋ณด๊ฒ ์ต๋๋ค.
๋ง์ฝ 10๊ฐ์ bins์ 1๊ฐ์ฉ data๊ฐ ๋ค์ด๊ฐ๋ค๋ฉด, 10๊ฐ์ data ๋ชจ๋์ ์ ๊ทผํ๋ ๋ฐ ํ์ํ ํ์ ์๋ 10์ผ๋ก ์๊ฐํ ์ ์์ต๋๋ค.
๊ทธ๋ฐ๋ฐ ๋ง์ฝ 1๊ฐ์ bin์ data 10๊ฐ๊ฐ ๋ชจ๋ ๋ค์ด์๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น์?
๋งจ ์์ ์๋ data๋ 1๋ฒ์ ํ์์ผ๋ก ๋๋์ง๋ง ๋ ๋ฒ์งธ data๋ 2๋ฒ, ์ธ ๋ฒ์งธ data๋ 3๋ฒ, ... ์ด 10 * (10 + 1) / 2 = 55 ๋งํผ์ ํ์์ด ํ์ํด์ง๋๋ค.
๋ฑ์ฐจ์์ด์ ํฉ : n * (n + 1) / 2
Uniformity
์์ ๊ฐ์ด Hash Table์ Data๋ฅผ ์ข ๋ ๋น ๋ฅด๊ฒ ํ์ํ๊ธฐ ์ํด์๋ ์ต๋ํ Data๋ค์ ์ฌ๋ฌ bins์ ๊ณจ๊ณ ๋ฃจ ๋ถ๋ฐฐํด์ผ ํ๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
์ฆ Hash Function์ ๊ฒฐ๊ณผ๋ฅผ ํ ๋๋ก ์ป์ด๋ธ Index์ ๋ถํฌ๊ฐ Uniform Distribution์ ๋ํ๋ด๋ ๊ฒ์ด ์ด์์ ์ธ ์ํฉ์ธ ๊ฒ์ผ๋ก ์๊ฐํ ์ ์์ต๋๋ค.
์ด๋ฌํ ์๊ฐ์ ๋ฐํ์ผ๋ก Good Hash Function์ ์ด๋ป๊ฒ ํ๋จํด๋ณผ ์ ์์ ์ง์ ๋ํด์ ์์๋ณด๊ฒ ์ต๋๋ค.