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

Fibonacci Hashing

Fibonacci Hashing์€ Multiplicative Hashing์„ ์‚ฌ์šฉํ•  ๋•Œ ์–ด๋–ค ์ƒ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•œ ์งˆ๋ฌธ์—์„œ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.

์ด๋ฒˆ ํŽ˜์ด์ง€์—์„œ๋Š” Fibonacci๋ผ๋Š” ๊ฐœ๋…์ด Multiplicative Hashing๊ณผ ์–ด๋–ค ์—ฐ๊ด€์ด ์žˆ๋Š” ์ง€ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

Contents

The three distance theorem

{x} = x - |_x_| ์ด๊ณ , ฮธ๋ฅผ irrational number๋ผ๊ณ  ๊ฐ€์ •ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.   

๋งŒ์•ฝ 0์—์„œ ์‹œ์ž‘ํ•˜๊ณ  1์—์„œ ๋๋‚˜๋Š” ์„ ๋ถ„ ์œ„์— ๊ฐ๊ฐ {ฮธ}, {2ฮธ}, ... , {nฮธ} ์˜ ๊ธธ์ด๋ฅผ ๊ฐ€์ง€๋Š” ์ ๋“ค์ด ์กด์žฌํ•œ๋‹ค๋ฉด

ํ˜„์žฌ ์ด ์„ ๋ถ„ ์œ„์—๋Š” n + 1๊ฐœ์˜ ์„ ๋ถ„๋“ค์ด ํ˜•์„ฑ๋˜์–ด์žˆ๋Š” ์ƒํ™ฉ์ž…๋‹ˆ๋‹ค.

The three distance theorem์— ๋”ฐ๋ฅด๋ฉด ์ด๋Ÿฌํ•œ n + 1๊ฐœ์˜ ์„ ๋ถ„๋“ค์€ ์ตœ๋Œ€ 3๊ฐœ์˜ ์„œ๋กœ ๋‹ค๋ฅธ ๊ธธ์ด๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ {(n + 1)ฮธ}์— ํ•ด๋‹นํ•˜๋Š” ์ ์€ ํ˜„์žฌ๊นŒ์ง€ ๋งŒ๋“ค์–ด์ง„ ๊ฐ€์žฅ ๊ธด ์„ ๋ถ„ ์ค‘ ํ•˜๋‚˜์— ์ฐํžˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

ฮธ์™€ n์— ๋”ฐ๋ผ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์„ ๋ถ„์ด ๋ณ€ํ™”ํ•˜๋Š” ์ง€๋Š” Wolfram์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Bad Break

The three distance theorem์˜ ์„ฑ์งˆ์—๋Š” ์ƒˆ๋กœ์šด ์ ์ด ๊ธฐ์กด์˜ ์„ ๋ถ„ ์ค‘ ๊ฐ€์žฅ ๊ธด ๊ฒƒ์„ ๋‚˜๋ˆˆ๋‹ค๋Š” ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

The Art of Computer Programming, vol. 3 by Donald Knuth๋Š” ์ด๋ ‡๊ฒŒ ๋‚˜๋‰˜์–ด์ง„ ์„ ๋ถ„์— ๋Œ€ํ•ด์„œ

ํ•œ ์ชฝ์ด ๋‹ค๋ฅธ ์ชฝ๋ณด๋‹ค 2๋ฐฐ ์ด์ƒ ํฐ ์ƒํ™ฉ์„ Bad Break์ด๋ผ ์ •์˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ฮธ๊ฐ€ 0.9999...๋ผ๊ณ  ๊ฐ€์ •ํ•ด๋ณธ๋‹ค๋ฉด ํ•œ ์ชฝ์€ ๋‹ค๋ฅธ ์ชฝ์— ๋น„ํ•ด ๋งค์šฐ ์ž‘์€ ํฌ๊ธฐ๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ƒํ™ฉ์—์„œ๋Š” ์ƒˆ๋กญ๊ฒŒ ์ถ”๊ฐ€๋˜๋Š” ์ ๋“ค์ด 0์—์„œ 1 ์‚ฌ์ด์— ๋ฌด์ž‘์œ„ํ•˜๊ฒŒ ์œ„์น˜ํ•˜์ง€ ์•Š๊ณ , ํ•œ์ชฝ ๋์— ๋ชฐ๋ ค์„œ ๋‚˜ํƒ€๋‚˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

Fibonacci ratio

Fibonacci ratio๋Š” (โˆš5 - 1) / 2 ๋กœ ๋Œ€๋žต 0.6180339887... ์ด๋ผ๋Š” ๊ฐ’์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

ฮธ๋ฅผ Fibonacci ratio๋กœ ์„ค์ •ํ•  ๊ฒฝ์šฐ Bad Break๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ๋‹ค๋Š” ํŠน์ง•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ฆ‰ ์ƒˆ๋กœ์šด ์ ๋“ค์ด 0๊ณผ 1 ์–ด๋А ํ•œ์ชฝ์— ํŽธํ–ฅ๋˜์–ด ๋‚˜ํƒ€๋‚˜์ง€ ์•Š๊ณ , ๋ฌด์ž‘์œ„ํ•˜๊ฒŒ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

Constant

๊ทธ๋ ‡๋‹ค๋ฉด ์ด๋Ÿฌํ•œ ๋น„์œจ๋“ค์ด Constant์™€ ์–ด๋–ค ์—ฐ๊ด€์ด ์žˆ์„๊นŒ์š”?

Multiplicative Hashing์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ˆ˜์‹์„ ๋‹ค์‹œ ์ ์–ด๋ณด๋ฉด

h(k) = |_ M * ( (A / w) * K mod 1 ) _|  // ex) |_ x _| : x๋ณด๋‹ค ํฌ์ง€ ์•Š์€ ์ •์ˆ˜, A mod B : A๋ฅผ B๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€

