Boyer-Moore Heuristic Pattern Matching
- Motivation
- Algorithm : Bad Character Heuristic
- Algorithm : Good Suffix Heuristic
- Boyer-Moore-Horspool Algorithm
(์์ง ์์ฑ ์ค์ธ ๊ธ์ ๋๋ค)
์ด ๊ธ์ KMP ์๊ณ ๋ฆฌ์ฆ๊ณผ Trie ์๋ฃ๊ตฌ์กฐ์ ๋ํ ์ดํด๋ฅผ ์ ํ์ผ๋ก ์๊ตฌํฉ๋๋ค.
Motivation
Boyer-Moore ์๊ณ ๋ฆฌ์ฆ์ด ํด๊ฒฐํ๋ ๋ฌธ์ ๋ KMP์ ๋๊ฐ์ด, ์ด๋ค $n$๊ธ์์ ๊ธด ํ ์คํธ $T$์ ๋ํด, ์งง์ $m$๊ธ์์ ํจํด $P$๋ฅผ ๋งค์นญํ๋ ๊ฒ์ ๋๋ค.
- ๊ฐ์ฅ Naiveํ๊ฒ $T$์ ๋ชจ๋ ์์น์ ๋ํด $m$๊ธ์๋ฅผ ๋งค์นญํด๋ณด๋ ์๊ณ ๋ฆฌ์ฆ์ $O(nm)$ ์ ๋๋ค.
- KMP ์๊ณ ๋ฆฌ์ฆ ์ (์ธ์ ๊ฐ ์์ฑํ ๊ณํ์ ์์ง๋ง ์ฐ์ ์์๋ ๋ฎ์ต๋๋ค) ์ด๋ฅผ $O(n + m)$ ์ผ๋ก ์ค์ธ ์์ฒญ๋ ์ฑ๊ณผ๋ฅผ ๋ณด์ ๋๋ค.
Boyer-Moore ์๊ณ ๋ฆฌ์ฆ์ worst case์์๋ $O(nm)$์ด์ง๋ง, string์ด ๋๋คํ๊ฒ ์ฃผ์ด์ง๋ค๋ฉด ํ๊ท $O(n / m)$ ๋ณต์ก๋๋ฅผ ๋ณด์ ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก, ์ด ์๊ณ ๋ฆฌ์ฆ์ ํจํด์ ์ค๋ฅธ์ชฝ๋ถํฐ ์ผ์ชฝ์ผ๋ก ๋งค์นญํ๊ณ , ๋ฌธ์์ด ์์ฒด๋ (์ฆ ๋งค์นญํ๋ ์์น ์์ฒด๋) ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ๋ด ๋๋ค. ์ด ๋ฐฉํฅ์ ์ฐจ์ด์ ์ฃผ๋ชฉํ ํ์๊ฐ ์์ต๋๋ค. KMP์ ๊ฒฝ์ฐ๋ ํจํด๊ณผ ํ ์คํธ ๋ชจ๋ ์ข -> ์ฐ ๋ก ๋งค์นญํฉ๋๋ค. ๊ฐ๋ฅํํ โ์ฒซโ, โ๋๋ฒ์งธโ ์ ๊ฐ์ ๋ง์ ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ์ผ๋ก ๋งค์นญํ๋ ์ค์ ์ธํ ์, โ1๋ฒโ, โ2๋ฒโ ๋ฑ์ ๋ง์ ์ง์ง ์ธ๋ฑ์ค๋ฅผ ์๋ฏธํ๋๋ก ์์ฑํ์ต๋๋ค.
Algorithm : Bad Character Heuristic
ํ
์คํธ abcacbcadc
์์ ํจํด acbcda
๋ฅผ ๋งค์นญํ๋ค๊ณ ์๊ฐํด ๋ด
์๋ค. ์ด๋, ๋ค์์๋ถํฐ ์์ผ๋ก ๋งค์นญ์ ์๋ํ๋ ๊ฒ์ ํ
์คํธ abcacb
์ acbcda
๋ฅผ ๋งค์นญํ๋ ๊ฒ์
๋๋ค. ์ฌ๊ธฐ์ ์ฒซ ๊ธ์ (ํจํด์ ์ค๋ฅธ์ชฝ๋ถํฐ ์ฝ์ผ๋ฏ๋ก ํ
์คํธ์ ํจํด์ ์ฒซ ๊ธ์๋ ๊ฐ๊ฐ 6๋ฒ ์์น์ธ b์ a์
๋๋ค!) ๋ฅผ ๋งค์นญํ๋ ค๊ณ ์๋ํ์ ๋, a๋ฅผ ์ฐพ์์ผ ํ๋๋ฐ b๋ฅผ ์ฐพ์์ผ๋ฏ๋ก ์คํจํ์ต๋๋ค.
Naive matching์ ์ฌ๊ธฐ์ ํฌ๊ธฐํ๊ณ ๋ค์ ์์น์ธ bcacbc
์์ ๋งค์นญ์ ์๋ํ๊ฒ ์ง๋ง, Boyer-Moore์ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ๊ธฐ์ โ๊ทธ๋ผ ๋ง์ฝ, ์ด 6๋ฒ์์น์ b๋ฅผ ๊ผญ ์จ์ผ ํ๋ค๋ฉด, ์ด๋๊น์ง ๋ด๊ฐ ํจํด์ ๋ฐ์ด์ผ b๋ฅผ ์ธ ์ ์๋๋?โ ๋ผ๋ ์ง๋ฌธ์ ๋์ง๋๋ค. ์๊ฐํด๋ณด๋ฉด ํ
์คํธ๋ฅผ ๊ธฐ์ค์ผ๋ก ํจํด์ ํ์นธ ๋ฐ์ด๋ดค์, ํจํด์ 5๋ฒ ๊ธ์์ธ d์ b๋ฅผ ๋งค์นญํ๊ฒ ๋ ๊ฒ์ด๊ณ ์ด๋ ์ด์ฐจํผ ์คํจํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์
๋๋ค. ํจํด์ ๋งจ ๋ค๋ฅผ ๊ธฐ์ค์ผ๋ก 3๊ธ์๋ฅผ ๋ฐ์ด์ผ b๋ฅผ ํ
์คํธ 6๋ฒ b์ ๋ง์ถ ์ ์์ผ๋ฏ๋ก, ์ด๋งํผ์ pushํด ๋ฒ๋ฆด ์ ์์ต๋๋ค. ์ฌ๊ธฐ์ ์ด โbโ ๋ฅผ Bad Character ๋ผ๊ณ ๋ถ๋ฅผ ๊ฒ์
๋๋ค.
์ด๋ฅผ ์ข๋ ์ ๋ฆฌํ๋ฉดโฆ
- Bad character๊ฐ ํจํด์ ์์ ๋ฑ์ฅํ์ง ์์ผ๋ฉด, ํจํด์ ํ ๋ฐ์ด์ ์์ ๋์ด๊ฐ๋ ๋ฉ๋๋ค.
- Bad character๊ฐ ํจํด์์ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ์ ๋ฑ์ฅํ๋ ์์น๊ฐ ํ์ฌ ๋ณด๊ณ ์๋ bad character์ ํจํด์์์ ์์น๋ณด๋ค ์ผ์ชฝ์ด๋ฉด, ๊ทธ๋งํผ์ ๋ฐ์ด๋ ๋ฉ๋๋ค.
- Bad character๊ฐ ํจํด์์ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ์ ๋ฑ์ฅํ๋ ์์น๊ฐ ํ์ฌ ๋ณด๊ณ ์๋ bad character์ ํจํด์์์ ์์น๋ณด๋ค ์ค๋ฅธ์ชฝ์ด๋ฉด ์ป์ ์ ์๋ ์ ๋ณด๊ฐ ์์ต๋๋ค.
Algorithm : Good Suffix Heuristic
์ด ๋ฐฉ๋ฒ์ ์์ธํ ์ค๋ช ํ์ง ์์ ๊ฒ์ ๋๋ค. (์ด์ ๋ ํ์ ํฉ๋๋ค) Good suffix๋, ์ด๋ป๊ฒ ๋ณด๋ฉด ์ Bad character์ 3๋ฒ ๊ฒฝ์ฐ์ ์ป๋ ์ ๋ณด๊ฐ ์์์ ๊ฑฐ๊พธ๋ก ์ด์ฉํ๋ ๋ฐฉ๋ฒ์ธ๋ฐ์. 3๋ฒ ๊ฒฝ์ฐ๋ ์๋ง๋ ๊ฝค ๋ง์ ๊ธ์๋ค์ด ๋ง์ ๋ค์ ์ฒ์์ผ๋ก bad character๋ฅผ ๋ง๋ ์ํฉ์ผ ๊ฒ์ ๋๋ค. ์ฆ pattern์ ๊ฝค ๊ธด suffix๊ฐ ์ด๋ฏธ ๋ง๊ณ ์๋ ์ํฉ์ด๋ผ๋ ์๋ฏธ๊ฐ ๋ฉ๋๋ค. ์ด Good suffix๋ฅผ ํจํด์์ ๋ค์ ๋ง์ถ๋ ค๋ฉด ์ผ๋งํผ ์ด๋ํด์ผ ํ๋์ง๋ฅผ ๋ฏธ๋ฆฌ ๋ชจ๋ precomputationํด ๋๋ฉด, ๊ทธ๋งํผ์ ์ ํํ ์ ์์ต๋๋ค. ๋น์ฐํ ๋ง๋ suffix๊ฐ ๊ธธ์๋ก ์ด suffix๋ฅผ ๋ค์ ๋ง์ถ๊ธฐ๊ฐ ์ด๋ ค์ธ ๊ฒ์ด๋ฏ๋ก, ๊ฝค ๋ฉ๋ฆฌ ์ ํํ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค. ์ด precomputation์ โPattern์ ๊ธธ์ด k์ธ suffix๊ฐ ๋ค์ suffix๋ก ๋ฑ์ฅํ๋ pattern์ prefix ์์นโ ๋ฅผ ๋งํนํ๋ฉด ๋๊ณ , KMP์ ์คํจํจ์์ ๋งค์ฐ ์ ์ฌํ ๋ฐฉ๋ฒ์ผ๋ก ๊ตฌํ ์ ์์ต๋๋ค.
Boyer-Moore-Horspool Algorithm
Horspool์ ์๊ณ ๋ฆฌ์ฆ์ ์ Boyer-Moore์์ Good suffix heuristic์ ์์ ํฌ๊ธฐํ๊ณ , Bad character๋ ํญ์ ํ์ฌ ๋งค์นญ ์์น์ ๋ง์ง๋ง ๊ธ์๋ง ๊ณ ๋ คํฉ๋๋ค. ์ด๋ ๊ฒ ํด๋ ํ๊ท ์๊ฐ ๋ณต์ก๋ $O(n / m)$ ๋น์ทํ ์๊ฐ์ ์ ์งํ ์ ์์์ด ์๋ ค์ ธ ์์ง๋ง, ๊ทธ ์ฆ๋ช ๊ณผ์ ์ ์์ฒญ๋ ์์๊ณผ ๊ณ ํต์ค๋ฌ์ด ์ฆ๋ช (๋ถ๋ฑ์ ์ค์ด๊ธฐ)์ ์๊ตฌํฉ๋๋ค. ๋ค๋ง, ์ถฉ๋ถํ ๋๋คํ ํ ์คํธ์ ๋ํด์๋ B-M-H๊ฐ ๊ต์ฅํ ๋น ๋ฆ์ด ์ ์๋ ค์ ธ ์์ต๋๋ค.
Horspool์ ๊ต์ฅํ ์ฝ๊ฒ ๊ตฌํํ ์ ์์ต๋๋ค. ๋จผ์ ๊ฐ character์ ๋ํด ํจํด์ ์ค๋ฅธ์ชฝ ๋์์ ๊ฐ์ฅ ๊ฐ๊น์ด (ํ์ง๋ง ์ค๋ฅธ์ชฝ ๋์ ์๋) ๋ฑ์ฅ ์์น๋ฅผ ๊ณ์ฐํด ๋๊ณ , bad character์ ๊ฑธ๋ฆฌ๋ฉด ๊ทธ๋งํผ pushํ๋ฉด ๋ฉ๋๋ค.
์ฌ๊ธฐ์๋ ์ ๋ง ๋ฌํํ ์ฆ๋ช โฆ๋ ์๋๊ณ argument๋ฅผ ํ๋ ์๊ฐํ๊ณ ๋ง์น๊ฒ ์ต๋๋ค. ์ํ๋ฒณ $q$๊ธ์ ์ค ๋๋คํ๊ฒ ์์ฑ๋ string $P, T$์์์ Horspool ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ์ ํ๊ฒ ์ต๋๋ค. ์ด์ค ํ ๊ธ์๊ฐ ํจํด์ ์ค๋ฅธ์ชฝ ๋์์ ์ผ๋ง๋ ๋ฉ๋ฆฌ ์์์ง ๊ทธ ๊ธฐ๋๊ฐ์ ์๊ฐํด ๋ด ์๋ค. ์ํ๋ฒณ $x$๋ฅผ ์ด์ฉํ์ฌ $k$๊ธธ์ด ์ด์์ jump๋ฅผ ํ์ฉํ๊ธฐ ์ํด์๋ ๋ค์์ $k-1$๊ฐ์ ๊ธ์๋ $x$๊ฐ ์๋ ๋ค๋ฅธ ๊ธ์์ฌ์ผ ํ๋ฏ๋ก, ์ ํ ๊ธธ์ด๊ฐ $k$ ์ด์์ผ ํ๋ฅ ์ $\left(1-\frac{1}{q}\right)^{k-1}$ ์ ๋๋ค. $r = \left(1-\frac{1}{q}\right)$ ๋ก ์ฐ๋ฉด ํธํ๊ฒ ์ด๋ฅผ $r^{k-1}$ ๋ก ์ธ ์ ์์ต๋๋ค.
$\expect{X} = \sum_{k = 1}^{\infty} \P(X \geq k)$ ์ ๊ณต์์ ์ด์ฉํฉ๋๋ค. $k \geq m+1$์ ํ๋ฅ ์ 0์ด๋ฏ๋ก, \(\expect{\text{jump length}} = \sum_{j = 1}^{m} r^{j-1} = \frac{r^m - 1}{r - 1}= q(1 - r^m)\)
๋ฐ๋ผ์, $m$์ด ์ถฉ๋ถํ ํฌ๋ฉด ๋์ถฉ $q$ ์ ๋์ shift๋ ๊ธฐ๋ํ ์ ์์ผ๋ฏ๋ก, $O(n / q)$ ์ ๋์ ํผํฌ๋จผ์ค๋ ๊ธฐ๋ํด ๋ณผ ์ ์์ต๋๋ค. ๋น์ฐํ ์ด๋ ๊ฐ ๊ธ์๊ฐ iid random์ด๋ผ๋ ์ด๋ฃจ์ด์ง์ง ์๋ ๊ฐ์ ์ด ๋ค์ด๊ฐ์ ๋ฟ๋ง ์๋๋ผ, ๊ฐ ์์น์์ bad character๋ฅผ ๋ง๋๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ๋งค์นญ๊ฐ์๋ ๋ฌด์ํ๊ณ ์์ง๋ง, ๊ฐ๋จํ argument๋ก๋ ๊ทธ๋ญ์ ๋ญ ๊ธฐ๋ฅํฉ๋๋ค.