[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๋ก ๋งค์นญ์ ์์ผ์ ์ธ๋ฑ์ค๋ฅผ ๋ฐ๋ก ๋ง๋๋ ๊ฒ์ด ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ด์ง๋ง, ๋ณต์กํ ํด์ ์์ฑ๋ฒ๋ค๋ ์๋ค.
- 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