
์ ์ฐ๋ฆฌ๋ String Matching Algorithm์ ๋ํด ๊ณ ๋ฏผํ ๊น?
- String Matching์ ์ฐ๋ฆฌ๊ฐ ํ์์ ์์ฃผ ์ฌ์ฉํ๋ ๊ธฐ๋ฅ์
๋๋ค.
- ๋งค์ฐ ๊ฐ๋จํ๊ฒ ๊ตฌํํ ์ ์์ต๋๋ค.
- ํ์ง๋ง Text์ Pattern์ด ๋ฐฑ๊ณผ์ฌ์ ์ฒ๋ผ ๋ง์ ์์ ๊ฐ์ง๊ณ ์๋ค๋ฉด?
- Algorithm์ด ๋งค์ฐ ๋๋ ค์ง๋๊ฒ ๋๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ฒ ๋ฉ๋๋ค.
- ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๊ฐ์ ๋ String Matching Algorithm์ด ๋ฑ์ฅํ๊ฒ ๋์์ต๋๋ค.
- DNA Pattern์ ์ฐพ๋ ๊ณผ์ ์ด ๋ํ์ ์ธ ์์
๋๋ค.
Naive String Matching Algorithm
- ๋จ์ํ ๋ฌธ์ ํ๋ํ๋ ๋น๊ตํ๋ ์๊ณ ๋ฆฌ์ฆ
๋ฌธ์ ์ ์ ์์๊น์?
- ๊ฐ๊ฐ์ Pattern๊ณผ Text์ ๊ธธ์ด์ ๋ฐ๋ผ ์๊ฐ๋ณต์ก๋๊ฐ ์ ํ์ ์ผ๋ก ๋์ด๋๋ ๋ฌธ์
- Time Complexity : O(pattern_size * text_size)
Rabin-Karp Algorithm
- 2์ฐจ์ ํจํด ๋งค์นญ๊ณผ ๊ด๋ จ๋ ๋ฌธ์ ์ ์๊ณ ๋ฆฌ์ฆ์ ์ผ๋ฐํํ ์ ์๋ ์คํธ๋ง ๋งค์นญ ์๊ณ ๋ฆฌ์ฆ
- ๋จ์ํ ๋ฌธ์ ํ๋ํ๋ ๋น๊ตํ๊ธฐ ์ ์?
- ๋จผ์ ๋ฌธ์์ด์ Hash๊ฐ ๋ณํํฉ๋๋ค.
- ํจํด Hash๊ฐ๊ณผ ๋น๊ตํ์ฌ ์๊ฐ ๋ณต์ก๋๋ฅผ ๋ฎ์ถ๋ ์๊ณ ๋ฆฌ์ฆ.
- ํน์ํ Case๋ฅผ ์ ์ธํ๋ฉด ํ๊ท ์ํ์๊ฐ์ด ์ข์์ง๋๋ค.

๋งค๋ฒ ๋ฌธ์์ด ์ ์ฒด๋ฅผ ๊ฐ์ ธ์์ Hash๊ฐ์ ๊ณ์ฐํด์ผ ํ๋๊ฐ?

๋ฌธ์ ์ ์ ์์๊น์?
- Hash๊ฐ์ด ์ผ์นํ๋ ๊ฒฝ์ฐ ํญ์ ํจํด์ด ์ผ์นํ์ง ์๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค.
- Time Complexity
- ์ ์ฒ๋ฆฌ ์๊ฐ : O(m)
- ์ต์
์ ๊ฒฝ์ฐ : O((n-m+1)m)
KMP(Knuth-Morris-Pratt) Algorithm
- ํจํด์ ๋ฏธ๋ฆฌ ๊ณ์ฐํ๊ณ ๊ฒฐ๊ณผ๊ฐ์ ๋ฐฐ์ด์ ์ ์ฅ ๋ฐ ๋ณด์กฐ ํจ์๋ก ํ์ฉํ์ฌ ๋น ๋ฅด๊ฒ ์ ์ดํ๋ Algorithm

๋ฌธ์ ์ ์ ์์๊น์?
- Pattern์์ prefix์ suffix๊ฐ Matching์ด ๋๋ ๋ถ๋ถ์ด ๋ง์ง ์๋ค๋ฉด ํจ์จ์ ์ด์ง ์์ต๋๋ค.
- Time Complexity
- ์ ์ฒ๋ฆฌ ์๊ฐ : O(m)
- ์ต์
์ ๊ฒฝ์ฐ : O((n-m+1)m)
Source Code
Reference