์ด์™€ ๊ฐ™์ด ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ (A / w)๋ฅผ ฮธ๋กœ ์ƒ๊ฐํ•ด๋ณธ๋‹ค๋ฉด (A / w) * K mod 1์€ {Kฮธ}๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฆ‰ key์— ๋”ฐ๋ผ์„œ ๋ณ€ํ™”ํ•˜๋Š” (A / w) * K mod 1์˜ ์›€์ง์ž„์€ Wolfram์—์„œ ํ™•์ธํ–ˆ๋˜ ์ ๋“ค์˜ ์›€์ง์ž„์œผ๋กœ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด A๋ฅผ w * Fibonacci ratio ๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค๋ฉด (A / w) * K mod 1 ์€ 0๊ณผ 1 ์‚ฌ์ด์—์„œ Randomํ•˜๊ฒŒ ๊ฒฐ์ •๋œ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ˜๋Œ€๋กœ (A / w)๋ฅผ Bad Break๊ฐ€ ํฌ๊ฒŒ ๋ฐœ์ƒํ•˜๋Š” ๊ฐ’์œผ๋กœ ์ƒ๊ฐํ•œ๋‹ค๋ฉด (A / w) * K mod 1 ์€ 0 ํ˜น์€ 1 ์ชฝ์— ํŽธํ–ฅ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ hash code๊ฐ€ ์ข์€ ๊ตฌ๊ฐ„์—์„œ ๋†’์€ ๋นˆ๋„๋กœ ๋ฐœ์ƒํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

Sequential data

์ผ๋ฐ˜์ ์œผ๋กœ Multiplicative Hashing์—์„œ A๋ฅผ Fibonacci ratio์— ๋”ฐ๋ผ ๊ฒฐ์ •ํ•˜๋ฉด ์ถฉ๋ถ„ํžˆ Randomํ•œ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋งŒ์•ฝ ์ฃผ์–ด์ง„ key๋“ค์ด ์ผ์ •ํ•œ ํŒจํ„ด์„ ๊ฐ€์ง„๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”?

์˜ˆ๋ฅผ ๋“ค์–ด key๋“ค ๊ฐ„์— ๊ฐ„๊ฒฉ์ด 1์ด ์•„๋‹ˆ๋ผ 100์ด๋ผ๋ฉด ์„ ๋ถ„์— ์ฐํžˆ๋Š” ์ ๋“ค์„

{kฮธ}, {(k + 100)ฮธ}, {(k + 200)ฮธ} ... ์ด๋ ‡๊ฒŒ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ Fibonacci ratio๋Š” 0.61803398...์ด๊ณ , ์—ฌ๊ธฐ์— 100์„ ๊ณฑํ•œ๋‹ค๋ฉด 0.803398...์ž„์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฆ‰ ์ด์ฒ˜๋Ÿผ 100๋‹จ์œ„๋กœ ๋ณ€ํ•˜๋Š” key set์€ 0.803398...์ด๋ผ๋Š” ํฐ ๊ฐ’์— ์˜ํ•ด ์ƒ์ˆ˜๊ฐ€ ๊ฒฐ์ •๋˜๊ณ , ์ด๋Š” Bad Break๊ฐ€ ์ปค์ง„ ์ƒํ™ฉ์ž…๋‹ˆ๋‹ค.

๋˜ ๋‹ค๋ฅธ ์˜ˆ๋กœ 1000000๋‹จ์œ„๋กœ ๋ณ€ํ•œ๋‹ค๋ฉด 0.9887...์ด๋ผ๋Š” ํฐ ๊ฐ’์— ์˜ํ•ด ์ƒ์ˆ˜๊ฐ€ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์œ„์™€ ๊ฐ™์€ key set์— ๋Œ€ํ•ด์„œ๋„ Randomํ•œ ๊ฒฐ๊ณผ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด Fibonacci ratio๋ฅผ ๊ทธ๋Œ€๋กœ ์“ฐ์ง€ ์•Š๊ณ 

0.6161... ๊ณผ ๊ฐ™์ด ์–ด๋–ค ํŒจํ„ด์ด ์žˆ๋”๋ผ๋„ Bad Break๊ฐ€ ์‹ฌํ•ด์ง€์ง€ ์•Š๋Š” ๊ฐ’์„ ์“ฐ๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ 0.6161... ๊ณผ ๊ฐ™์€ ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋ฉด ABCD, CDAB์™€ ๊ฐ™์ด ์ˆœ์„œ๋งŒ ๋ฐ”๋€ key๋“ค์— ๋Œ€ํ•ด์„œ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜จ๋‹ค๋Š” ํŠน์ง•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— Fibonacci ratio๋งŒํผ์€ ์•„๋‹ˆ์ง€๋งŒ ์ ์ ˆํ•˜๊ฒŒ Bad Break๋ฅผ ํ”ผํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ’๋“ค๋กœ ์ฑ…์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฐ’๋“ค์ด ์†Œ๊ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

1/4 < ฮธ < 3/10,    1/3 < ฮธ < 3/7,    4/7 < ฮธ < 2/3,    7/10 < ฮธ < 3/4

ratio์˜ ๊ฐ ์ž๋ฆฌ๋ฅผ ์œ„์˜ 4๊ฐœ์˜ ๊ตฌ์—ญ์—์„œ ๊ณจ๊ณ ๋ฃจ ๋ฝ‘์•„์„œ A๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด 0.61 25 42 33 71 .. ๊ณผ ๊ฐ™์ด ๊ฐ ๊ตฌ์—ญ์—์„œ ๊ณจ๊ณ ๋ฃจ ๊ฐ’์„ ๋ฝ‘์€ ํ›„ w * 0.6125423371... = A๋กœ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.