-
๋ฌธ์์ด ๊ฒ์ ์๊ณ ๋ฆฌ์ฆ ๊ฐ๋ (๋ธ๋ฃจํธํฌ์ค, KMP, Boyer-Moore)๐ป IT Study/Algorithm 2020. 5. 8. 02:37
๋ฌธ์์ด ๊ฒ์(String Search)์ ๋ณธ๋ฌธ(T)์์ ํจํด(P)์ ์ฐพ๋ ๊ฒ์ด๋ค.
๋ธ๋ฃจํธํฌ์ค, KMP, Boyer-Moore 3๊ฐ์ง ์๊ณ ๋ฆฌ์ฆ์ ๋ํ์ฌ ๊ฐ๋ ์์ฃผ๋ก ์์๋ณด๊ณ , ๋น๊ตํด๋ณด๋ ค๊ณ ํ๋ค.
01 ๋ธ๋ฃจํธ ํฌ์ค๋ฒ(Brute Force)
02 KMP๋ฒ
03 Boyer-Moore
04 ์๊ณ ๋ฆฌ์ฆ ๊ฐ๋จ ์์ฝ & ๋น๊ต
01 ๋ธ๋ฃจํธ ํฌ์ค๋ฒ(Brute Force)
brute a.๋ฌด์ํ force n.ํ
์ด๋ฅผ ํด์ํ๋ฉด ๋ฌด์ํ ํ์ผ๋ก ํด๊ฒฐํ๋ค๋ ๋ป์ผ๋ก ํ๋ง๋๋ก ๋จ์ ๋ฌด์ํ ๋ฐฉ๋ฒ์ด๋ค.
์์ ํ์ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๋ฌธ์ ์ ๋์์๋ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์ํํด๋ณด๋ ๋ฐฉ๋ฒ์ด๋ค.
๋ฌธ์์ด ๊ฒ์ ์์๋ ํจํด์ ๋ฌธ์๋ฅผ ํ๋์ฉ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋ํด๊ฐ๋ฉด์
๋ณธ๋ฌธ์ ํ ์คํธ ๋ฌธ์์ ํ๋์ฉ ๋น๊ตํด๊ฐ๋ค.
1. ๋ค๋ฅธ ๋ฌธ์๋ฅผ ๋ง๋๋ฉด ํจํด์์ ๋ฌธ์๋ฅผ ๊ฒ์ฌํ๋ ์์น ๊ฒฐ๊ณผ๋ฅผ ๋ฒ๋ฆฌ๊ณ
2. ๋ค์ ํ ์คํธ์ ์์น๋ก 1์นธ ์ด๋ํ ๋ค์
3. ๋ค์ ํจํด์ ์ฒซ ๋ฒ์งธ ๋ฌธ์๋ถํฐ ๊ฒ์ฌํ๋ค.
๋ธ๋ฃจํธ ํฌ์ค๋ฒ์ ์ดํดํ๊ธฐ๋ ๊ฐ์ฅ ์ฝ์ง๋ง ๋ฌธ์์ด ๊ฒ์์์๋ ๊ฐ์ฅ ๋นํจ์จ์ ์ด๋ค.
02 KMP๋ฒ
D.E. Knuth, J.H. Morris, V.R.Pratt๊ฐ ๊ฑฐ์ ๊ฐ์ ์๊ธฐ์ ๊ณ ์ํ๊ธฐ ๋๋ฌธ์ ์ด๋ค ์ด๋ฆ์ ๊ฐ ์๊ธ์๋ฅผ ๋ฐ์ KMP ์๊ณ ๋ฆฌ์ฆ์ด๋ผ ๋ถ๋ฅธ๋ค.
๋ธ๋ฃจํธ ํฌ์ค๋ฒ๊ณผ๋ ๋ฌ๋ฆฌ ๊ฒ์ฌํ๋ ์์น ๊ฒฐ๊ณผ๋ฅผ ๋ฒ๋ฆฌ์ง ์๊ณ ์ด๋ฅผ ํจ์จ์ ์ผ๋ก ํ์ฉํ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
ํ ๋ง๋๋ก ๋น๊ตํ ํ์๊ฐ ์์ผ๋ฉด ํจ์คํ๊ณ , ๋น๊ตํ ํ์๊ฐ ์์ผ๋ฉด ๋น๊ต๋ฅผ ์ํํ๋ค๋ ๊ฒ์ด๋ค.
์ด ๋ ๋น๊ตํ ํ์๊ฐ ์๋ค๋ ๊ฒ์ ํ๋จํ๊ธฐ ์ํด์ ๊ฒ์ฌํ๋ ์์น ๊ฒฐ๊ณผ๊ฐ ์ฌ์ฉ๋๋ค.
How?
์ด๋ํ๋ ๋ฐ ์์ด ๊ฒฝ๊ณ๋ฅผ ์ฐพ๊ณ ์ ๋๋ถ์์ ์ ๋ฏธ๋ถ๋ก ๋งํผ ์ด๋์ ํด์ค๋ค.
๊ฒฝ๊ณ๊ฐ ์์ ๊ฒฝ์ฐ, ๋ฌธ์์ด ํจํด์ ๊ธธ์ด๋งํผ ์ด๋์ ํด์ค๋ค.
์ด๋ ๊ฒ๋ง ๋ณด๋ฉด ๋ฌด์จ๋ง์ธ์ง ์ดํด๊ฐ ๋์ง ์์ ๊ฒ์ด๋ค.
์ฌ๊ธฐ์ ๋จผ์ ์์์ผํ ๊ฐ๋ ์ด ๋ฌธ์์ด์์ ์ ๋๋ถ(Prefix)์ ์ ๋ฏธ๋ถ(Suffix)์ด๋ค.
์ ๋๋ถ(Prefix) : ๋ฌธ์์ด์ ๋จธ๋ฆฌ๋ถ๋ถ
์ ๋ฏธ๋ถ(Suffix) : ๋ฌธ์์ด์ ๊ผฌ๋ฆฌ๋ถ๋ถ[๊ทธ๋ฆผ 3]์ ์ ๋๋ถ ์ ๋ฏธ๋ถ, ๊ฒฝ๊ณ๋ฅผ BAABABAA๋ผ๋ ๋ฌธ์๋ฅผ ํตํด ์ค๋ช ํ๋ค.
[๊ทธ๋ฆผ 3]์ ์๋ ํ๋ ์ ๋๋ถ(Prefix)์ ์ ๋ฏธ๋ถ(Suffix)๋ฅผ ๋ํ๋ด๋ ํ๋ค.
๊ฒฝ๊ณ๊ฐ ๋๊ธฐ ์ํด์๋ ์ ๋๋ถ์ ์ ๋ฏธ๋ถ๊ฐ ๊ฐ์์ผ ํ๋ค.
์ด๋ ํ์์ 3๋ฒ์งธ๋ฅผ ํตํด ํ์ธํ ์ ์๋ค.
๊ฒฐ๊ตญ ์ฌ๊ธฐ์ ์ ๋๋ถ์ ์ ๋ฏธ๋ถ๊ฐ ๊ฐ์ 'BAA'์์ ์ด ์ฌ์ด์ ๊ฐ์ธ 'BA'๋ฅผ ๊ฒฝ๊ณ๋ผ๊ณ ํ๋ค.
๋ณธ๋ฌธ(T)๊ณผ ํจํด(P)์ ๋น๊ตํ๋ฉด์ ๋ถ์ผ์น ์ง์ ์ด ๋ฐ์ํ์ ๋ ์ผ์นํ๋ ๊ฐ ์ฌ์ด์์ ๊ฒฝ๊ณ๋ฅผ ์ฐพ๊ณ ์ด๋์์ผ์ฃผ๋ฉด๋๋ค.
์กฐ๊ธ ๋ ์์ธํ ์ค๋ช ํ์๋ฉด, ํจํด(P)์์ ๋ถ์ผ์น ์ง์ ์ ์ผ์ชฝ ๋ถ๋ถ์ด ๋ณธ๋ฌธ(T)๊ณผ ์ผ์นํ๋ ๊ฐ๋ค์ด ๋๋ค.
๊ฒฝ๊ณ๊ฐ 2๊ฐ ์ด์์ผ ๊ฒฝ์ฐ ์ ๋๋ถ์ ์ ๋ฏธ๋ถ๊ฐ ์ผ์นํ๋ ๋ฌธ์์ด์ ๊ฐ์๊ฐ ์ต๋๊ฐ ๋์์ ๋๋ก ์ค์ ํ๋ค.
๊ฒฝ๊ณ ์๋ ๊ฒฝ์ฐ, ๋ฐ๋ผ์ ์ ๋๋ถ์ ์ ๋ฏธ๋ถ๊ฐ ์ผ์นํ๋ ๊ฐ์ด ์์ ๋๋ ๋ฌธ์์ด ํจํด์ ๊ธธ์ด๋งํผ ์ด๋ํ๋ค.
์ด๋์์ผ ์ค ๋๋ ์ ๋๋ถ ์์์์น์์ ์ ๋ฏธ๋ถ ์์น๋ก ์ด๋์์ผ์ฃผ๊ณ ๋ค์ ๋ณธ๋ฌธ(T)๊ณผ ํจํด(P)์ ๋น๊ตํ๋ค.
๋ ์์ธํ ๊ณผ์ ์ [๊ทธ๋ฆผ 5]์์ ํ์ธํ ์ ์๋ค.
์คํจํจ์ (Failure Function)
์ ๋๋ถ์ ์ ๋ฏธ๋ถ๊ฐ ์ผ์นํ๋ ๋ฌธ์์ด์ ๊ฐ์๋ฅผ ๊ตฌํ ๋ ์คํจํจ์๋ฅผ ์ฌ์ฉํ๋ค. KMP์์ ์คํจํจ์๋ ๋งค์ฐ ์ค์ํ ๊ฐ๋ ์ด๋ค.
๋ถ์ผ์น๊ฐ ๋ฐ์(์คํจ)ํ์ ๋ ์ด๋ป๊ฒ ํด์ผํ๋์ง ์๋ ค์ค๋ค๋ ์ ์์ ์คํจํจ์๋ผ ๋ถ๋ฆฐ๋ค.
์๋ ์ฒซ ๋ฒ์งธ ๊ทธ๋ฆผ์ ๋ณด๊ณ ์คํจํจ์๊ฐ ์ด๋ป๊ฒ ๋ง๋ค์ด์ง๋ ์ง ํ์ธํ ์ ์๋ค.
์คํจํจ์๋ฅผ F(k)๋ผ๊ณ ํ ๋, F(k)์ ์๋ฏธ๋ k๋ฒ์งธ ์ธ๋ฑ์ค์์ ์ ๋์ฌ์ ์ ๋ฏธ์ฌ๊ฐ ์ผ์นํ๋ ์ต๋๊ธธ์ด๋ฅผ ๋งํ๋ค.
์คํจํจ์๋ฅผ ์ด์ฉํ๋ฉด ๊ฒฝ๊ณ๋ฅผ ์ฐพ๋๋ฐ ์์๋๋ ๋น์ฉ์ ์ค์ผ ์ ์๋ค.
์คํจํจ์๋ฅผ ๋จผ์ ๊ตฌํด๋์ผ๋ฉด ์๊ณ ๋ฆฌ์ฆ์ ๋์ํ ๋ ์ด๋๊ฒฝ๋ก๋ง ๋ณด๊ณ ์งํํ๊ธฐ ๋๋ฌธ์ ๋งค๋ฒ ๊ฒฝ๊ณ๋ฅผ ์ฐพ๋ ์ผ์ ์ ๊ฑฐํ ์ ์๋ค.
m = F(m-1)์ผ๋ก ์ด๊ธฐํ๋ฅผ ์ ์์ผ์ค๊น?
๋ณธ๋ฌธ(T)๊ณผ ํจํด(P)์ ๋น๊ตํ ๋๋ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ๋น๊ต๋ฅผ ํ๋ค.
m์ 2(F(5-1)=F(4))๋ก ์ด๊ธฐํ ์์ผ๋๊ธฐ ๋๋ฌธ์ ๋น๊ต ์์ ์ง์ ์ ์ค์ ํ์ฌ ๋ถํ์ํ ๋น๊ต ํ์๋ฅผ ์ค์ผ ์ ์๋ค.
๋ฐ๋ผ์ ํจํด(P) BAABAB๊ฐ ์์ ๋ K=3์ธ B๋ถํฐ๊ฐ ํ๋ ๊ฒ ์๋ K=5์ธ A ๋ถํฐ ๋ณธ๋ฌธ(T)์ 5์ ์ธ๋ฑ์ค ๊ฐ๊ณผ ๋น๊ต๋ฅผ ํ๋ค.
์ ๋ฆฌํ์๋ฉด ๋ณธ๋ฌธ(T)๊ณผ ๋น๊ตํ๊ธฐ ์ํด์
ํจํด(P)์ ์๋ฆฌ๋ฅผ ์ด๋ํ ๋๋ begin ๊ฐ์ ๊ฐ์ง๊ณ ์ด๋์์ผ์ค๋ค.
์ด๋ํ๊ณ ๋์ ๋น๊ตํ ๋์ ์์์ง์ ์ begin๊ณผ m์ ํตํด ์ ํด์ฃผ๋ ๊ฒ์ด๋ค.
์คํจํจ์๋ฅผ ์ด์ฉํด์ begin๊ณผ m์ ๋น ๋ฅด๊ฒ ๊ตฌํ ์ ์๋ค.
KMP๋ฒ์ด ํ ์นธ์ฉ ์ด๋ํด์ ๋น๊ตํ๋ ๋ธ๋ฃจํธํฌ์ค๋ฒ๋ณด๋ค ํจ์ฌ ๋น ๋ฅธ ์๊ณ ๋ฆฌ์ฆ์ด๋ผ๋ ๊ฒ์ ์ ์ ์๋ค.
03 Boyer-Moore๋ฒ
Robert S. Boyer์ J Stother Moore์ ์ํด ๊ฐ๋ฐ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
๊ธฐ์กด ๊ฒ์ ๋ฐฉ๋ฒ๋ค์ด ๋ฌธ์์ด ๋น๊ต๋ฅผ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ํ๋ค๋ฉด, ๋ณด์ด์ด-๋ฌด์ด ์๊ณ ๋ฆฌ์ฆ์ ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ์ผ๋ก ๋ฌธ์์ด์ ๋น๊ตํ๋ค.
๊ทธ๋ฌ๋ ์ด๋(skip)์ ํ ๋๋ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ํ๋ ์ผ๋ฐ์ ๋ฐฉ์์ด๋ค. ์ด ๋ ์ต๋ํ ๋ง์ด ๊ฑด๋๋ฐ๋ฉด์ ๋น๊ตํ๋ค.
ํฌ๊ฒ ๋ ๊ฐ์ง ๋ฐฉ์์ ํ์ง ๋ฐฉ์์ ์ฌ์ฉํ๋ค. ๋ ๊ฐ์ง ๋ฐฉ์ ์ค ๋ ํฐ ๊ฐ๋งํผ ์ด๋ํ๋ ๋ฐฉ์์ ์ ํํ์ฌ ํจํด ๋งค์นญ์ ์๋ํ๊ฒ ๋๋ค.
์ฌ๊ธฐ์๋ ๋ ๊ฐ์ง ๋ฐฉ์์ธ Bad Character Rule๊ณผ Good Suffix Rule์ ๋จผ์ ์ดํด๋ณด๊ณ , ์ค์ Boyer-Moore๋ฒ์์๋ ์ด๋ป๊ฒ ํผํฉํ์ฌ ๋น๊ตํ๋ ์ง์ ๋ํ์ฌ ๋ค๋ค๋ณผ ๊ฒ์ด๋ค.
- Bad Character Rule - ๋ฌธ์๊ฐ ์ด์ฉ
- Good Suffix Rule - ๋ฌธ์์ด ์ด์ฉ
- BC(Bad Character) & GS(Good Suffix) ํผํฉ ์ฌ์ฉ
-
Bad Character Rule
Bad Character๋ ํ์ฌ ๋น๊ตํ๋ ค๋ ๋ฌธ์์ ์ผ์นํ์ง ์์ ์ ์ฒด ๋ฌธ์์ด์ ๋ฌธ์๋ฅผ ๋งํ๋ค.
์๋ ๊ทธ๋ฆผ์์ b๊ฐ Bad Character๋ฅผ ์๋ฏธํ๋ค.
์ฆ, Bad Character Rule์ ๋ณธ๋ฌธ(T)์์ ๋น๊ตํ์ง ์์๋ ๋๋ ๋ฌธ์๋ค์ ๊ฑด๋ ๋ฐ๊ณ
๋น๊ต๋ฅผ ์์ํด์ผํ ์ง์ ์ ์ ํํ์ฌ ๋ฌธ์ ๋น๊ต๋ฅผ ํ ์ ์๋๋ก ํจํด(P)์ ์์น๋ฅผ ์ด๋์์ผ์ฃผ๋ ๊ฒ์ด๋ค.
์ฌ๊ธฐ์ ๋ณธ๋ฌธ์ ๋ถ์ผ์น ์ง์ ๋ฌธ์์ธ Bad Charater์ ๊ฐ๊ณผ ์ผ์นํ๋ ํจํด์ ๊ฐ์ด ๋น๊ต๋ฅผ ์์ํ๋ ์ง์ ์ด ๋๋ค.
์ด์ ๋ํ ๊ตฌ์ฒด์ ์ธ ๊ณผ์ ์ [๊ทธ๋ฆผ 6]์ ํตํด ํ์ธํ๊ธธ ๋ฐ๋๋ค.
[๊ทธ๋ฆผ 6]์์ 'โก ๋ณธ๋ฌธ์ ๋ถ์ผ์น ์ง์ ๋ฌธ์์ ์ผ์นํ๋ ํจํด์ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ์ง์ ๋งํผ ์ด๋์ํจ๋ค'
์ด ๋ง์ด ์ถฉ๋ถํ ํผ๋์ ์ค ์ ์๋ค๊ณ ์๊ฐ๋๋ค. ๋๋ ํ์ฐธ์ ๋ค์ฌ๋ค ๋ดค๋ค :)
ํ์ดํ์๋ฉด ์ ๊ทธ๋ฆผ์ Step 1์ ๋ณด๋ฉด '๋ณธ๋ฌธ์ ๋ถ์ผ์น ์ง์ ๋ฌธ์'๋ b(Bad Character)๊ฐ ์๋ฏธํ๋ C์์ ์ ์ ์๋ค.
ํจํด(P) CCTTTTGC์์ ๋ถ์ผ์น ์ง์ ์ T์ด๋ค. T๋ฅผ ๊ธฐ์ค์ผ๋ก ์ผ์ชฝ ๊ธ์๋ฅผ ์ดํด๋ณด๋ฉด CCTT์ด๋ค.
์ฌ๊ธฐ์ '์ผ์นํ๋ ํจํด'์ด ์๋ฏธํ๋ ๊ฒ์ด ๋ณธ๋ฌธ์ ๋ถ์ผ์น ์ง์ ๋ฌธ์์ธ C์ ์ผ์นํ๋ ํจํด ๊ฐ C๋ฅผ ๋งํ๋ค.
๊ทธ๋ ๋ค๋ฉด '์ผ์นํ๋ ํจํด์ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ'์ ๋ฌด์จ ๋ง ์ผ๊น?
์ผ์ชฝ๊ธ์์ธ CCTT์์ ์ผ์นํ๋ ํจํด๊ฐ์ธ C ์ค ๊ฐ์ฅ ์ค๋ฅธ์ชฝ์ ์๋ ๊ฐ์ ๋งํ๋ค.
๋ฐ๋ผ์ CCTT์์๋ ๋ ๊ฐ์ C๋ฅผ ๊ฐ์ง๋ ๋ฐ ๋ ์ค๋ฅธ์ชฝ์ ์๋ C๋ฅผ ์ ํํ์ฌ ๊ทธ ์ง์ ๋งํผ ์ด๋ํ๋ผ๋ ๊ฒ์ด๋ค.
KMP ์๊ณ ๋ฆฌ์ฆ์ ์คํจํจ์์ ๋์ผํ๊ฒ ํจํด์์ ์ผ๋งํผ ์ด๋ํ ์ง๋ฅผ ๋ณด๊ดํ๊ณ ์์ด์ผ ํ๋ค.
-
Good Suffix Rule
Good Suffix Rule์ ๋ถ์ผ์น ์ง์ ์ด ๋ฐ์ํ์ ๋,
ํจํด(P)์์ ๋ณธ๋ฌธ(T)๊ณผ ์ผ์นํ ์ง์ ์ ์ ๋ฏธ๋ถ(suffix)์ ๋์๋๋ ์ ๋๋ถ(prefix)๋ฅผ ์ฐพ์์ ํจํด์ ์์น๋ฅผ ์ด๋์ํจ๋ค.
๋์๋๋ ์ ๋๋ถ๋ฅผ ์ผ์นํ ์ง์ ์ ์ ๋ฏธ๋ถ ์๋ฆฌ์ ์ด๋์์ผ ๋ค์ ๋น๊ต๋ฅผ ์ํํ๊ฒ ๋๋ค.
๋์๋๋ ์ ๋๋ถ๊ฐ ์์ ๊ฒฝ์ฐ์๋ ํจํด์ ๊ธธ์ด๋งํผ ์ด๋ํ๋ค.
์ฌ๊ธฐ์ ํจํด์์ ์ผ์นํ ์ง์ ์ ์ ๋ฏธ๋ถ๋ฅผ Good Suffix๋ผ๊ณ ๋ณธ๋ค.
์ด๋ KMP๋ฒ๊ณผ ๊ต์ฅํ ์ ์ฌํ๋ค.
๋ณธ๋ฌธ(T)๊ณผ ํจํด(P)์ ๋น๊ตํ ๋ KMP๋ ์ผ์นํ ์ง์ ์ ์ ๋๋ถ๋ฅผ ์ฐพ๋๋ค.
๊ทธ๋ฌ๋ Boyer-Moore์ Good Suffix๋ ๋ค์์ ๋ถํฐ ๋น๊ตํ๊ธฐ์ ์ผ์นํ ์ง์ ์ ์ ๋ฏธ๋ถ๋ฅผ ์ฐพ๋ ๊ฒ์ด๋ค.
Good Suffix Rule์ ๋ํ ๊ตฌ์ฒด์ ๊ณผ์ ์ [๊ทธ๋ฆผ 7]์ ํตํด ํ์ธํ ์ ์๋ค.
[๊ทธ๋ฆผ 7] Step1์์ ํจํด CTTACTTAC์์ TAC๊น์ง ์ผ์นํ๊ณ ์ ๋ฏธ๋ถ TAC์ ์ผ์นํ ์ ๋๋ถ TAC๊ฐ ์๋ค.
์ด๋ฅผ ๊ทธ๋งํผ ์ด๋์ํค๊ณ ๋ค์ ํจํด์ ์ค๋ฅธ์ชฝ๋ถํฐ ๋น๊ตํ๋ค.
[๊ทธ๋ฆผ 7] Step2์์ ํจํด CTTACTTAC๋ฅผ ์ดํด๋ณด๋ฉด, ๋ณธ๋ฌธ๊ณผ ์ผ์นํ ๋ถ๋ถ TACTTAC์ด ์ ๋๋ถ์์ CTTAC์ ์ผ์นํ๋ค.
์ด ๋ถ๋ถ์ ๋ง์ถฐ ์ด๋์ํค๊ณ ๋ค์ ํจํด์ ์ค๋ฅธ์ชฝ๋ถํฐ ๊ฒ์ฌํ๋ค.
-
BC(Bad Character) & GS(Good Suffix) ํผํฉ ์ฌ์ฉ
๋ณธ๋ฌธ๊ณผ ํจํด์ ๋น๊ตํ๋๋ฐ ๋ถ์ผ์น ์ง์ ์ด ๋ฐ์ํ์ ๋
Bad Character๋ ๋ฌธ์๊ฐ์ ์ด์ฉํด์ ์ด๋ํ๋ค๋ฉด Good Suffix ๋ ๋ฌธ์์ด์ ์ด์ฉํด์ ์ด๋ํ๋ค.
๊ทธ๋ ๊ธฐ์ ์ฃผ๋ก ๋ฌธ์์ด์ด ๋งค์นญ๋ ๊ฒฝ์ฐ์๋ Good Suddix๋ฅผ , ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ์๋ Bad Character๋ฅผ ์ฌ์ฉํ์ ๋ skip ๊ฐ์ด ๋ ํฌ๋ค.
BC (Bad Character)์ GS (Good Suffix) ์ค์์ ํ๋๋ง์ผ๋ก๋ ์ข์ ์ฑ๋ฅ์ ๋ด๋ ๊ฒ์ ์ด๋ ต๋ค.
[๊ทธ๋ฆผ 8] Step1, Step2์ฒ๋ผ ํ์ชฝ๋ง ์ฌ์ฉํ์ ๋๋ skipํ ์ ์์ง๋ง, 1byte์ฉ ๊ฒ์ฌํด์ผํ๋ ์ํฉ๋ค์ด ๋์จ๋ค.
Step 1์์์ gs:0, Step 2์์์ bs:0์ด 1byte์ฉ ๊ฒ์ฌํด์ผํ๋ ์ํฉ์ด๋ค.
๋๋ Step3์์๋ GS๋ฅผ ์ฌ์ฉํ์ ๋ ๋ ๋ง์ skip์ ํ ์ ์์ง๋ง, BC๋ง์ ์ฌ์ฉํ๋ค๋ฉด 2byte๋ง skipํ์ง ๋ชปํ๋ค.
์ด์ฒ๋ผ BC, GS๊ฐ์ ์ต์ข ์ ์ผ๋ก ๋น๊ตํด์ ๋ ํฐ๋ฐฉํฅ์ผ๋ก skipํ ์ ์๋ ๋ก์ง์ด ๋์ด์ผํ๋ค.
04 ์๊ณ ๋ฆฌ์ฆ ๊ฐ๋จ ์์ฝ & ๋น๊ต
๋ธ๋ฃจํธ ํฌ์ค
ํจํด์ ๋ฌธ์๋ฅผ ํ๋์ฉ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋ํด๊ฐ๋ฉด์ ๋ณธ๋ฌธ์ ํ ์คํธ ๋ฌธ์์ ํ๋์ฉ ๋น๊ต
KMP
์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋ํด๊ฐ๋ฉด์ ๋ถ์ผ์น ์ง์ ์ด ๋ฐ์ํ์ ๋
ํจํด๊ณผ ๋ณธ๋ฌธ์ด ์ผ์นํ๋ ๊ฐ ์ฌ์ด์์ ํจํด์ ์ ๋๋ถ์ ์ ๋ฏธ๋ถ๋ฅผ ํตํด ๊ฒฝ๊ณ๋ฅผ ์ฐพ๊ณ ์ด๋์์ผ์ฃผ๋ฉด์ ๋น๊ต
Boyer-Moore
์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ์ผ๋ก ๋น๊ตํด๊ฐ๋ฉด์ (์ด๋๋ฐฉํฅ์ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ )
๋ถ์ผ์น ์ง์ ๋ฐ์ ์ ๋ ๊ฐ์ง ๋ฐฉ์ ์ค ๋ ํฐ ๊ฐ๋งํผ ์ด๋ํ๋ ๋ฐฉ์์ ์ ํํ์ฌ ํจํด ๋งค์นญ์ ์๋
(๋ ๊ฐ์ง ๋ฐฉ์ : Bad Character ๋ฌธ์๊ฐ ์ด์ฉํด์ ์ด๋ / Good Suffix ๋ฌธ์์ด ์ด์ฉํด์ ์ด๋)
๋ธ๋ฃจํธ ํฌ์ค KMP Boyer-Moore ๋น๊ต๊ธฐ์ค ๋ฌธ์๊ฐ ๋ฌธ์์ด ๋ฌธ์๊ฐ & ๋ฌธ์์ด
ํผํฉ ์ฌ์ฉ๋น๊ต๊ฒ์ฌ
๋ฐฉํฅ→
(์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ)→
(์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ)←
(์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ)์ด๋๊ฐ๊ฒฉ ํ ์นธ ํจํด(P) ๊ธ์์ ์ด๋ด ํจํด(P) ๊ธ์์ ์ด๋ด ์ด๋๊ฒฝ๋ก
์ ์ฅ์ฌ๋ถx O(์คํจํจ์) O(์ด๋๊ฒฝ๋ก ํ ์ด๋ธ) ์๊ฐ๋ณต์ก๋ O(NM) O(N+M) Best : O(N+M/M)
Worst : O(NM)๋ณธ๋ฌธ(T)์ ๋ฌธ์์ด ๊ธธ์ด : N / ํจํด(P)์ ๋ฌธ์์ด ๊ธธ์ด : M
โป ์ถ์
- ๋ธ๋ฃจํธํฌ์ค ์๊ณ ๋ฆฌ์ฆ : https://hcr3066.tistory.com/26
- KMP ์๊ณ ๋ฆฌ์ฆ 1 : https://carstart.tistory.com/143
- KMP ์๊ณ ๋ฆฌ์ฆ 2 : https://baeharam.github.io/posts/algorithm/kmp/
- Boyer-Moore : https://m.blog.naver.com/PostView.nhn?blogId=cestlavie_01&logNo=221055516242&proxyReferer=https:%2F%2Fwww.google.com%2F