KMP 알고리즘은 문자열 A와 문자열 B가 있을 때, 문자열 A에서 문자열 B를 찾아주는 알고리즘 입니다.
KMP는 KMP를 만든 사람의 이름인 Knuth, Morris, Prett 세 사람의 앞 글자를 따서 KMP 알고리즘이라고 불립니다.
1) 모든 경우를 다 탐색할 경우
문자열 A의 길이가 N,문자열 B의 길이가 M이라면 O(N*M)의 시간 복잡도를 가지게 됩니다.
만약 N,M이 10만인 문제가 주어진다면 시간 초과를 보게 됩니다.
2) KMP 알고리즘을 사용할 경우
놀랍게도 O(N+M)의 시간복잡도만에 문자열 A에서 문자열 B를 검색 할 수 있습니다.
그러면 AKAKA라는 문자의 pi[4]는 1일까요?
아닙니다 절반을 넘는경우도 세줍니다.
AKA==AKA이기 때문에 pi[4]는 3이되겠군요.
failure function의 위치가 KMP 알고리즘의 핵심이라고 불 수 있습니다
참고 블로그
'알고리즘' 카테고리의 다른 글
[개념] 피보나치 수열 알고리즘 (0) | 2020.01.10 |
---|---|
Comparator<T> 인터페이스 - 정렬문제에서 자주 쓰이는 기법 (0) | 2020.01.05 |
백준 1052. 물병 (C++) (0) | 2019.12.26 |
[자료구조] 우선순위 큐 (Priority Queue) (0) | 2019.12.24 |
백준 문자열 검색 주요 문제 모음 (0) | 2019.12.21 |