Presentation is loading. Please wait.

Presentation is loading. Please wait.

Knuth-Morris-Pratt Pattern Matching Algorithm Instructor : Prof. Jyh-Shing Roger Jang Designer : Shao-Huan Wang The ideas are reference to the textbook.

Similar presentations


Presentation on theme: "Knuth-Morris-Pratt Pattern Matching Algorithm Instructor : Prof. Jyh-Shing Roger Jang Designer : Shao-Huan Wang The ideas are reference to the textbook."— Presentation transcript:

1 Knuth-Morris-Pratt Pattern Matching Algorithm Instructor : Prof. Jyh-Shing Roger Jang Designer : Shao-Huan Wang The ideas are reference to the textbook “Fundamentals of Data Structures in C “ and “ 名題精選百則 - 使用 C 語言 ( 技巧篇 )”.

2 Knuth-Morris-Pratt Pattern Matching Algorithm Use failure function j012345678910 p[]ababbababaa f(j)

3 Knuth-Morris-Pratt Pattern Matching Algorithm Use failure function j012345678910 p[]ababbababaa f(j) First, initial f(0) = -1

4 Knuth-Morris-Pratt Pattern Matching Algorithm Use failure function j012345678910 p[]ababbababaa f(j) First, initial f(0) = -1 j++, i = f(j-1), then compare p[i+1] and p[j] If p[i+1] != p[j] and f(i-1) == -1, put -1

5 Knuth-Morris-Pratt Pattern Matching Algorithm Use failure function j012345678910 p[]ababbababaa f(j) First, initial f(0) = -1 j++, i = f(j-1), then compare p[i+1] and p[j] If p[i+1] != p[j] and f(i-1) == -1, put -1 Else if p[i+1] == p[j], put i+1 01 Else if p[i+1] != p[j] and i != -1, let i = f(i), until p[i+1] == p[j] or i == -1

6 Knuth-Morris-Pratt Pattern Matching Algorithm Use failure function j012345678910 p[]ababbababaa f(j) 01 Not equal! First, initial f(0) = -1 j++, i = f(j-1), then compare p[i+1] and p[j] If p[i+1] != p[j] and f(i-1) == -1, put -1 Else if p[i+1] == p[j], put i+1 Else if p[i+1] != p[j] and i != -1, let i = f(i), until p[i+1] == p[j] or i == -1 If i == -1 compare p[0] and p[j]

7 Knuth-Morris-Pratt Pattern Matching Algorithm Use failure function j012345678910 p[]ababbababaa f(j) 01 0123 First, initial f(0) = -1 j++, i = f(j-1), then compare p[i+1] and p[j] If p[i+1] != p[j] and f(i-1) == -1, put -1 Else if p[i+1] == p[j], put i+1 Else if p[i+1] != p[j] and i != -1, let i = f(i), until p[i+1] == p[j] or i == -1 If i == -1 compare p[0] and p[j]

8 Knuth-Morris-Pratt Pattern Matching Algorithm Use failure function j012345678910 p[]ababbababaa f(j) 01 0123 Not equal! If p[i+1] == p[j], put i+1 First, initial f(0) = -1 j++, i = f(j-1), then compare p[i+1] and p[j] If p[i+1] != p[j] and f(i-1) == -1, put -1 Else if p[i+1] == p[j], put i+1 Else if p[i+1] != p[j] and i != -1, let i = f(i), until p[i+1] == p[j] or i == -1 Equal! 2 If i == -1 compare p[0] and p[j]

9 Knuth-Morris-Pratt Pattern Matching Algorithm Use failure function j012345678910 p[]ababbababaa f(j) 01 01232 If p[i+1] == p[j], put i+1 First, initial f(0) = -1 j++, i = f(j-1), then compare p[i+1] and p[j] If p[i+1] != p[j] and f(i-1) == -1, put -1 Else if p[i+1] == p[j], put i+1 Else if p[i+1] != p[j] and i != -1, let i = f(i), until p[i+1] == p[j] or i == -1 Not equal! If i == -1 compare p[0] and p[j] If i == -1 and p[0] == p[j], put i+1 0

10 Knuth-Morris-Pratt Pattern Matching Algorithm Use failure function j012345678910 p[]ababbababaa f(j) 01 012320 If p[i+1] == p[j], put i+1 First, initial f(0) = -1 j++, i = f(j-1), then compare p[i+1] and p[j] If p[i+1] != p[j] and f(i-1) == -1, put -1 Else if p[i+1] == p[j], put i+1 Else if p[i+1] != p[j] and i != -1, let i = f(i), until p[i+1] == p[j] or i == -1 If i == -1 compare p[0] and p[j] If i == -1 and p[0] == p[j], put i+1

11 Knuth-Morris-Pratt Pattern Matching Algorithm Use failure function Compare with a string s[] : abaabababbababaa p[]ababbababaa f(j) 01 012320 j012345678910 If s[i] != p[j] and j != 0, j = f(j-1)+1 Compare with s[i] and p[j], start with i = j = 0

12 Knuth-Morris-Pratt Pattern Matching Algorithm Use failure function Compare with a string s[] : abaabababbababaa p[]ababbababaa f(j) 01 012320 j012345678910 If s[i] != p[j] and j != 0, j = f(j-1)+1 Compare with s[i] and p[j], start with i = j = 0 Else if s[i] != p[j] and j == 0, i++

13 Knuth-Morris-Pratt Pattern Matching Algorithm Use failure function Compare with a string s[] : abaabababbababaa p[]ababbababaa f(j) 01 012320 j012345678910 If s[i] != p[j] and j != 0, j = f(j-1)+1 Compare with s[i] and p[j], start with i = j = 0 Else if s[i] != p[j] and j == 0, i++

14 Knuth-Morris-Pratt Pattern Matching Algorithm Use failure function Compare with a string s[] : abaabababbababaa p[]ababbababaa f(j) 01 012320 j012345678910 If s[i] != p[j] and j != 0, j = f(j-1)+1 Compare with s[i] and p[j], start with i = j = 0 Else if s[i] != p[j] and j == 0, i++

15 Knuth-Morris-Pratt Pattern Matching Algorithm Use failure function Compare with a string s[] : abaabababbababaa p[]ababbababaa f(j) 01 012320 j012345678910 If s[i] != p[j] and j != 0, j = f(j-1)+1 Compare with s[i] and p[j], start with i = j = 0 Else if s[i] != p[j] and j == 0, i++

16 Knuth-Morris-Pratt Pattern Matching Algorithm Use failure function Compare with a string s[] : abaabababbababaa p[]ababbababaa f(j) 01 012320 j012345678910 If s[i] != p[j] and j != 0, j = f(j-1)+1 Compare with s[i] and p[j], start with i = j = 0 Else if s[i] != p[j] and j == 0, i++

17 Knuth-Morris-Pratt Pattern Matching Algorithm Use failure function Compare with a string s[] : abaabababbababaa p[]ababbababaa f(j) 01 012320 j012345678910 If s[i] != p[j] and j != 0, j = f(j-1)+1 Compare with s[i] and p[j], start with i = j = 0 Else if s[i] != p[j] and j == 0, i++ Following the rules and you can finish this comparison


Download ppt "Knuth-Morris-Pratt Pattern Matching Algorithm Instructor : Prof. Jyh-Shing Roger Jang Designer : Shao-Huan Wang The ideas are reference to the textbook."

Similar presentations


Ads by Google