What is a Division Hashing? - minseok127/HashSimulator GitHub Wiki

Division Hashing

Division Hashing์ด๋ž€ ์ฃผ์–ด์ง„ key๋ฅผ bin์˜ ๊ฐœ์ˆ˜๋กœ ๋‚˜๋ˆ ์„œ ์ƒ๊ธด ๋‚˜๋จธ์ง€๋ฅผ bin์˜ Index๋กœ ์‚ฌ์šฉํ•˜๋Š” Hashing์ž…๋‹ˆ๋‹ค.

int index = key % M;

bin์˜ ๊ฐœ์ˆ˜๊ฐ€ M๊ฐœ์ผ ๋•Œ, key % M์„ ํ•œ ๊ฒฐ๊ณผ๋Š” 0์—์„œ M - 1๊นŒ์ง€ ์ƒ๊ธฐ๊ธฐ ๋•Œ๋ฌธ์— bin์˜ Index๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ด๋ฒˆ ํŽ˜์ด์ง€์—์„œ๋Š” M์˜ ๊ฐ’์— ๋”ฐ๋ผ ์–ด๋–ค ์ ๋“ค์ด ๋‹ฌ๋ผ์ง€๋Š” ์ง€ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

Contents

Multiple of 2

M์„ 2์˜ ๋ฐฐ์ˆ˜๋กœ ์„ค์ •ํ•œ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค.

key๊ฐ€ ํ™€์ˆ˜๋ผ๋ฉด index๋„ ํ™€์ˆ˜๋กœ ์„ค์ •๋˜๊ณ , key๊ฐ€ ์ง์ˆ˜๋ผ๋ฉด index๋„ ์ง์ˆ˜๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ Uniformํ•˜์ง€ ์•Š์€ key์˜ ๋ถ„ํฌ๊ฐ€ index์— ๊ทธ๋Œ€๋กœ ๋ฐ˜์˜๋  ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ ์ ˆํ•œ ๊ฐ’์œผ๋กœ ๋ณผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

Power of 2

2์˜ ๊ฑฐ๋“ญ์ œ๊ณฑ ๋˜ํ•œ 2์˜ ๋ฐฐ์ˆ˜์™€ ๊ฐ™์ด ๊ฒฐ๊ณผ๊ฐ€ ํ™€์ˆ˜์™€ ์ง์ˆ˜๋กœ ํŽธํ–ฅ๋˜์–ด ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋‚˜๋จธ์ง€๋ฅผ ๊ตฌํ•˜๋Š” ๊ณผ์ •์ด %์—ฐ์‚ฐ ๋Œ€์‹  &์—ฐ์‚ฐ์œผ๋กœ ๋Œ€์‹ ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ํŠน์ง•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด a๋ผ๋Š” ๊ฐ’์„ 2^b๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ๊ตฌํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

a์˜ bit๋“ค์„ ์˜ค๋ฅธ์ชฝ์œผ๋กœ b์นธ ์˜ฎ๊ธด ๊ฒƒ์€ a / 2^b์˜ ๋ชซ์ž…๋‹ˆ๋‹ค. ์ด ๊ฐ’์„ q๋ผ๊ณ  ๋ถ€๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ๋‚˜๋จธ์ง€๋Š” a - q * 2^b ์ž…๋‹ˆ๋‹ค.

์ข€ ๋” ์‰ฝ๊ฒŒ ๋ณด๋ฉด

x x x x ... x x | y y y y ... y y

์œ„์˜ ๊ธฐํ˜ธ๋“ค์ด ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ’์„ a๋ผ๊ณ  ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  | ๋Š” 2^b๋กœ ๋‚˜๋ˆด์„ ๋•Œ ๋‚จ์•„์žˆ๋Š” bit๋“ค์„ ๊ตฌ๋ณ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ฆ‰ ์œ„์˜ ๊ฐ’์„ 2^b๋กœ ๋‚˜๋ˆด์„ ๋•Œ 0 0 0 0 ... 0 0 | x x x x ... x x ์™€ ๊ฐ™์ด x๋กœ ํ‘œ๊ธฐ๋œ bit๋“ค๋งŒ ๋‚จ๊ฒŒ ๋˜๊ณ  ์ด ๊ฐ’์ด q์ž…๋‹ˆ๋‹ค.

