Presentation is loading. Please wait.

Presentation is loading. Please wait.

KMP ALPS 알고리즘 세미나 2017. 10. 27. 김태리.

Similar presentations


Presentation on theme: "KMP ALPS 알고리즘 세미나 2017. 10. 27. 김태리."— Presentation transcript:

1 KMP ALPS 알고리즘 세미나 김태리

2 Pattern Matching Problem
Given strings text T and patten P, find a position of a substring of T equal to P. text T a b c d pattern P a b c **string : a sequence of characters JTKIM

3 Brute-Force Pattern Matching
left-to-right T의 제일 앞에서 시작, 각 shift에 대하여 모두 비교 시행 i=0 a b c d i+j j : 0 to m-1 a b c JTKIM

4 Brute-Force Pattern Matching
left-to-right T의 제일 앞에서 시작, 각 shift에 대하여 모두 비교 시행 i=1 a b c d i+j j : 0 to m-1 a b c JTKIM

5 Brute-Force Pattern Matching
left-to-right T의 제일 앞에서 시작, 각 shift에 대하여 모두 비교 시행 i=2 a b c d i+j j : 0 to m-1 a b c JTKIM

6 Brute-Force Pattern Matching
left-to-right T의 제일 앞에서 시작, 각 shift에 대하여 모두 비교 시행 i=n-m a b c d i+j j : 0 to m-1 a b c JTKIM

7 Brute-Force Pattern Matching
left-to-right T의 제일 앞에서 시작, 각 shift에 대하여 모두 비교 시행 1 2 3 4 5 6 7 8 9 10 11 12 n <- size of text T m <- size of pattern P for i <- 0 to n-m     j <- 0     while j < m and T[i+j] = P[j]         j <- j+1     if j = m         return i    // match at i     else          break while loop    // mismatch return -1    // no match anywhere O(nm) n: size of T, m: size of P worst case? T = aaa…ah P = aaah JTKIM

8 KMP (Knuth-Morris-Pratt) 앞과 같이 left-to-right
보완: shift를 더 intelligently! DP mismatch 발생 시- 이동가능한 최대로 이동하여 불필요한 comparison을 줄인다 largest prefix of P[0,j] that is a suffix of P[1,j] 찾는 것: 실패함수 Failure Function String Matching a b c a b j a b F(j-1) JTKIM

9 Failure Function String Matching
KMP (Knuth-Morris-Pratt) Failure Function String Matching JTKIM

10 1. Failure Function 실패함수 pattern P에 대해 전처리를 실시 j=0 은 0, j=1부터 진행
F(j) :the size of the largest prefix of P[0,j] that is also a suffix of P[1,j] j 1 2 3 4 5 P[j] a b c F(j) JTKIM

11 1. Failure Function 실패함수 j 1 2 3 4 5 P[j] a b c F(j) 1 1 2
6 7 8 9 10 11 12 13 14 15 16 17 /*FailureFunction(P)*/ m <- size of pattern P F[0] <- 0 i <- 1 j <- 0 while i < m     if P[i] = P[j]   //matched j+1 characters         F[i] <- j+1         i <- i+1         j <- j+1     else if j>0 then  //use failureFunction to shift P         j <- F[j-1]     else             //no match         F[i] <- 0         i <- i+1      j 1 2 3 4 5 P[j] a b c F(j) 1 1 2 Time Complexity: O(m) 각 while loop i 는 1씩 증가 또는 shift amount i-j 최소 1씩 증가(F(j-1)<j) JTKIM

12 mismatch (P[j] != T[i]) 발생 시
2. String Matching a b c a b 1 a 2 c 3 a 4 b a b c mismatch (P[j] != T[i]) 발생 시 j  F(j-1) j 1 2 3 4 5 P[j] a b c F(j) JTKIM

13 mismatch (P[j] != T[i]) 발생 시
2. String Matching a b c 1 2 3 4 b a b c a b c mismatch (P[j] != T[i]) 발생 시 j  F(j-1) j 1 2 3 4 5 P[j] a b c F(j) JTKIM

14 mismatch (P[j] != T[i]) 발생 시
2. String Matching a b c 1 2 3 4 a b 1 a 2 c 3 a a b c a b c a b c mismatch (P[j] != T[i]) 발생 시 j  F(j-1) j 1 2 3 4 5 P[j] a b c F(j) JTKIM

15 mismatch (P[j] != T[i]) 발생 시
2. String Matching a b c 1 2 3 4 a a b c a b c a b c a b c mismatch (P[j] != T[i]) 발생 시 j  F(j-1) j 1 2 3 4 5 P[j] a b c F(j) JTKIM

16 2. String Matching a b c 1 2 3 4 a b 1 a 2 c 3 a 4 b 5 a b c a b c a b
1 2 3 4 a b 1 a 2 c 3 a 4 b 5 a b c a b c a b c a b c a b c j 1 2 3 4 5 P[j] a b c F(j) JTKIM

17 2. String Matching a b c 1 2 3 4 a 4 b 5 a 2 c a b c a b c j 1 2 3 4 5
1 2 3 4 a 4 b 5 a 2 c a b c a b c j 1 2 3 4 5 P[j] a b c F(j) JTKIM

18 2. String Matching failure func과 유사 각 while loop i 는 1씩 증가
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 /*KMP(T,P)*/ F<-failureFunction(P) i<-0 j<-0 while i<n     if T[i] = P[j]         if j=m-1             return i-j //match pos         else              i<-i+1             j<-j+1     else         if j>0             j<-F[j-1]         else return -1    //no match failure func과 유사 각 while loop i 는 1씩 증가 또는, i-j (shift amount) 최소 1씩 증가  O(n) 따라서, O(n+m) JTKIM

19 BOJ 1786 ‘찾기’ https://www.acmicpc.net/problem/1786 BOJ 5525 ‘IOIOI’
KMP 문제모음 JTKIM

20 JTKIM


Download ppt "KMP ALPS 알고리즘 세미나 2017. 10. 27. 김태리."

Similar presentations


Ads by Google