- ์ด ๊ธ์ ๊ณจ๋ ๋๋น ์ฝ๋ฉ ํ ์คํธ ํฉ๊ฒฉ์ ๋๊ธฐ ํ์ด์ฌ ํธ์ 8์ฅ ์จ๋จธ๋ฆฌ์ ๋๋ค.
ํด์์ ํน์ง
- ๋จ๋ฐํฅ์ผ๋ก ๋์ - ํค -> ๊ฐ โ , ๊ฐ -> ํค โ
- ํค๋ ํด์ํจ์์์ํด ์ธ๋ฑ์ค๊ฐ ๋๋ฏ๋ก ์ฒ์๋ถํฐ ํ๋์ฉ ์ฐพ์๋ณด๋ ๊ณผ์ ์ด ํ์์๋ค.
- ํ๋์ฉ ์ฐพ์๋ณด๋ ์์ฐจํ์์ ๊ณผ์ ํ์์์ด ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ์ฐพ์ ์ ์์ผ๋ฏ๋ก ํจ์จ์ด ์ข๋ค.
ํด์๋ฅผ ํ์ฉํ๋ ๋ถ์ผ
- ๋น ๋ฅด๊ฒ ์ํ๋ ๊ฐ์ ๊ฒ์. -> ํน์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ๊ฒ์ ๋๋ ๋ณด์์ด ํ์ํ ๋ ์ฌ์ฉ
- ์ฝ๋ฉ ํ ์คํธ์์๋ ๋ฐ์ดํฐ๋ฅผ ํ์ํ๋ ํ์๊ฐ ๋ง์ ๊ฒฝ์ฐ ํด์ ๊ณ ๋ ค
๋ฆฌ์ผ์๋์์์ ํ์ฉ ๋ถ์ผ
- ๋น๋ฐ๋ฒํธ ๊ด๋ฆฌ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ๋ฑ์ฑ
- ๋ธ๋ก์ฒด์ธ
ํด์ ํจ์ ๊ตฌํ
ํ์ด์ฌ์ ๊ฒฝ์ฐ ๋์ ๋๋ฆฌ์ ์๋ฃํ์ด ํด์์ ๋์ผํ๊ฒ ๋์.
ํด์ ํจ์ ๊ตฌํ์ ๊ณ ๋ คํ ๋ด์ฉ
- ์๋ ์ด๋ฏธ์ง ์ฒ๋ผ ํค๊ฐ์ด ํ๊ธธ๋์ธ ์ ํ๋ฒํธ๋ฅผ ์ฐพ์ ๊ฒฝ์ฐ, ํด์ํจ์๋ฅผ ํตํ ์ธ๋ฑ์ค๋ ํ ์ด๋ธ์ ํฌ๊ธฐ๋ฅผ ๋์ง ์์์ผ ํ๋ค.
- ์๋ก ๋ค๋ฅธ ๋ ํค์ ๋ํ ํด์ฑ ํจ์ ๊ฒฐ๊ณผ๊ฐ ๋์ผํ ๊ฒฝ์ฐ๊ฐ ์ต๋ํ ์ ์ด์ผ ํ๋ค. -> ์ถฉ๋ ๋ฐ์์ด ์ ์ด์ผ ํ๋ค.
์์ฃผ ์ฌ์ฉํ๋ ํด์ ํจ์ ๊ทธ๋ฆฌ๊ณ ์ถฉ๋ ๋ฐฉ์ง ๋ฐฉ๋ฒ
๋๋์ ๋ฒ
- ํค๋ฅผ ์์๋ก ๋๋ ๋๋จธ์ง๋ฅผ ํ์ฉ
h(x) = x mod k
- x๋ ํค, k๋ ์์. ํค๋ฅผ ์์๋ก ๋๋ ๋๋จธ์ง (= x๋ฅผ k๋ก ๋๋ ๋๋จธ์ง๋ฅผ ์ธ๋ฑ์ค๋ก ์ฌ์ฉ)
- k ๊ฐ ์์์ฌ์ผ ํ๋ ์ด์ ? ์ถฉ๋์ด ์ ๊ธฐ ๋๋ฌด.
- ์๋ฅผ ๋ค์ด k๊ฐ 15(15๋ 3์ ๋ฐฐ์์ด์ 5์ ๋ฐฐ์->์์x) ์ผ ๊ฒฝ์ฐ ๊ทธ๋ฆฌ๊ณ x๋ 3์ ๋ฐฐ์์ผ ๊ฒฝ์ฐ
h(x) = x mod 15
์ ํด์ํจ์๋ฅผ ์ ์ฉํ์ ๋ ๋ฐํ๋๋ ์ธ๋ฑ์ค๊ฐ 3,6,9,12, 0 ,3,6,9,12,0 ... ์ผ๋ก ์ถฉ๋ ํ๋ค. - ์ด๋ x ๊ฐ k์ ์ฝ์
3*5 =15
์ด๊ธฐ ๋๋ฌธ.
๋๋์ ๋ฒ์ ๋จ์
- k์ ๋ํ ๋ชจ๋๋ฌ ์ฐ์ฐ์ด๋ฏ๋ก ์ธ๋ฑ์ค๊ฐ ์ฐจ์งํ๋ ํด์ํ ์ด๋ธ์ ํฌ๊ธฐ๋ ์ด k ์ด๋ค. ์ฆ ๋ฐ์ดํฐ๋ฅผ k ๊ฐ ๋ง ๋ด์ ์ ์์ผ๋ฏ๋ก, ๋ง์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํด์ผ ํ ๊ฒฝ์ฐ ํฐ ์์ k(=์์) ๊ฐ ํ์ํ๋ค.
๊ณฑ์ ๋ฒ
- ๊ณฑ์ ๋ฒ์ ์์ .
- ํด์ ํ ์ด๋ธ์ ํฌ๊ธฐ๊ฐ m = 10์ด๊ณ , ์์ A๊ฐ ํฉ๊ธ๋น์จ๊ณผ ๊ด๋ จ๋ ๊ฐ 0.6180339887์ด๋ผ๊ณ ๊ฐ์ ํ๋ค. ํค k = 123456์ ๋ํ ํด์ ๊ฐ์ ๊ณ์ฐ
- k ร A = 123456 ร 0.6180339887 โ 76286.0778
- ์์ ๋ถ๋ถ ์ถ์ถ: 0.0778
- ํด์ ํ ์ด๋ธ ํฌ๊ธฐ์ ๊ณฑ์ : 0.0778 ร 10 โ 0.778
- ๋ด๋ฆผ ์ฐ์ฐ: 0.778 = 0
- ๋ฐ๋ผ์ ํค 123456์ ํด์ ๊ฐ์ 0์ด ๋๋ค.
- ๊ณฑ์ ๋ฒ์ ์์ ๊ฐ์ด ์์๋ฅผ ํ์ฉํ์ง ์๋๋ค.
๋ฌธ์์ด ํด์ฑ
- ๋๋์ ๋ฒ๊ณผ ๊ณฑ์ ๋ฒ์ ํค์ ์๋ฃํ์ด ์ซ์์ธ๋ฐ ๋ฐํด, ๋ฌธ์์ด ํด์ฑ์ ํค์ ์๋ฃํ์ผ๋ก ๋ฌธ์์ด์ ๊ฐ๋๋ค.
polynomial rolling hash method
- ์ด ํจ์๋ ๋ฌธ์์ด ํด์ฑ์ ๊ธฐ๋ฒ ์ค ํ๋์ด๋ค.
- ์๋ฅผ ๋ค์ด 'abc'๋ผ๋ ๋จ์ด๋ฅผ ํด์ฑ์ ๊ฒฝ์ฐ ์ฌ๊ธฐ์ 'p'๋ฅผ 31๋ก ์ ํ๊ณ , ๊ฐ ๊ธ์๋ฅผ ์ซ์๋ก ๋ฐ๊พผ๋ค.
'a' = 1
'b' = 2
'c' = 3
- ๊ทธ๋ฐ ๋ค์ ๊ฐ ์ซ์์ 'p'์ ๊ฑฐ๋ญ์ ๊ณฑ์ ๊ณฑํ๊ณ ๋ชจ๋ ๋ํ๋ค.
'a'์ ํด์: 1 * 31^0 = 1
'b'์ ํด์: 2 * 31^1 = 62
'c'์ ํด์: 3 * 31^2 = 2883
- ๋ง์ ์ฐ์ฐ์ ๊ฒฝ์ฐ ์ซ์๊ฐ ๋๋ฌด ํฌ๋ฉด ์ค๋ฒํ๋ก๊ฐ ์ผ์ด๋ ์ ์๋ค. ์ด๋ฅผ ๋ฐฉ์ง ํ๊ธฐ ์ํด ๋ชจ๋๋ฌ ์ฐ์ฐ์ ์ฌ์ฉํด ์ค๋ค.
- ๋ชจ๋ ๋ํ๋ฉด: 1 + 62 + 2883 = 2946
- ๋ชจ๋๋ฌ ์ฐ์ฐ: 2946 % 100 = 46
- 'abc'์ ํด์๊ฐ์ 46๊ฐ ๋๋ค.
- ๋ชจ๋๋ฌ ์ฐ์ฐ์ด ์๋ ๋ฌธ์ ์ค ํฐ ์๋ฅผ ๋ค๋ฃจ๋ ๋ฌธ์ ๋ ์ด๋ฐ ์ค๋ฒํ๋ก ํจ์ ์ ์ ์!
์ถฉ๋ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ
- ์๋ก ๋ค๋ฅธ ํค์ ๋ํด ํจ์์ ๊ฒฐ๊ณผ๊ฐ(=ํด์ํ ์ด๋ธ์ ํค๊ฐ)๊ณผ ๊ฐ์ผ๋ฉด ์ถฉ๋์ด๋ผ๊ณ ํ๋ค.
1. ์ฒด์ด๋์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ
- ๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ๋ฒ
- ํด๋น ๋ฒํท์ ๋งํฌ๋ ๋ฆฌ์คํธ๋ฅผ ํ์ฉํ์ฌ ๊ฐ์ ํด์๊ฐ์ ๊ฐ์ง๋ ๋ฐ์ดํฐ ์ฐ๊ฒฐ.
2. ๊ฐ๋ฐฉ ์ฃผ์๋ฒ์ผ๋ก ์ฒ๋ฆฌ
- ๋ฒํท์ ์ฐพ์ ์ถฉ๋๊ฐ์ ์ฝ์ ํ๋ ๋ฐฉ์.
- ํด์ํ ์ด๋ธ๋ด์์ ๋ฒํท์ ์ฐพ์ผ๋ ๋น์ฐํ ํด์ํ ์ด๋ธ์ ์ต๋ํ ํ์ฉํ๋ฏ๋ก, ์ฒด์ด๋ ์ฒ๋ฆฌ ๊ธฐ๋ฒ ๋ณด๋ค ํจ์จ์ ์ด๋ค. (์ฒด์ด๋์ ๋งํฌ๋ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ ๋ค )
2.1. ๋น ๋ฒํท์ ์ฐพ๋ ๋ฐฉ์ ์ ํ ํ์ฌ ๋ฐฉ์ (Linear Probing)
- ์ถฉ๋์ด ๋ฐ์ํ๋ฉด ์ผ์ ํ ๊ฐ๊ฒฉ์ ์ ์งํ๋ฉฐ ์ด๋ํ๋ฉด์ ๋น๊ณต๊ฐ์ ์ฐพ๋๋ค.
- ์ฌ๊ธฐ์์ ์ผ์ ํ ๊ฐ๊ฒฉ์ 1์ด ์ผ๋ฐ์ ์ด๋ค.
์์
h(k,i)=(h(k)+i) % m
ํด์ ํจ์ h(k)
๋ ์ฃผ์ด์ง ํค k
์ ๋ํ ํด์ ํ
์ด๋ธ ๋ด์ ์ด๊ธฐ ์์น(์ธ๋ฑ์ค)๋ฅผ ๊ณ์ฐํ๋ค.๋ง์ฝ ํด๋น ์์น์ ์ด๋ฏธ ๋ค๋ฅธ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋์ด ์์ด ์ถฉ๋์ด ๋ฐ์ํ๋ค๋ฉด, i
(= ์ผ์ ํ ๊ฐ๊ฒฉ, 1)์ ๊ฐ์ ์ฆ๊ฐ์์ผ ์๋ก์ด ์์น๋ฅผ ์ฐพ๋๋ค. ์ ์์น๋ ์ด๊ธฐ ํด์ ๊ฐ h(k)
์ i
๋ฅผ ๋ํ ๊ฐ์ mod m ์ฐ์ฐ์ ์ ์ฉํ์ฌ ๊ณ์ฐ ํ๋ค.(mod ์ฐ์ฐ์ ์ ์์น๊ฐ ํ
์ด๋ธ์ ํฌ๊ธฐ๋ฅผ ๋์ด ๊ฐ์ง ์๋๋ก ๋ณด์ฅํจ). ์ด ๊ณผ์ ์ ๋ฐ๋ณตํ์ฌ ๋น ์์น๋ฅผ ์ฐพ์ ๋๊น์ง ๊ณ์ ๋ฐ๋ณตํ๋ค.
์์
- ํด์ ํ ์ด๋ธ์ ํฌ๊ธฐ๊ฐ 10์ด๊ณ , ๋ฐ์ดํฐ๊ฐ ํด์ ํจ์์ ์ํด 7๋ฒ ์์น์ ์ ์ฅ๋์ด์ผ ํ๋ค๊ณ ๊ฐ์
- ์ฒซ ๋ฒ์งธ ์๋ (i=0): ์์น = (7 + 0) mod 10 = 7
- ๋ ๋ฒ์งธ ์๋ (i=1): ์์น = (7 + 1) mod 10 = 8
- ์ธ ๋ฒ์งธ ์๋ (i=2): ์์น = (7 + 2) mod 10 = 9 ๊ทธ๋ฆฌ๊ณ ์ด๋ฐ ์์ผ๋ก ๊ณ์ ํ์ฌ๋ฅผ ์งํํ๋ค.
์ด์ค ํด์ฑ ๋ฐฉ์
- ํด์ํจ์๋ฅผ 2๊ฐ ์ฌ์ฉ
- ์ฒซ ๋ฒ์งธ ํจ์๊ฐ ๋งํด์ฃผ๋ ์๋ฆฌ๊ฐ ์ฐจ ์์ผ๋ฉด, ๋ ๋ฒ์งธ ํจ์๋ฅผ ์ด์ฉํด ์๋ก์ด ์๋ฆฌ๋ฅผ ์ฐพ๋๋ค. ์ด ๊ณผ์ ์ ๋ฐ๋ณตํด์ ๋น์ด ์๋ ์๋ฆฌ๋ฅผ ์ฐพ์ ๋๊น์ง ๋ฐ๋ณตํ๋ค.
- ์๋ฅผ ๋ค์ด h1(k), h2(k) ํด์ ํจ์๊ฐ ์๊ณ ์ถฉ๋์ด ๋ฌ์ ๊ฒฝ์ฐ, h1(k)๊ฐ 7๋ฒ์๋ฆฌ์ ๋๋ผ๊ณ ํ๋ค. 7๋ฒ ์๋ฆฌ๋ฅผ ํ์ธ ํ๋๋ฐ ์ด๋ฏธ ๋ค๋ฅธ ๋ฐ์ดํฐ๊ฐ ์๋ค๋ฉด, h2(k) ํจ์๊ฐ 3์นธ ๋ค์ ๋๋ผ๊ณ ์ง์ํ๋ฉด 7๋ฒ+3์นธ=10๋ฒ์งธ ์๋ฆฌ๋ฅผ ํ์ธํ๋ค. 10๋ฒ์งธ ์๋ฆฌ์๋ ์๋ค๋ฉด ๋ค์ h2(k)ํจ์์ ๊ฒฐ๊ณผ ๊ฐ์ ๋ฐ๋ผ ์ด๋ํ๋ ๊ฒ์ ๋ฐ๋ณตํ๋ค.
์์
h(k,i) = (h1(k)+i * h2(k))% m
- ์์ ์์์ ์ค์ ๊ณ์ฐํ ๋ ์ด๋ ๊ฒ ์ฐ์ธ๋ค.
(h1(k)mod % m) + (i*h2(k) % m )
๋ง๋ฌด๋ฆฌ
- ์์ ์ค๋ช ํ ํด์ฑ์ ํต์ฌ์ ํค์ ๊ฐ์ ๋งคํํ๋ ๊ณผ์ ์ด๋ค.
- ํฐ ์๋ฅผ ๋ค๋ฃจ๋ ๊ฒฝ์ฐ ์ค๋ฒํ๋ก๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํ ๋ชจ๋๋ฌ๋ ์ ์ํด์ผ ํ๋ค.
- ํน์ ์ ๋ณด์ ๋งคํํ๋ ๊ฐ์ ๊ด๊ณ๋ฅผ ํ์ธํด์ผ ํ๋ค๋ ์ปจ์ ์ด ์๋ค๋ฉด ํด์๋ฅผ ๊ณ ๋ คํด์ผ ํ๋ค.