[Algorithm] Perfect Hash Function

Perfect Hash Function์€ ๋น ๋ฅธ ํ•ด์‹œํ…Œ์ด๋ธ” ์ ‘๊ทผ์„ ์œ„ํ•œ ํ•ด์‹œ์˜ ํ•œ ๊ธฐ๋ฒ•์ด๋‹ค.
์•„์ฃผ ์ œํ•œ์ ์ธ ์ƒํ™ฉ์—์„œ๋งŒ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์ด ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด input์œผ๋กœ ๋“ค์–ด์˜ฌ ์ˆ˜ ์žˆ๋Š” hash key๋ฅผ ์ „๋ถ€ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค.




์ผ๋ฐ˜์ ์ธ ํ•ด์‹œํ…Œ์ด๋ธ” ๊ตฌ์กฐ

์ผ๋ฐ˜์ ์œผ๋กœ ํ•ด์‹œํ…Œ์ด๋ธ” ๊ตฌํ˜„์ฒด๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌํ˜„๋˜์–ด์žˆ๋‹ค.

ํ‚ค๊ฐ’์„ ํ•ด์‹œํ•˜๋ฉด ๋ฌด์ž‘์œ„์˜ ํ•ด์‹œ๊ฐ’์ด ์ƒ์„ฑ๋œ๋‹ค. ํ•˜์ง€๋งŒ ๋Œ€๋‹ค์ˆ˜ ๊ตฌํ˜„์ฒด์—์„œ ํ•ด์‹œ๋Š” ๋ฐ˜๋“œ์‹œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
foo์™€ bar๋ผ๋Š” ๋‹ค๋ฅธ ํ‚ค๊ฐ’์ด ๋™์ผํ•œ ํ•ด์‹œ๊ฐ’์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๊ทธ๋ž˜์„œ ๋ณดํ†ต ๋‚ด๋ถ€์ ์œผ๋กœ ๋ฐฐ์—ด์ด๋‚˜ linked list๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ•ด์‹œ ํ‚ค๋งˆ๋‹ค "bucket"์ด๋ž€๊ฑธ ๋‘”๋‹ค. ํ•ด์‹œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋ฉด ๋ฒ„ํ‚ท์— ์Œ“์•„๋†“๋Š” ๊ฒƒ์ด๋‹ค.

์ด๋Ÿฐ ๊ตฌ์กฐ๋Š” ์ผ๋ฐ˜์ ์ธ ์›น์„œ๋น„์Šค ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ˆ˜์ค€์—์„œ๋Š” ์ถฉ๋ถ„ํ•œ ์„ฑ๋Šฅ์„ ๋ณด์ธ๋‹ค.
ํ•˜์ง€๋งŒ ๊ทนํ•œ์˜ ์ตœ์ ํ™”๊ฐ€ ํ•„์š”ํ•œ ์ƒํ™ฉ์—์„œ๋Š” ์„ฑ๋Šฅ์— ๋ถˆ๋ฆฌํ•œ ์ ์ด ๋งŽ์€ ๊ฒƒ๋„ ์‚ฌ์‹ค์ด๋‹ค. ๋‹จ์ผ ๋ฐฐ์—ด์ด ์•„๋‹ˆ๋‹ค๋ณด๋‹ˆ ์บ์‹œ๋ผ์ธ ์ตœ์ ํ™”๋„ ์ž˜ ์•ˆ๋˜๊ณ , ํ•ด์‹œ ํ•จ์ˆ˜ ์ž์ฒด์˜ ๋ถ€ํ•˜๋„ ์ ์ง€๋Š” ์•Š๋‹ค.




Perfect Hash Function - Minimal Perfect Hash Function

Perject Hash Function์—๋Š” ๊ฝค ๋‹ค์–‘ํ•œ ๋ณ€ํ˜• ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์žˆ๋‹ค. ๊ฐœ์ค‘์—์„œ๋„ Minimal Perfect Hash Function๋Š” ๋งค์šฐ ๊ฐ„๋‹จํ•œ ์›๋ฆฌ๋กœ ๊ตฌ์กฐ๋ฅผ ๋‹จ์ˆœํ™”ํ•œ๋‹ค.
๊ทธ๋ƒฅ ํ‚ค๋ฅผ 1:1๋กœ ์ธ๋ฑ์Šค ๊ฐ’์œผ๋กœ ๋งคํ•‘ํ•ด๋†“์€ ๋‹ค์Œ์—, ๋ฐฐ์—ด์„ ๊ณ ์ •์œผ๋กœ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์›๋ฆฌ ์ž์ฒด๋Š” ๊ทธ๋ ‡๊ฒŒ ์–ด๋ ค์šธ ๊ฒƒ์ด ์—†๋‹ค.


