[Algorithm] KMP ์๊ณ ๋ฆฌ์ฆ KMP ์๊ณ ๋ฆฌ์ฆ ? ์ ์ฒด ๋ฌธ์์ด : ๋ฌธ์์ด ์ ์ฒด ํจํด ๋ฌธ์์ด : ์ฐพ๊ณ ์ถ์ ๋ฌธ์์ด ์ ์ฒด ๋ฌธ์์ด์์ ์ผ์นํ๋ ํจํด ๋ฌธ์์ด์ ์ฐพ์์ผ ํ ๋ ์ฌ์ฉ ํจํด ๋ฌธ์์ด์ด ์ฌ๋ฌ ๋ฒ ์กด์ฌํ ์ ์๊ณ ๊ฐ๊ฐ ์ด๋ ์์น์ธ์ง ์ฐพ์์ผ ํ ๋ ์ ๋์ฌ, ์ ๋ฏธ์ฌ์ ๊ฐ๋ ์ ํ์ฉํ์ฌ ๋ฐ๋ณต๋๋ ์ฐ์ฐ์ ์ค์ด๊ณ ๋งค์นญ ํ ๋ฌธ์์ด์ ์์น๋ก ๋น ๋ฅด๊ฒ ์ ํ ์ ์ฒด ์๊ฐ๋ณต์ก๋ O(n+m) : n = ์ ์ฒด ๋ฌธ์์ด์ ๊ธธ์ด, m = ํจํด ๋ฌธ์์ด์ ๊ธธ์ด O(n^2)์ ๋ฌธ์์ด ํ์ ๋ฐฉ์์ ์ฌ์ฉํ ๊ฒฝ์ฐ๋ผ๋ฉด for ( int i =0; i < ์ ์ฒด ๋ฌธ์์ด์ ๊ธธ์ด; i++) { // text[i] : ์ ์ฒด ๋ฌธ์์ด ์ค i ๋ฒ์งธ ๋ฌธ์ bool flag = true for ( int j =0; j < ํจํด ๋ฌธ์์ด์ ๊ธธ์ด; j++ ) { // pattern[j] : ํจํด ๋ฌธ์์ด.. [์๋ฃ๊ตฌ์กฐ] Trie ํธ๋ผ์ด Trie๋ ? ์ ์ฅ๋ ๋ฌธ์์ด์ ํจ๊ณผ์ ์ผ๋ก ํ์ํ ์ ์๋ ์๋ฃ๊ตฌ์กฐ ํธ๋ฆฌ ๊ตฌ์กฐ ์๊ฐ ๋ณต์ก๋ O(N) : N์ ๋ฌธ์์ด์ ๊ธธ์ด prefix tree, radix tree, retrieval tree ๋ฑ์ผ๋ก ๋ถ๋ฆ ๋จ์ : ๊ฑฐ๋ํ ๊ณต๊ฐ ๋ณต์ก๋ trie๋ ๋ฌธ์์ด ํ์์ ๊ต์ฅํ ์ ์ฉํ ์๋ฃ๊ตฌ์กฐ์ด๋ค ๋ฌธ์์ด์ด ์ฃผ์ด์ง๊ฒ๋๋ฉด ๋ฌธ์๋ฅผ ์ ์ฅํ๋ ๋ ธ๋๋ฅผ ํ๋์ฉ ์์ฑํด๊ฐ๋ฉด์ ํธ๋ฆฌ๊ตฌ์กฐ๋ฅผ ๋ง๋ ๋ค ์๋์ผ๋ก ์ ๋ ฌ๋ ํจ๊ณผ๋ฅผ ๋ณผ์ ์๋ค๋ ์ฅ์ ๋ ์๋ค ์์ root ๋ ธ๋๋ ๊ฐ์ฅ ์์ ๋ ธ๋๋ฅผ ์๋ฏธํ๋ค "ALCUK" "EZ" "EZYUN" "EZYOON" 4๊ธ์๋ฅผ ๋ฃ์ Trie ํธ๋ฆฌ ๋ชจ์ ๊ตฌํ - ๊ฐ๋จํ ๊ธฐ๋ณธ ์ฝ๋ #include #include #include using namespace std; const int ptr_num = 10; st.. 2021๋ ์ํด ๊ธฐ๋ ๋ณดํธ๋์ด ์๋ ๊ธ์ ๋๋ค. ์ด์ 1 ยทยทยท 8 9 10 11 ๋ค์