์์ฑ์ : ์๊ทธ๋ฆผ
Table of Contents
๋ฌธ์์ด T ์์ ๋ฌธ์์ด ํจํด P๊ฐ ์กด์ฌํ๋์ง ์ฐพ์๋ณด์.
๋ฌธ์์ด ํจํด ๋งค์นญ์ ์์ ํ์ ์๊ณ ๋ฆฌ์ฆ์ ์ ์ฉํ๋ฉด ๋ฌธ์์ด T๋ฅผ ์ฐจ๋ก๋ก ์ํํ๋ฉด์ ํจํด P ๋ด์ ๋ฌธ์๋ค์ ์ผ์ผ์ด ๋น๊ตํ๊ฒ ๋๋ค. ์ด ๋ ์ต์ ์ ๊ฒฝ์ฐ ์๊ฐ๋ณต์ก๋๋ O(TP)๋ฅผ ๊ฐ์ง๋ฏ๋ก, ๋งค์ฐ ๋นํจ์จ์ ์ด๋ค.
์์ ํ์ ์๊ณ ๋ฆฌ์ฆ์์ 'ํ์ฉํ์ง ๋ชปํ๋ ์ ๋ณด'๋ ํจํด์ด ์ ๋ง๋ค๊ณ ๊ฒฐ๋ก ๋ด๊ธฐ ์ '์ด๋๊น์ง์ ๋ฌธ์์ด์ด ์ผ์นํ๋์ง'์ ๋ํ ์ ๋ณด์ด๋ค. KMP ์๊ณ ๋ฆฌ์ฆ์ ์ด ์ ๋ณด๋ฅผ ํ์ฉํ๋ค. ๋ฐ๋ผ์ ๋ถ์ผ์น๊ฐ ๋ฐ์ํ๊ธฐ ์ ์ ๋ฌธ์์ด์ ๋ํ์ฌ ๋ค์ ๋น๊ตํ์ง ์๊ณ ๋งค์นญ์ ์ํํ๋ค. O(T+P) ์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ ํจ์จ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
- ํจํด P์ ๋ํ์ฌ
fail[k]
๋ฅผ ๊ตฌํ๋ค. (fail[k]
: k ์ธ๋ฑ์ค์์ ์ ๋์ฌ์ ์ ๋ฏธ์ฌ๊ฐ ์ผ์นํ๋ ์ต๋ ๊ธธ์ด) - ๋ฌธ์์ด T๋ ์ธ๋ฑ์ค i๋ก, ํจํด P๋ ์ธ๋ฑ์ค j๋ก ์ฐจ๋ก๋ก ์ํํ๋ฉฐ ๊ฐ ๋ฌธ์๋ค์ ๋น๊ตํ๋ค.
- j ์ธ๋ฑ์ค์์ ๋ฌธ์์ด ๋ถ์ผ์น๊ฐ ๋ฐ์ํ๋ฉด j ๊ฐ์
fail[j-1]
๊ฐ์ผ๋ก ์ค์ ํ๊ณ ๋ค์ ๋น๊ต๋ฅผ ์ํํด๋๊ฐ๋ค. (j๊ฐ 0์ด ๋๋ฉด ๋ฉ์ถค)
fail ํจ์๋ ํจํด ๋งค์นญ์ด ์คํจํ์ ๋ ํจํด ํฌ์ธํฐ๊ฐ ๋์๊ฐ ๊ณณ์ ๋ํ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ๋ค. (์ ์ฒ๋ฆฌ)
- 0 ์ธ๋ฑ์ค๋ ๋์๊ฐ ๊ณณ์ด ์์ผ๋ฏ๋ก
fail[0] = 0;
- ํจํด P์ ๋ํ์ฌ ์ ๋ฏธ์ฌ๋ ์ธ๋ฑ์ค i๋ก, ์ ๋์ฌ๋ ์ธ๋ฑ์ค j๋ก ์ฐจ๋ก๋ก ์ํํ๋ฉฐ ๊ฐ ๋ฌธ์๋ค์ ๋น๊ตํ๋ค.
3-1. i ์ธ๋ฑ์ค์ j ์ธ๋ฑ์ค์ ๋ฌธ์์ด์ด ์ผ์นํ๋ฉด
fail[i] = ++j;
3-2. j ์ธ๋ฑ์ค์์ ๋ฌธ์์ด ๋ถ์ผ์น๊ฐ ๋ฐ์ํ๋ฉด j ๊ฐ์fail[j-1]
๊ฐ์ผ๋ก ์ค์ ํ๊ณ ๋ค์ ๋น๊ต๋ฅผ ์ํํด๋๊ฐ๋ค. (j๊ฐ 0์ด ๋๋ฉด ๋ฉ์ถค)
KMP ์๊ณ ๋ฆฌ์ฆ ๊ตฌํ