์ด๋ ‡๊ฒŒ ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ๋จผ์ € ๋งŒ๋“ ๋‹ค.
ํ•ด์‹œํ•จ์ˆ˜๋Š” ๋ฏธ๋ฆฌ ํ‚ค ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•ด๋†“๊ณ , ๊ทธ๊ฒƒ๊ณผ ์ผ์น˜ํ•˜๋Š” ๊ฐ’์ด ๋“ค์–ด์˜ค๋ฉด ํ•ด์‹œ๊ฐ’. ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ์—ฌ๊ธฐ์„œ๋Š” ๋ฐฐ์—ด ์ธ๋ฑ์Šค ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.


์ดํ›„์—๋Š” ํ‚ค ๊ธธ์ด๋งŒํผ์˜ ๋ฐฐ์—ด์„ ๋งŒ๋“ค๊ณ  ํ•ด์‹œ๊ฐ’์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐ’์„ ํ• ๋‹นํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.




Minimal Perfect Hash Function - ์ •๋ ฌ ๊ธฐ๋ฐ˜ ์ตœ์ ํ™” (MOS)

์—ฌ๊ธฐ์„œ ์กฐ๊ธˆ ๊ณ ๋ฏผํ•ด์•ผํ•  ๋ถ€๋ถ„์€ perpect_hash ์ž์ฒด์˜ ์„ฑ๋Šฅ์ด๋‹ค. ์ € ํ‚ค๊ฐ€ ๋งŽ๋‹ค๋ฉด ๋งŽ์„ ์ˆ˜๋ก ์ธ๋ฑ์Šค๋ฅผ ๊ตฌํ•˜๋Š”๋ฐ ์‹œ๊ฐ„์ด ์ข€ ๊ฑธ๋ฆด ๊ฒƒ์ด๋‹ค. ํ•ด์‹ฑ์„ ํ• ๋•Œ๋งˆ๋‹ค O(N)์˜ ๋ถ€ํ•˜๊ฐ€ ๊ฑธ๋ฆฐ๋‹ค๋ฉด, ํ•ด์‹œํ…Œ์ด๋ธ”์ด๋ผ๋Š” ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์˜๋ฏธ๊ฐ€ ์ „ํ˜€ ์—†๋‹ค.

์—ฌ๊ธฐ์„œ ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์€ key ๋ชฉ๋ก์„ ์ •๋ ฌํ•ด๋†“๊ณ  binary search๋ฅผ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
์ตœ์†Œ setup์—๋งŒ O(N log N) ์—ฐ์‚ฐ์ด ๋ฐœ์ƒํ•˜๊ณ , ์ดํ›„์—๋Š” ํ•ด์‹œ ํ•จ์ˆ˜์˜ ์„ฑ๋Šฅ์ด O(log N) ์ •๋„๊ฐ€ ๋‚˜์˜ฌ ๊ฒƒ์ด๋‹ค.

์ด๋Ÿฐ ๋ฐฉ๋ฒ•๋ก ์„ MOS(Mapping, Ordering, Searching) ๋ฐฉ๋ฒ•๋ก ์ด๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ๊ฒƒ ๊ฐ™๋‹ค.




Minimal Perfect Hash Function - ๋‹ค๋ฅธ ํ•ด์‹œ ์ƒ์„ฑ๋ฒ•

๋ณดํ†ต์€ 1:1๋กœ ๋งค์นญ์„ ์‹œ์ผœ์„œ ์ธ๋ฑ์Šค๋ฅผ ๋ฐ”๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์ด์ง€๋งŒ, ๋ณต์žกํ•œ ํ•ด์‹œ ์ƒ์„ฑ๋ฒ•๋“ค๋„ ์žˆ๋‹ค.

  1. Cichelli์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜
    ๋ฌธ์ž์—ด์˜ ๊ธธ์ด, ์ฒซ ๋ฌธ์ž์™€ ๋ ๋ฌธ์ž๋ฅผ ์กฐํ•ฉํ•ด์„œ ํ•ด์‹œ๊ฐ’์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

์™„์ „ํžˆ ์—„๊ฒฉํ•œ ๋ฐฉ๋ฒ•์€ ์•„๋‹ˆ๋ผ์„œ, ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ์—๋Š” ์žฌ๊ท€์ ์œผ๋กœ ๊ทน๋ณตํ•˜๋Š” ๊ฒƒ์„ ์ง€ํ–ฅํ•œ ๊ฒƒ ๊ฐ™๋‹ค. ๊ทผ๋ฐ ์ด๊ฑธ ์™„์ „ํ•˜๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‚˜? ๋ถˆ์™„์ „ํ•œ ๊ฒƒ ๊ฐ™๋‹ค.



์ฐธ์กฐ
https://en.wikipedia.org/wiki/Perfect_hash_function
https://searchall.tistory.com/74
https://github.com/rust-phf/rust-phf
https://scholarsmine.mst.edu/cgi/viewcontent.cgi?article=1000&context=comsci_techreports
https://stackoverflow.com/questions/8233965/perfect-hash-functions