What is a Multiplicative Hashing? - minseok127/HashSimulator GitHub Wiki
Multiplicative Hashing
Multiplicative Hashing์ด๋ Middle Square์๋ ๋ค๋ฅด๊ฒ ์๊ธฐ ์์ ์ด ์๋ ํน์ ํ ์์๋ฅผ ๊ณฑํ๋ ๋ฐฉ์์ ๋๋ค.
์ด๋ฒ ํ์ด์ง์์๋ Multiplicative Hashing์ด ์ด๋ค ํน์ง์ ๊ฐ์ง๋ ์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค.
Contents
Scheme
Multiplicative Hashing์ ๋ค์๊ณผ ๊ฐ์ ์์์ ์ฌ์ฉํฉ๋๋ค.
h(k) = |_ M * ( (A / w) * K mod 1 ) _| // ex) |_ x _| : x๋ณด๋ค ํฌ์ง ์์ ์ ์, A mod B : A๋ฅผ B๋ก ๋๋ ๋๋จธ์ง
bin์ ๊ฐ์์ธ M์๋ค๊ฐ ( (A / w) * K mod 1 )์ด๋ผ๋ ๊ฐ์ ๊ณฑํด์ index๋ฅผ ๊ฒฐ์ ํ๋ค๋ ์๋ฏธ์ ๋๋ค.
(A / w) * K mod 1 ๋ Key์ (A / w)๋ผ๋ ๊ฐ์ ๊ณฑํ ํ ๊ทธ๊ฒ์ 1๋ก ๋๋ ๋๋จธ์ง, ์ฆ ์์๋ถ๋ถ์ ๊ฒฐ๊ณผ๊ฐ์ผ๋ก ๊ฐ์ง๋๋ค.
์ ๋ฆฌํ์๋ฉด M์ 0์์ 1 ์ฌ์ด์ ์์๋ฅผ ๊ณฑํ ํ ๊ทธ ๊ฐ์ ์ ์๋ถ๋ถ์ ์ทจํ์ฌ Index๋ก ์ฌ์ฉํ๋ค๋ ์๋ฏธ์ ๋๋ค.
Constants
๊ทธ๋ ๋ค๋ฉด ์ฌ๊ธฐ์ A์ w๊ฐ ์๋ฏธํ๋ ๊ฒ์ ๋ฌด์์ผ๊น์?
A๋ integer๋ฅผ ์๋ฏธํฉ๋๋ค. ์ฆ 32๋นํธ๋ก ํํ๋๋ ์ ์๋ฅผ ๋ปํฉ๋๋ค.
w๋ word size๋ฅผ ์๋ฏธํฉ๋๋ค. ์ฌ๊ธฐ์๋ integer์ ํฌ๊ธฐ์ธ 2^32๋ก ์๊ฐํฉ๋๋ค.
MSB๋ฅผ ๋ถํธ๋ก ์๊ฐํ์ง ์๋ unsigned int๋ฅผ ๊ฐ์ ํฉ๋๋ค.
์ค์ unsigned int์ ํฌ๊ธฐ๋ ์ต๋ 2^32 - 1์ด์ง๋ง ํธ์๋ฅผ ์ํด 2^32๋ก ์๊ฐํ๊ฒ ์ต๋๋ค.
์ ๋ฆฌํ์๋ฉด A / w๋ 0์์ 1 ์ฌ์ด์ ์์๋ฅผ ์๋ฏธํฉ๋๋ค.
Interpretation
The Art of Computer Programming, vol. 3 by Donald Knuth์ ๋์ค๋ Multiplicative Hashing์ ๋ํ ์ค๋ช ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
word์ ์ ์ผ ์ผ์ชฝ์ ์์์ ์ด ์ฐํ์๋ค๊ณ ์๊ฐํ๋ฉด Integer A๋ ์ด๊ฒ ์์ฒด๋ก ์์(fraction)๋ก ๋ณผ ์ ์๋ค๋ ๊ฒ์ ๋๋ค.
์ฆ A / w ๋ผ๋ ๋ถ์๋ฅผ ์ผ์ชฝ์ ์์์ ์ด ์ฐํ์๋ Integer A์ ๊ฐ์ ๊ฒ์ผ๋ก ๊ฐ์ฃผํ๋ ๊ฒ์ ๋๋ค.
... 36 35 34 33 32 | 31 30 ... 2 1 0 // ๊ฐ ์ซ์๋ bit์ index๋ฅผ ์๋ฏธํฉ๋๋ค.
integer part | fractional part // ์ข์ธก์ ์ ์๋ถ๋ถ, ์ฐ์ธก์ ์์๋ถ๋ถ
A / w๋ฅผ ์ด๋ฌํ ๋ฐฉ์์ผ๋ก ์ ์ฅํ ๋ ์ ์๋ถ๋ถ์ ๋ชจ๋ 0์ด๊ณ ์์๋ถ๋ถ์ผ๋ก A์ bit๋ค์ด ์ ์ฅ๋ฉ๋๋ค.
w๋ word size์ด๊ธฐ ๋๋ฌธ์ A๋ณด๋ค ํญ์ ํฐ ๊ฐ์ ๊ฐ์ง๋๋ค.
๊ทธ ํ K๋ฅผ ๊ณฑํ๋ฉด ์์๋ถ๋ถ์ bit๋ค์ด carry๋์ด ์ ์๋ถ๋ถ์ bit๋ค์ด ์ฑ์์ง ์ ์์ต๋๋ค.
์ฌ๊ธฐ๊น์ง๊ฐ (A / w) * K์ ๋ํ ๋ด์ฉ์ ๋๋ค.
์ดํ mod 1์ ํ๋ค๋ ๊ฒ์ carry๋ ์ ์๋ถ๋ถ bit๋ค์ ์์ ์ค๋ค๋ ์๋ฏธ์ ๋๋ค.
์ด๋ ๊ฒ ๋จ์ ์์๊ฐ์ M์ ๊ณฑํ์ฌ 0์์ M - 1์ Index๋ฅผ ์ป๊ณ ์ ํฉ๋๋ค.
Implementation
์์ ์์ด๋์ด๋ฅผ ์ค์ ๋ก ๊ตฌํํ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋จผ์ M์ 2^m์ผ๋ก ์ค์ ํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ AK mod w๋ฅผ ๊ณ์ฐํฉ๋๋ค. ์ด ๊ฐ์ m bit๋งํผ ์ผ์ชฝ์ผ๋ก ์ฎ๊ฒจ์ Integer ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ m๊ฐ์ bit๋ฅผ Index๋ก ๊ฐ์ง๋ ๊ฒ์
๋๋ค.
์ข ๋ ๊ตฌ์ฒด์ ์ผ๋ก ์ดํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
w๊ฐ 2^32์ด๊ธฐ ๋๋ฌธ์ AK mod w๋ AK์ ๊ฒฐ๊ณผ์์ ์ค๋ฅธ์ชฝ๋ถํฐ 32 bit๋ง ๋จ๊ธด ๊ฒฐ๊ณผ์
๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ Interpretation์ ์์ด๋์ด๋ฅผ ๊ธฐ์ค์ผ๋ก ์๊ฐํ (A / w) * K mod 1 ๊ฒฐ๊ณผ์ ๊ฐ์ต๋๋ค.
๋จ์ 32 bit์ ๋ํด์ m์นธ ์ผ์ชฝ์ผ๋ก ์ด๋์ํค๋ฉด m bit์ ์ ์๋ถ๋ถ์ด ์๊ฒจ๋๊ณ ์ด๋ฅผ Index๋ก ์ฌ์ฉํ๋ค๋ฉด
M * ( (A / w) * K mod 1 )์ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋ํ๋๊ฒ ๋ฉ๋๋ค.
=> ๋ค์ ๋์ค๋ Three-distance theorem์ ๊ด์ ์์ ๋ด์ผํจ.
=> 2^31 + 2^30 + ... + 2^1 + 2^0 | 2^-1 + 2^-2 + 2^-3 ... + 2^-32
=> ๋ณต์กํ๊ฒ ์๊ฐํ ๊ฑฐ ์์ด ์ด๋ ๊ฒ ์ ์๋ถ๋ถ๊ณผ ์์๋ถ๋ถ์ด ํํ๋ ๋, K์ ๊ณฑํด์ง๋ ๊ฐ์ด ํผ๋ณด๋์น ๋น์จ์ธ ๊ฒฝ์ฐ
=> ์ฆ (A/w)๊ฐ ํผ๋ณด๋์ง ๋น์จ ๊ฐ์ด๊ณ , ์ด๊ฒ 2^-1 + 2^-2 + ... + 2^-32์ ๊ฐ์ด ์์๋ถ๋ถ์ 2์ง์๋ก ๋ํ๋ธ๋ค๊ณ ์๊ฐํด๋ณด์
=> ๊ทธ๋ฆฌ๊ณ modular 1์ ํ๋ค๋๊ฑด ์์๋ถ๋ถ์ ๋ชจ๋ ๋นํธ๋ฅผ 1๋ก ๋ง๋ค๊ณ &์ฐ์ฐ๊ณผ ๊ฐ๋ค.
=> key๊ฐ๋งํผ์ step์ ์ด๋ํ๊ณ ๊ทธ๊ฑฐ์ M์ ๊ณฑํ ํ์ ์ ์๋ถ๋ถ์ ์ทจํ๋ฉด ๋ช ๋ฒ์งธ bin์ธ์ง ๋์ด
=> M์ 2์ ๊ฑฐ๋ญ์ ๊ณฑ์ผ๋กํ๋ฉด ์์ ์ฐ์ฐ์ ์ฐ์ธก์ผ๋ก (32 - m)์นธ shift์ ๊ฐ๋ค.
์ด๋ฅผ ์ค์ ๋ก ์ฝ๋๋ก ๋ํ๋ด๋ณธ๋ค๋ฉด
// ์ค์ ๋ก ์ ์๋ถ๋ถ์ m bit๋ฅผ ์ป๊ธฐ ์ํด์๋
// AK๋ฅผ ์ผ์ชฝ์ผ๋ก m์นธ์ด ์๋๋ผ
// ์ค๋ฅธ์ชฝ์ผ๋ก 32 - m์นธ ์ด๋์์ผ์ผํจ
return A * K >> (32 - m);
์ด์ ๊ฐ์ด ํํํ ์ ์์ต๋๋ค.
AK mod 1
Multiplicative Hashing์ด Middle Square Hashing๊ณผ ๋ค๋ฅธ ์ ์ key์ ๊ณฑํ ์์๋ฅผ ์์๋ก ์ ํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์ด๋ฌํ ํน์ง์ด ์ด๋ค ๊ฒฐ๊ณผ๋ฅผ ๋ถ๋ฌ์ค๊ฒ ๋ ๊น์?
๋ง์ฝ A๋ฅผ w์ ๋ํด์ relatively prime(์ต๋ ๊ณต์ฝ์๊ฐ 1)ํ ๊ฐ์ผ๋ก ์ค์ ํ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ผ์ด ๋ฐ์ํฉ๋๋ค.
A` * A mod w = 1
์ด๋ฌํ ์์์ ๋ง์กฑํ๋ A`๊ฐ ์กด์ฌํฉ๋๋ค.
๋ง์ฝ A์ w์ ์ต๋ ๊ณต์ฝ์๊ฐ 1์ด ์๋๋ผ๋ฉด
์๋ฌด๋ฆฌ A์ ์ด๋ค ๊ฐ์ ๊ณฑํ๋๋ผ๋ A` * A mod w์ ๊ฐ์ ํด๋น ์ต๋ ๊ณต์ฝ์์ ๋ฐฐ์๋ก ํํ๋ฉ๋๋ค.
์๋ฅผ ๋ค์ด x = 3 * p, y = 4 * p ์ด๊ณ , p๊ฐ ์ต๋๊ณต์ฝ์์ด๋ฉด
p p p p
p p p
0 0 0 p // y๋ฅผ x๋ก ๋๋ ๊ฒฐ๊ณผ p๋ง ๋จ์์ด๋ ๊ฒ์ด๋ n๋ฐฐ๋ฅผ ํ์ฌ๋ p๋จ์๋ก ๋์ด๋๊ฒ ๋๊ณ , ํ์ชฝ์ ๋ค๋ฅธ ํ์ชฝ์ผ๋ก ๋๋์ด๋ p๋จ์๋ก ๋จ๊ฒ ๋ฉ๋๋ค.
์ ๋ณ์ K๋ฅผ ๊ณฑํ๋ฉด
K * A` * A mod w = K
=> K = ((A` mod w) * (AK mod w)) mod w // mod์ ๊ณ์ฐ ์ฑ์ง ์ฌ์ฉ
=> K = (A` * (AK mod w)) mod w // A` mod w = A`
์ด๋ฅผ ํตํด์ A์ w๊ฐ relatively prime์ผ ๋, Key๊ฐ ๋ฌ๋ผ์ง๋ค๋ฉด AK mod w ๋ํ ๋ฌ๋ผ์ง๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
c.f) A < w, K < w
์ด๋ฌํ ์ฑ์ง์ key๋ฅผ randomizeํ ์ ์๋ ์ข์ scrambling function์ผ๋ก ์ฌ์ฉ๋ ์ ์์ต๋๋ค.