์ด ๋•Œ 2^b๋ฅผ ํ‘œํ˜„ํ•ด๋ณด๋ฉด 0 0 0 0 ... 0 1 | 0 0 0 0 ... 0 0 ์™€ ๊ฐ™์ด ํ‘œํ˜„๋˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด q * 2^b๋Š” x x x x ... x x | 0 0 0 0 ... 0 0 ์ด๊ณ ,

๊ฒฐ๊ตญ a - q * 2^b์€ 0 0 0 0 ... 0 0 | y y y y ... y y ์ด๋ฏ€๋กœ

a % 2^b์€ a์˜ 0๋ฒˆ์งธ bit๋ถ€ํ„ฐ b - 1๋ฒˆ์งธ bit๊นŒ์ง€์˜ bit๋“ค์„ 2^b - 1๊ณผ AND์—ฐ์‚ฐํ•œ ๊ฒฐ๊ณผ์ธ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์„ฑ์งˆ์„ ์ด์šฉํ•˜์—ฌ 2์˜ ๊ฑฐ๋“ญ์ œ๊ณฑ์€ % ์—ฐ์‚ฐ๋ณด๋‹ค ๋น ๋ฅธ & ์—ฐ์‚ฐ์„ ํ†ตํ•ด ๋‚˜๋จธ์ง€๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ํŠน์ง•์„ ๊ฐ€์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

key์˜ ๋ถ„ํฌ๊ฐ€ ์ด๋ฏธ Uniformํ•˜๋‹ค๋ฉด bin์˜ ๊ฐœ์ˆ˜๋ฅผ 2์˜ ๊ฑฐ๋“ญ์ œ๊ณฑ์œผ๋กœ ํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚˜์€ ์„ ํƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Composite Number

Composite Number๋ž€ Prime Number์— ๋ฐ˜๋Œ€๋˜๋Š” ์šฉ์–ด๋กœ ์†Œ์ธ์ˆ˜๋ถ„ํ•ด๊ฐ€ ๊ฐ€๋Šฅํ•œ ์ˆ˜๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ฐ’์„ M์œผ๋กœ ์„ค์ •ํ•  ๊ฒฝ์šฐ M์˜ ์†Œ์ธ์ˆ˜๋“ค์— ๋Œ€ํ•ด์„œ ํŽธํ–ฅ๋œ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด M์ด 15์ธ ๊ฒฝ์šฐ 15์˜ ์†Œ์ธ์ˆ˜์ธ 3, 5์˜ ๋ฐฐ์ˆ˜๋“ค์— ๋Œ€ํ•ด์„œ ํ•œ์ •๋œ index๋“ค๋งŒ ๋‚˜ํƒ€๋‚˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

3์˜ ๋ฐฐ์ˆ˜์˜ ๊ฒฝ์šฐ 0, 3, 6, 9, 12 index๋งŒ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๊ณ , 5์˜ ๋ฐฐ์ˆ˜์˜ ๊ฒฝ์šฐ 0, 5, 15 index๋งŒ ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

3์˜ ๋ฐฐ์ˆ˜์™€ 5์˜ ๋ฐฐ์ˆ˜๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ 0 ~ 14๊นŒ์ง€์˜ index ๋ชจ๋‘๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ฆ‰ key๊ฐ€ ์†Œ์ธ์ˆ˜์˜ ๋ฐฐ์ˆ˜์— ๋Œ€ํ•ด์„œ ๋‹ค๋ฅธ ์ˆ˜๋“ค๊ณผ ๊ตฌ๋ณ„๋˜๋Š” ํŠน์ง•์„ ๊ฐ€์ง„๋‹ค๋ฉด index ๋˜ํ•œ ํŽธํ–ฅ๋œ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

Prime Number

Prime Number๋Š” ์†Œ์ธ์ˆ˜๋ถ„ํ•ดํ•œ ๊ฒฐ๊ณผ๊ฐ€ 1๊ณผ ์ž๊ธฐ ์ž์‹ ๋งŒ ๋‚จ๋Š” ์ˆ˜๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ฒฝ์šฐ Composite Number์ฒ˜๋Ÿผ ํŠน์ • ์ˆ˜์˜ ์ง‘๋‹จ์— ๋Œ€ํ•ด์„œ ํ•œ์ •๋œ index๋งŒ ๋„์ถœ๋˜๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ฐ˜์ ์ธ Division Hashing์€ M์„ Prime Number๋กœ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์€ ์„ ํƒ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.