여름의 서재
[알고리즘 종류] KMP 알고리즘 본문
728x90
- KMP 알고리즘
- 불일치가 발생한 텍스트 스트링의 앞 부분에 어떤 문자가 있는지를 미리 알고 있으므로, 불이리가 발생한 앞 부분에 대하여 다시 비교하지 않고 매칭을 수행
- 패턴을 전처리하여 배열 next[M]을 구해서 잘못된 시작을 최소화함
- * next[M] : 불일치가 발생했을 경우 이동할 다음 위치
- 시간 복잡도 : O(M +N)
def getPI(pattern):
pi = [0 for x in range(len(pattern))]
j = 0
for i in range(1, len(pattern)):
while j > 0 and pattern[i] != pattern[j]:
j = pi[j - 1]
if pattern[i] == pattern[j]:
j += 1
pi[i] = j
return pi
def KMP_search(text, pattern):
pi = getPI(pattern)
j = 0
for i in range(len(text)):
while j > 0 and text[i] != pattern[j]:
j = pi[j - 1]
if text[i] == pattern[j]:
if j == len(pattern) - 1:
return True
else:
j += 1
return False
: 아직 이건 이해가 잘 가지 않는다...
'알고리즘 > 알고리즘 종류' 카테고리의 다른 글
[알고리즘 종류] DFS(깊이우선탐색) & BFS(너비우선탐색) (0) | 2021.08.13 |
---|---|
[알고리즘 종류] 보이어-무어 알고리즘 (0) | 2021.08.13 |
[알고리즘 종류] 브루트 포스 (Brute Force) (0) | 2021.08.13 |
[알고리즘 종류] 이진 탐색 (Binary Search) (0) | 2021.08.13 |
[알고리즘 종류] 탐욕(Greedy) 알고리즘 (0) | 2021.08.13 |
Comments