SlideShare a Scribd company logo
1 of 20
Knuth-Morris-Pratt
Algorithm
Prepared by: Kamal Nayan
The problem of String Matching
Given a string ‘S’, the problem of string matching deals with finding
whether a pattern ‘p’ occurs in ‘S’ and if ‘p’ does occur then
returning position in ‘S’ where ‘p’ occurs.
…. a O(mn) approach
One of the most obvious approach towards the
string matching problem would be to compare the
first element of the pattern to be searched ‘p’, with
the first element of the string ‘S’ in which to locate
‘p’. If the first element of ‘p’ matches the first
element of ‘S’, compare the second element of ‘p’
with second element of ‘S’. If match found proceed
likewise until entire ‘p’ is found. If a mismatch is
found at any position, shift ‘p’ one position to the
right and repeat comparison beginning from first
element of ‘p’.
How does the O(mn) approach
work
Below is an illustration of how the previously
described O(mn) approach works.
String S aa bb cc aa bb aa aa bb cc aa bb aa cc
aa bb aa aaPattern p
Step 1:compare p[1] with S[1]
S
aa bb cc aa bb aa aa bb cc aa bb aa cc
p aa bb aa aa
Step 2: compare p[2] with S[2]
S aa bb cc aa bb aa aa bb cc aa bb aa cc
p aa bb aa aa
Step 3: compare p[3] with S[3]
S
aa bb aa aap
Mismatch occurs here..
Since mismatch is detected, shift ‘p’ one position to the left and
perform steps analogous to those from step 1 to step 3. At position
where mismatch is detected, shift ‘p’ one position to the right and
repeat matching procedure.
aa bb cc aa bb aa aa bb cc aa bb aa cc
S aa bb cc aa bb aa aa bb cc aa bb aa cc
aa bb aa aap
Finally, a match would be found after shifting ‘p’ three times to the right side.
Drawbacks of this approach: if ‘m’ is the length of pattern ‘p’ and ‘n’ the length
of string ‘S’, the matching time is of the order O(mn). This is a certainly a very
slow running algorithm.
What makes this approach so slow is the fact that elements of ‘S’ with which
comparisons had been performed earlier are involved again and again in
comparisons in some future iterations. For example: when mismatch is
detected for the first time in comparison of p[3] with S[3], pattern ‘p’ would be
moved one position to the right and matching procedure would resume from
here. Here the first comparison that would take place would be between p[0]=‘a’
and S[1]=‘b’. It should be noted here that S[1]=‘b’ had been previously involved
in a comparison in step 2. this is a repetitive use of S[1] in another comparison.
It is these repetitive comparisons that lead to the runtime of O(mn).
The Knuth-Morris-Pratt Algorithm
Knuth, Morris and Pratt proposed a linear time algorithm for the string
matching problem.
A matching time of O(n) is achieved by avoiding comparisons with
elements of ‘S’ that have previously been involved in comparison
with some element of the pattern ‘p’ to be matched. i.e.,
backtracking on the string ‘S’ never occurs
Components of KMP algorithm
The prefix function, Π
The prefix function,Π for a pattern encapsulates
knowledge about how the pattern matches against
shifts of itself. This information can be used to avoid
useless shifts of the pattern ‘p’. In other words, this
enables avoiding backtracking on the string ‘S’.
The KMP Matcher
With string ‘S’, pattern ‘p’ and prefix function ‘Π’ as
inputs, finds the occurrence of ‘p’ in ‘S’ and returns
the number of shifts of ‘p’ after which occurrence is
found.
The prefix function, Π
Following pseudocode computes the prefix fucnction, Π:
Compute-Prefix-Function (p)
1 m  length[p] //’p’ pattern to be matched
2 Π[1]  0
3 k  0
4 for q  2 to m
5 do while k > 0 and p[k+1] != p[q]
6 do k  Π[k]
7 If p[k+1] = p[q]
8 then k  k +1
9 Π[q]  k
10 return Π
Example: compute Π for the pattern ‘p’ below:
p aa bb aa bb aa cc aa
qq 11 22 33 44 55 66 77
pp aa bb aa bb aa cc aa
ΠΠ 00 00
Initially: m = length[p] = 7
Π[1] = 0
k = 0
Step 1: q = 2, k=0
Π[2] = 0
Step 2: q = 3, k = 0,
Π[3] = 1
Step 3: q = 4, k = 1
Π[4] = 2
qq 11 22 33 44 55 66 77
pp aa bb aa bb aa cc aa
ΠΠ 00 00 11
qq 11 22 33 44 55 66 77
pp aa bb aa bb aa cc AA
ΠΠ 00 00 11 22
Step 4: q = 5, k =2
Π[5] = 3
Step 5: q = 6, k = 3
Π[6] = 0
Step 6: q = 7, k = 0
Π[7] = 1
After iterating 6 times, the prefix
function computation is complete:

qq 11 22 33 44 55 66 77
pp aa bb aa bb aa cc aa
ΠΠ 00 00 11 22 33
qq 11 22 33 44 55 66 77
pp aa bb aa bb aa cc aa
ΠΠ 00 00 11 22 33 00
qq 11 22 33 44 55 66 77
pp aa bb aa bb aa cc aa
ΠΠ 00 00 11 22 33 00 11
qq 11 22 33 44 55 66 77
pp aa bb AA bb aa cc aa
ΠΠ 00 00 11 22 33 00 11
The KMP Matcher
The KMP Matcher, with pattern ‘p’, string ‘S’ and prefix function ‘Π’ as input, finds a match of p in S.
Following pseudocode computes the matching component of KMP algorithm:
KMP-Matcher(S,p)
1 n  length[S]
2 m  length[p]
3 Π  Compute-Prefix-Function(p)
4 q  0 //number of characters matched
5 for i  1 to n //scan S from left to right
6 do while q > 0 and p[q+1] != S[i]
7 do q  Π[q] //next character does not match
8 if p[q+1] = S[i]
9 then q  q + 1 //next character matches
10 if q = m //is all of p matched?
11 then print “Pattern occurs with shift” i – m
12 q  Π[ q] // look for the next match
Note: KMP finds every occurrence of a ‘p’ in ‘S’. That is why KMP does not terminate in step 12, rather it searches
remainder of ‘S’ for any more occurrences of ‘p’.
Illustration: given a String ‘S’ and pattern ‘p’ as follows:
S
bb aa cc bb aa bb aa bb aa bb aa cc aa cc aa
aa bb aa bb aa cc aap
Let us execute the KMP algorithm to find
whether ‘p’ occurs in ‘S’.
For ‘p’ the prefix function, Π was computed previously and is as follows:
qq 11 22 33 44 55 66 77
pp aa bb AA bb aa cc aa
ΠΠ 00 00 11 22 33 11 11
bb aa cc bb aa bb aa bb aa bb aa cc aa aa bb
bb aa cc bb aa bb aa bb aa bb aa cc aa aa bb
aa bb aa bb aa cc aa
aa bb aa bb aa cc aa
Initially: n = size of S = 15;
m = size of p = 7
Step 1: i = 1, q = 0
comparing p[1] with S[1]
S
p
P[1] does not match with S[1]. ‘p’ will be shifted one position to the right.
S
p
Step 2: i = 2, q = 0
comparing p[1] with S[2]
P[1] matches S[2]. Since there is a match, p is not shifted.
Step 3: i = 3, q = 1
bb aa cc bb aa bb aa bb aa bb aa cc aa aa bb
aa bb aa bb aa cc aa
Comparing p[2] with S[3]
S
bb aa cc bb aa bb aa bb aa bb aa cc aa aa bb
bb aa cc bb aa bb aa bb aa bb aa cc aa aa bb
aa bb aa bb aa cc aa
aa bb aa bb aa cc aap
S
p
S
p
p[2] does not match with S[3]
Backtracking on p, comparing p[1] and S[3]
Step 4: i = 4, q = 0
comparing p[1] with S[4] p[1] does not match with S[4]
Step 5: i = 5, q = 0
comparing p[1] with S[5] p[1] matches with S[5]
bb aa cc bb aa bb aa bb aa bb aa cc aa aa bb
bb aa cc bb aa bb aa bb aa bb aa cc aa aa bb
bb aa cc bb aa bb aa bb aa bb aa cc aa aa bb
aa bb aa bb aa cc aa
aa bb aa bb aa cc aa
aa bb aa bb aa cc aa
Step 6: i = 6, q = 1Step 6: i = 6, q = 1
S
p
Comparing p[2] with S[6] p[2] matches with S[6]
S
p
Step 7: i = 7, q = 2Step 7: i = 7, q = 2
Comparing p[3] with S[7] p[3] matches with S[7]
Step 8: i = 8, q = 3Step 8: i = 8, q = 3
Comparing p[4] with S[8] p[4] matches with S[8]
S
p
Step 9: i = 9, q = 4Step 9: i = 9, q = 4
Comparing p[5] with S[9]
Comparing p[6] with S[10]
Comparing p[5] with S[11]
Step 10: i = 10, q = 5Step 10: i = 10, q = 5
Step 11: i = 11, q = 4Step 11: i = 11, q = 4
S
S
S
p
p
p
bb aa cc bb aa bb aa bb aa bb aa cc aa aa bb
bb aa cc bb aa bb aa bb aa bb aa cc aa aa bb
bb aa cc bb aa bb aa bb aa bb aa cc aa aa bb
aa bb aa bb aa cc aa
aa bb aa bb aa cc aa
aa bb aa bb aa cc aa
p[6] doesn’t match with S[10]
Backtracking on p, comparing p[4] with S[10] because after mismatch q = Π[5] = 3
p[5] matches with S[9]
p[5] matches with S[11]
bb aa cc bb aa bb aa bb aa bb aa cc aa aa bb
bb aa cc bb aa bb aa bb aa bb aa cc aa aa bb
aa bb aa bb aa cc aa
aa bb aa bb aa cc aa
Step 12: i = 12, q = 5Step 12: i = 12, q = 5
Comparing p[6] with S[12]
Comparing p[7] with S[13]
S
S
p
p
Step 13: i = 13, q = 6Step 13: i = 13, q = 6
p[6] matches with S[12]
p[7] matches with S[13]
Pattern ‘p’ has been found to completely occur in string ‘S’. The total number of shifts
that took place for the match to be found are: i – m = 13 – 7 = 6 shifts.
Running - time analysis
 Compute-Prefix-Function (Π)
1 m  length[p] //’p’ pattern to be matched
2 Π[1]  0
3 k  0
4 for q  2 to m
5 do while k > 0 and p[k+1] != p[q]
6 do k  Π[k]
7 If p[k+1] = p[q]
8 then k  k +1
9 Π[q]  k
10 return Π
In the above pseudocode for computing the prefix
function, the for loop from step 4 to step 10
runs ‘m’ times. Step 1 to step 3 take constant
time. Hence the running time of compute
prefix function is Θ(m).
 KMP Matcher
1 n  length[S]
2 m  length[p]
3 Π  Compute-Prefix-Function(p)
4 q  0
5 for i  1 to n
6 do while q > 0 and p[q+1] != S[i]
7 do q  Π[q]
8 if p[q+1] = S[i]
9 then q  q + 1
10 if q = m
11 then print “Pattern occurs with shift” i – m
12 q  Π[ q]
The for loop beginning in step 5 runs ‘n’ times, i.e., as
long as the length of the string ‘S’. Since step 1 to step
4 take constant time, the running time is dominated
by this for loop. Thus running time of matching
function is Θ(n).

More Related Content

What's hot

Algorithm analysis (All in one)
Algorithm analysis (All in one)Algorithm analysis (All in one)
Algorithm analysis (All in one)jehan1987
 
Travelling salesman dynamic programming
Travelling salesman dynamic programmingTravelling salesman dynamic programming
Travelling salesman dynamic programmingmaharajdey
 
String Matching (Naive,Rabin-Karp,KMP)
String Matching (Naive,Rabin-Karp,KMP)String Matching (Naive,Rabin-Karp,KMP)
String Matching (Naive,Rabin-Karp,KMP)Aditya pratap Singh
 
String Matching Finite Automata & KMP Algorithm.
String Matching Finite Automata & KMP Algorithm.String Matching Finite Automata & KMP Algorithm.
String Matching Finite Automata & KMP Algorithm.Malek Sumaiya
 
Algorithms Lecture 7: Graph Algorithms
Algorithms Lecture 7: Graph AlgorithmsAlgorithms Lecture 7: Graph Algorithms
Algorithms Lecture 7: Graph AlgorithmsMohamed Loey
 
15 puzzle problem using branch and bound
15 puzzle problem using branch and bound15 puzzle problem using branch and bound
15 puzzle problem using branch and boundAbhishek Singh
 
Divide and Conquer - Part 1
Divide and Conquer - Part 1Divide and Conquer - Part 1
Divide and Conquer - Part 1Amrinder Arora
 
Rabin karp string matching algorithm
Rabin karp string matching algorithmRabin karp string matching algorithm
Rabin karp string matching algorithmGajanand Sharma
 
RABIN KARP ALGORITHM STRING MATCHING
RABIN KARP ALGORITHM STRING MATCHINGRABIN KARP ALGORITHM STRING MATCHING
RABIN KARP ALGORITHM STRING MATCHINGAbhishek Singh
 
2-Approximation Vertex Cover
2-Approximation Vertex Cover2-Approximation Vertex Cover
2-Approximation Vertex CoverKowshik Roy
 

What's hot (20)

Algorithm analysis (All in one)
Algorithm analysis (All in one)Algorithm analysis (All in one)
Algorithm analysis (All in one)
 
Travelling salesman dynamic programming
Travelling salesman dynamic programmingTravelling salesman dynamic programming
Travelling salesman dynamic programming
 
Convex hull
Convex hullConvex hull
Convex hull
 
String Matching (Naive,Rabin-Karp,KMP)
String Matching (Naive,Rabin-Karp,KMP)String Matching (Naive,Rabin-Karp,KMP)
String Matching (Naive,Rabin-Karp,KMP)
 
Insertion sort algorithm power point presentation
Insertion  sort algorithm power point presentation Insertion  sort algorithm power point presentation
Insertion sort algorithm power point presentation
 
String Matching Finite Automata & KMP Algorithm.
String Matching Finite Automata & KMP Algorithm.String Matching Finite Automata & KMP Algorithm.
String Matching Finite Automata & KMP Algorithm.
 
Unit 1 chapter 1 Design and Analysis of Algorithms
Unit 1   chapter 1 Design and Analysis of AlgorithmsUnit 1   chapter 1 Design and Analysis of Algorithms
Unit 1 chapter 1 Design and Analysis of Algorithms
 
Algorithms Lecture 7: Graph Algorithms
Algorithms Lecture 7: Graph AlgorithmsAlgorithms Lecture 7: Graph Algorithms
Algorithms Lecture 7: Graph Algorithms
 
Undecidabality
UndecidabalityUndecidabality
Undecidabality
 
Boyer more algorithm
Boyer more algorithmBoyer more algorithm
Boyer more algorithm
 
Randomized algorithms ver 1.0
Randomized algorithms ver 1.0Randomized algorithms ver 1.0
Randomized algorithms ver 1.0
 
Input-Buffering
Input-BufferingInput-Buffering
Input-Buffering
 
Approximation Algorithms
Approximation AlgorithmsApproximation Algorithms
Approximation Algorithms
 
15 puzzle problem using branch and bound
15 puzzle problem using branch and bound15 puzzle problem using branch and bound
15 puzzle problem using branch and bound
 
String matching algorithms
String matching algorithmsString matching algorithms
String matching algorithms
 
Divide and Conquer - Part 1
Divide and Conquer - Part 1Divide and Conquer - Part 1
Divide and Conquer - Part 1
 
Rabin karp string matching algorithm
Rabin karp string matching algorithmRabin karp string matching algorithm
Rabin karp string matching algorithm
 
KMP String Matching Algorithm
KMP String Matching AlgorithmKMP String Matching Algorithm
KMP String Matching Algorithm
 
RABIN KARP ALGORITHM STRING MATCHING
RABIN KARP ALGORITHM STRING MATCHINGRABIN KARP ALGORITHM STRING MATCHING
RABIN KARP ALGORITHM STRING MATCHING
 
2-Approximation Vertex Cover
2-Approximation Vertex Cover2-Approximation Vertex Cover
2-Approximation Vertex Cover
 

Similar to KMP Pattern Matching algorithm

W9Presentation.ppt
W9Presentation.pptW9Presentation.ppt
W9Presentation.pptAlinaMishra7
 
Knutt Morris Pratt Algorithm by Dr. Rose.ppt
Knutt Morris Pratt Algorithm by Dr. Rose.pptKnutt Morris Pratt Algorithm by Dr. Rose.ppt
Knutt Morris Pratt Algorithm by Dr. Rose.pptsaki931
 
5 Understanding Page Rank
5 Understanding Page Rank5 Understanding Page Rank
5 Understanding Page Rankmasiclat
 
String-Matching Algorithms Advance algorithm
String-Matching  Algorithms Advance algorithmString-Matching  Algorithms Advance algorithm
String-Matching Algorithms Advance algorithmssuseraf60311
 
module6_stringmatchingalgorithm_2022.pdf
module6_stringmatchingalgorithm_2022.pdfmodule6_stringmatchingalgorithm_2022.pdf
module6_stringmatchingalgorithm_2022.pdfShiwani Gupta
 
Rabin Carp String Matching algorithm
Rabin Carp String Matching  algorithmRabin Carp String Matching  algorithm
Rabin Carp String Matching algorithmsabiya sabiya
 
Skiena algorithm 2007 lecture17 edit distance
Skiena algorithm 2007 lecture17 edit distanceSkiena algorithm 2007 lecture17 edit distance
Skiena algorithm 2007 lecture17 edit distancezukun
 

Similar to KMP Pattern Matching algorithm (9)

W9Presentation.ppt
W9Presentation.pptW9Presentation.ppt
W9Presentation.ppt
 
Knutt Morris Pratt Algorithm by Dr. Rose.ppt
Knutt Morris Pratt Algorithm by Dr. Rose.pptKnutt Morris Pratt Algorithm by Dr. Rose.ppt
Knutt Morris Pratt Algorithm by Dr. Rose.ppt
 
5 Understanding Page Rank
5 Understanding Page Rank5 Understanding Page Rank
5 Understanding Page Rank
 
String-Matching Algorithms Advance algorithm
String-Matching  Algorithms Advance algorithmString-Matching  Algorithms Advance algorithm
String-Matching Algorithms Advance algorithm
 
module6_stringmatchingalgorithm_2022.pdf
module6_stringmatchingalgorithm_2022.pdfmodule6_stringmatchingalgorithm_2022.pdf
module6_stringmatchingalgorithm_2022.pdf
 
Rabin Carp String Matching algorithm
Rabin Carp String Matching  algorithmRabin Carp String Matching  algorithm
Rabin Carp String Matching algorithm
 
Lec17
Lec17Lec17
Lec17
 
Daa chapter9
Daa chapter9Daa chapter9
Daa chapter9
 
Skiena algorithm 2007 lecture17 edit distance
Skiena algorithm 2007 lecture17 edit distanceSkiena algorithm 2007 lecture17 edit distance
Skiena algorithm 2007 lecture17 edit distance
 

Recently uploaded

Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)
Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)
Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)lakshayb543
 
ROLES IN A STAGE PRODUCTION in arts.pptx
ROLES IN A STAGE PRODUCTION in arts.pptxROLES IN A STAGE PRODUCTION in arts.pptx
ROLES IN A STAGE PRODUCTION in arts.pptxVanesaIglesias10
 
Incoming and Outgoing Shipments in 3 STEPS Using Odoo 17
Incoming and Outgoing Shipments in 3 STEPS Using Odoo 17Incoming and Outgoing Shipments in 3 STEPS Using Odoo 17
Incoming and Outgoing Shipments in 3 STEPS Using Odoo 17Celine George
 
Global Lehigh Strategic Initiatives (without descriptions)
Global Lehigh Strategic Initiatives (without descriptions)Global Lehigh Strategic Initiatives (without descriptions)
Global Lehigh Strategic Initiatives (without descriptions)cama23
 
Inclusivity Essentials_ Creating Accessible Websites for Nonprofits .pdf
Inclusivity Essentials_ Creating Accessible Websites for Nonprofits .pdfInclusivity Essentials_ Creating Accessible Websites for Nonprofits .pdf
Inclusivity Essentials_ Creating Accessible Websites for Nonprofits .pdfTechSoup
 
AUDIENCE THEORY -CULTIVATION THEORY - GERBNER.pptx
AUDIENCE THEORY -CULTIVATION THEORY -  GERBNER.pptxAUDIENCE THEORY -CULTIVATION THEORY -  GERBNER.pptx
AUDIENCE THEORY -CULTIVATION THEORY - GERBNER.pptxiammrhaywood
 
Integumentary System SMP B. Pharm Sem I.ppt
Integumentary System SMP B. Pharm Sem I.pptIntegumentary System SMP B. Pharm Sem I.ppt
Integumentary System SMP B. Pharm Sem I.pptshraddhaparab530
 
Earth Day Presentation wow hello nice great
Earth Day Presentation wow hello nice greatEarth Day Presentation wow hello nice great
Earth Day Presentation wow hello nice greatYousafMalik24
 
ENG 5 Q4 WEEk 1 DAY 1 Restate sentences heard in one’s own words. Use appropr...
ENG 5 Q4 WEEk 1 DAY 1 Restate sentences heard in one’s own words. Use appropr...ENG 5 Q4 WEEk 1 DAY 1 Restate sentences heard in one’s own words. Use appropr...
ENG 5 Q4 WEEk 1 DAY 1 Restate sentences heard in one’s own words. Use appropr...JojoEDelaCruz
 
Keynote by Prof. Wurzer at Nordex about IP-design
Keynote by Prof. Wurzer at Nordex about IP-designKeynote by Prof. Wurzer at Nordex about IP-design
Keynote by Prof. Wurzer at Nordex about IP-designMIPLM
 
Grade 9 Quarter 4 Dll Grade 9 Quarter 4 DLL.pdf
Grade 9 Quarter 4 Dll Grade 9 Quarter 4 DLL.pdfGrade 9 Quarter 4 Dll Grade 9 Quarter 4 DLL.pdf
Grade 9 Quarter 4 Dll Grade 9 Quarter 4 DLL.pdfJemuel Francisco
 
ISYU TUNGKOL SA SEKSWLADIDA (ISSUE ABOUT SEXUALITY
ISYU TUNGKOL SA SEKSWLADIDA (ISSUE ABOUT SEXUALITYISYU TUNGKOL SA SEKSWLADIDA (ISSUE ABOUT SEXUALITY
ISYU TUNGKOL SA SEKSWLADIDA (ISSUE ABOUT SEXUALITYKayeClaireEstoconing
 
Food processing presentation for bsc agriculture hons
Food processing presentation for bsc agriculture honsFood processing presentation for bsc agriculture hons
Food processing presentation for bsc agriculture honsManeerUddin
 
Virtual-Orientation-on-the-Administration-of-NATG12-NATG6-and-ELLNA.pdf
Virtual-Orientation-on-the-Administration-of-NATG12-NATG6-and-ELLNA.pdfVirtual-Orientation-on-the-Administration-of-NATG12-NATG6-and-ELLNA.pdf
Virtual-Orientation-on-the-Administration-of-NATG12-NATG6-and-ELLNA.pdfErwinPantujan2
 
ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...
ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...
ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...JhezDiaz1
 
Active Learning Strategies (in short ALS).pdf
Active Learning Strategies (in short ALS).pdfActive Learning Strategies (in short ALS).pdf
Active Learning Strategies (in short ALS).pdfPatidar M
 

Recently uploaded (20)

Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)
Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)
Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)
 
ROLES IN A STAGE PRODUCTION in arts.pptx
ROLES IN A STAGE PRODUCTION in arts.pptxROLES IN A STAGE PRODUCTION in arts.pptx
ROLES IN A STAGE PRODUCTION in arts.pptx
 
Incoming and Outgoing Shipments in 3 STEPS Using Odoo 17
Incoming and Outgoing Shipments in 3 STEPS Using Odoo 17Incoming and Outgoing Shipments in 3 STEPS Using Odoo 17
Incoming and Outgoing Shipments in 3 STEPS Using Odoo 17
 
Global Lehigh Strategic Initiatives (without descriptions)
Global Lehigh Strategic Initiatives (without descriptions)Global Lehigh Strategic Initiatives (without descriptions)
Global Lehigh Strategic Initiatives (without descriptions)
 
Inclusivity Essentials_ Creating Accessible Websites for Nonprofits .pdf
Inclusivity Essentials_ Creating Accessible Websites for Nonprofits .pdfInclusivity Essentials_ Creating Accessible Websites for Nonprofits .pdf
Inclusivity Essentials_ Creating Accessible Websites for Nonprofits .pdf
 
AUDIENCE THEORY -CULTIVATION THEORY - GERBNER.pptx
AUDIENCE THEORY -CULTIVATION THEORY -  GERBNER.pptxAUDIENCE THEORY -CULTIVATION THEORY -  GERBNER.pptx
AUDIENCE THEORY -CULTIVATION THEORY - GERBNER.pptx
 
LEFT_ON_C'N_ PRELIMS_EL_DORADO_2024.pptx
LEFT_ON_C'N_ PRELIMS_EL_DORADO_2024.pptxLEFT_ON_C'N_ PRELIMS_EL_DORADO_2024.pptx
LEFT_ON_C'N_ PRELIMS_EL_DORADO_2024.pptx
 
Integumentary System SMP B. Pharm Sem I.ppt
Integumentary System SMP B. Pharm Sem I.pptIntegumentary System SMP B. Pharm Sem I.ppt
Integumentary System SMP B. Pharm Sem I.ppt
 
YOUVE_GOT_EMAIL_PRELIMS_EL_DORADO_2024.pptx
YOUVE_GOT_EMAIL_PRELIMS_EL_DORADO_2024.pptxYOUVE_GOT_EMAIL_PRELIMS_EL_DORADO_2024.pptx
YOUVE_GOT_EMAIL_PRELIMS_EL_DORADO_2024.pptx
 
Earth Day Presentation wow hello nice great
Earth Day Presentation wow hello nice greatEarth Day Presentation wow hello nice great
Earth Day Presentation wow hello nice great
 
ENG 5 Q4 WEEk 1 DAY 1 Restate sentences heard in one’s own words. Use appropr...
ENG 5 Q4 WEEk 1 DAY 1 Restate sentences heard in one’s own words. Use appropr...ENG 5 Q4 WEEk 1 DAY 1 Restate sentences heard in one’s own words. Use appropr...
ENG 5 Q4 WEEk 1 DAY 1 Restate sentences heard in one’s own words. Use appropr...
 
Keynote by Prof. Wurzer at Nordex about IP-design
Keynote by Prof. Wurzer at Nordex about IP-designKeynote by Prof. Wurzer at Nordex about IP-design
Keynote by Prof. Wurzer at Nordex about IP-design
 
YOUVE GOT EMAIL_FINALS_EL_DORADO_2024.pptx
YOUVE GOT EMAIL_FINALS_EL_DORADO_2024.pptxYOUVE GOT EMAIL_FINALS_EL_DORADO_2024.pptx
YOUVE GOT EMAIL_FINALS_EL_DORADO_2024.pptx
 
FINALS_OF_LEFT_ON_C'N_EL_DORADO_2024.pptx
FINALS_OF_LEFT_ON_C'N_EL_DORADO_2024.pptxFINALS_OF_LEFT_ON_C'N_EL_DORADO_2024.pptx
FINALS_OF_LEFT_ON_C'N_EL_DORADO_2024.pptx
 
Grade 9 Quarter 4 Dll Grade 9 Quarter 4 DLL.pdf
Grade 9 Quarter 4 Dll Grade 9 Quarter 4 DLL.pdfGrade 9 Quarter 4 Dll Grade 9 Quarter 4 DLL.pdf
Grade 9 Quarter 4 Dll Grade 9 Quarter 4 DLL.pdf
 
ISYU TUNGKOL SA SEKSWLADIDA (ISSUE ABOUT SEXUALITY
ISYU TUNGKOL SA SEKSWLADIDA (ISSUE ABOUT SEXUALITYISYU TUNGKOL SA SEKSWLADIDA (ISSUE ABOUT SEXUALITY
ISYU TUNGKOL SA SEKSWLADIDA (ISSUE ABOUT SEXUALITY
 
Food processing presentation for bsc agriculture hons
Food processing presentation for bsc agriculture honsFood processing presentation for bsc agriculture hons
Food processing presentation for bsc agriculture hons
 
Virtual-Orientation-on-the-Administration-of-NATG12-NATG6-and-ELLNA.pdf
Virtual-Orientation-on-the-Administration-of-NATG12-NATG6-and-ELLNA.pdfVirtual-Orientation-on-the-Administration-of-NATG12-NATG6-and-ELLNA.pdf
Virtual-Orientation-on-the-Administration-of-NATG12-NATG6-and-ELLNA.pdf
 
ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...
ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...
ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...
 
Active Learning Strategies (in short ALS).pdf
Active Learning Strategies (in short ALS).pdfActive Learning Strategies (in short ALS).pdf
Active Learning Strategies (in short ALS).pdf
 

KMP Pattern Matching algorithm

  • 2. The problem of String Matching Given a string ‘S’, the problem of string matching deals with finding whether a pattern ‘p’ occurs in ‘S’ and if ‘p’ does occur then returning position in ‘S’ where ‘p’ occurs.
  • 3. …. a O(mn) approach One of the most obvious approach towards the string matching problem would be to compare the first element of the pattern to be searched ‘p’, with the first element of the string ‘S’ in which to locate ‘p’. If the first element of ‘p’ matches the first element of ‘S’, compare the second element of ‘p’ with second element of ‘S’. If match found proceed likewise until entire ‘p’ is found. If a mismatch is found at any position, shift ‘p’ one position to the right and repeat comparison beginning from first element of ‘p’.
  • 4. How does the O(mn) approach work Below is an illustration of how the previously described O(mn) approach works. String S aa bb cc aa bb aa aa bb cc aa bb aa cc aa bb aa aaPattern p
  • 5. Step 1:compare p[1] with S[1] S aa bb cc aa bb aa aa bb cc aa bb aa cc p aa bb aa aa Step 2: compare p[2] with S[2] S aa bb cc aa bb aa aa bb cc aa bb aa cc p aa bb aa aa
  • 6. Step 3: compare p[3] with S[3] S aa bb aa aap Mismatch occurs here.. Since mismatch is detected, shift ‘p’ one position to the left and perform steps analogous to those from step 1 to step 3. At position where mismatch is detected, shift ‘p’ one position to the right and repeat matching procedure. aa bb cc aa bb aa aa bb cc aa bb aa cc
  • 7. S aa bb cc aa bb aa aa bb cc aa bb aa cc aa bb aa aap Finally, a match would be found after shifting ‘p’ three times to the right side. Drawbacks of this approach: if ‘m’ is the length of pattern ‘p’ and ‘n’ the length of string ‘S’, the matching time is of the order O(mn). This is a certainly a very slow running algorithm. What makes this approach so slow is the fact that elements of ‘S’ with which comparisons had been performed earlier are involved again and again in comparisons in some future iterations. For example: when mismatch is detected for the first time in comparison of p[3] with S[3], pattern ‘p’ would be moved one position to the right and matching procedure would resume from here. Here the first comparison that would take place would be between p[0]=‘a’ and S[1]=‘b’. It should be noted here that S[1]=‘b’ had been previously involved in a comparison in step 2. this is a repetitive use of S[1] in another comparison. It is these repetitive comparisons that lead to the runtime of O(mn).
  • 8. The Knuth-Morris-Pratt Algorithm Knuth, Morris and Pratt proposed a linear time algorithm for the string matching problem. A matching time of O(n) is achieved by avoiding comparisons with elements of ‘S’ that have previously been involved in comparison with some element of the pattern ‘p’ to be matched. i.e., backtracking on the string ‘S’ never occurs
  • 9. Components of KMP algorithm The prefix function, Π The prefix function,Π for a pattern encapsulates knowledge about how the pattern matches against shifts of itself. This information can be used to avoid useless shifts of the pattern ‘p’. In other words, this enables avoiding backtracking on the string ‘S’. The KMP Matcher With string ‘S’, pattern ‘p’ and prefix function ‘Π’ as inputs, finds the occurrence of ‘p’ in ‘S’ and returns the number of shifts of ‘p’ after which occurrence is found.
  • 10. The prefix function, Π Following pseudocode computes the prefix fucnction, Π: Compute-Prefix-Function (p) 1 m  length[p] //’p’ pattern to be matched 2 Π[1]  0 3 k  0 4 for q  2 to m 5 do while k > 0 and p[k+1] != p[q] 6 do k  Π[k] 7 If p[k+1] = p[q] 8 then k  k +1 9 Π[q]  k 10 return Π
  • 11. Example: compute Π for the pattern ‘p’ below: p aa bb aa bb aa cc aa qq 11 22 33 44 55 66 77 pp aa bb aa bb aa cc aa ΠΠ 00 00 Initially: m = length[p] = 7 Π[1] = 0 k = 0 Step 1: q = 2, k=0 Π[2] = 0 Step 2: q = 3, k = 0, Π[3] = 1 Step 3: q = 4, k = 1 Π[4] = 2 qq 11 22 33 44 55 66 77 pp aa bb aa bb aa cc aa ΠΠ 00 00 11 qq 11 22 33 44 55 66 77 pp aa bb aa bb aa cc AA ΠΠ 00 00 11 22
  • 12. Step 4: q = 5, k =2 Π[5] = 3 Step 5: q = 6, k = 3 Π[6] = 0 Step 6: q = 7, k = 0 Π[7] = 1 After iterating 6 times, the prefix function computation is complete:  qq 11 22 33 44 55 66 77 pp aa bb aa bb aa cc aa ΠΠ 00 00 11 22 33 qq 11 22 33 44 55 66 77 pp aa bb aa bb aa cc aa ΠΠ 00 00 11 22 33 00 qq 11 22 33 44 55 66 77 pp aa bb aa bb aa cc aa ΠΠ 00 00 11 22 33 00 11 qq 11 22 33 44 55 66 77 pp aa bb AA bb aa cc aa ΠΠ 00 00 11 22 33 00 11
  • 13. The KMP Matcher The KMP Matcher, with pattern ‘p’, string ‘S’ and prefix function ‘Π’ as input, finds a match of p in S. Following pseudocode computes the matching component of KMP algorithm: KMP-Matcher(S,p) 1 n  length[S] 2 m  length[p] 3 Π  Compute-Prefix-Function(p) 4 q  0 //number of characters matched 5 for i  1 to n //scan S from left to right 6 do while q > 0 and p[q+1] != S[i] 7 do q  Π[q] //next character does not match 8 if p[q+1] = S[i] 9 then q  q + 1 //next character matches 10 if q = m //is all of p matched? 11 then print “Pattern occurs with shift” i – m 12 q  Π[ q] // look for the next match Note: KMP finds every occurrence of a ‘p’ in ‘S’. That is why KMP does not terminate in step 12, rather it searches remainder of ‘S’ for any more occurrences of ‘p’.
  • 14. Illustration: given a String ‘S’ and pattern ‘p’ as follows: S bb aa cc bb aa bb aa bb aa bb aa cc aa cc aa aa bb aa bb aa cc aap Let us execute the KMP algorithm to find whether ‘p’ occurs in ‘S’. For ‘p’ the prefix function, Π was computed previously and is as follows: qq 11 22 33 44 55 66 77 pp aa bb AA bb aa cc aa ΠΠ 00 00 11 22 33 11 11
  • 15. bb aa cc bb aa bb aa bb aa bb aa cc aa aa bb bb aa cc bb aa bb aa bb aa bb aa cc aa aa bb aa bb aa bb aa cc aa aa bb aa bb aa cc aa Initially: n = size of S = 15; m = size of p = 7 Step 1: i = 1, q = 0 comparing p[1] with S[1] S p P[1] does not match with S[1]. ‘p’ will be shifted one position to the right. S p Step 2: i = 2, q = 0 comparing p[1] with S[2] P[1] matches S[2]. Since there is a match, p is not shifted.
  • 16. Step 3: i = 3, q = 1 bb aa cc bb aa bb aa bb aa bb aa cc aa aa bb aa bb aa bb aa cc aa Comparing p[2] with S[3] S bb aa cc bb aa bb aa bb aa bb aa cc aa aa bb bb aa cc bb aa bb aa bb aa bb aa cc aa aa bb aa bb aa bb aa cc aa aa bb aa bb aa cc aap S p S p p[2] does not match with S[3] Backtracking on p, comparing p[1] and S[3] Step 4: i = 4, q = 0 comparing p[1] with S[4] p[1] does not match with S[4] Step 5: i = 5, q = 0 comparing p[1] with S[5] p[1] matches with S[5]
  • 17. bb aa cc bb aa bb aa bb aa bb aa cc aa aa bb bb aa cc bb aa bb aa bb aa bb aa cc aa aa bb bb aa cc bb aa bb aa bb aa bb aa cc aa aa bb aa bb aa bb aa cc aa aa bb aa bb aa cc aa aa bb aa bb aa cc aa Step 6: i = 6, q = 1Step 6: i = 6, q = 1 S p Comparing p[2] with S[6] p[2] matches with S[6] S p Step 7: i = 7, q = 2Step 7: i = 7, q = 2 Comparing p[3] with S[7] p[3] matches with S[7] Step 8: i = 8, q = 3Step 8: i = 8, q = 3 Comparing p[4] with S[8] p[4] matches with S[8] S p
  • 18. Step 9: i = 9, q = 4Step 9: i = 9, q = 4 Comparing p[5] with S[9] Comparing p[6] with S[10] Comparing p[5] with S[11] Step 10: i = 10, q = 5Step 10: i = 10, q = 5 Step 11: i = 11, q = 4Step 11: i = 11, q = 4 S S S p p p bb aa cc bb aa bb aa bb aa bb aa cc aa aa bb bb aa cc bb aa bb aa bb aa bb aa cc aa aa bb bb aa cc bb aa bb aa bb aa bb aa cc aa aa bb aa bb aa bb aa cc aa aa bb aa bb aa cc aa aa bb aa bb aa cc aa p[6] doesn’t match with S[10] Backtracking on p, comparing p[4] with S[10] because after mismatch q = Π[5] = 3 p[5] matches with S[9] p[5] matches with S[11]
  • 19. bb aa cc bb aa bb aa bb aa bb aa cc aa aa bb bb aa cc bb aa bb aa bb aa bb aa cc aa aa bb aa bb aa bb aa cc aa aa bb aa bb aa cc aa Step 12: i = 12, q = 5Step 12: i = 12, q = 5 Comparing p[6] with S[12] Comparing p[7] with S[13] S S p p Step 13: i = 13, q = 6Step 13: i = 13, q = 6 p[6] matches with S[12] p[7] matches with S[13] Pattern ‘p’ has been found to completely occur in string ‘S’. The total number of shifts that took place for the match to be found are: i – m = 13 – 7 = 6 shifts.
  • 20. Running - time analysis  Compute-Prefix-Function (Π) 1 m  length[p] //’p’ pattern to be matched 2 Π[1]  0 3 k  0 4 for q  2 to m 5 do while k > 0 and p[k+1] != p[q] 6 do k  Π[k] 7 If p[k+1] = p[q] 8 then k  k +1 9 Π[q]  k 10 return Π In the above pseudocode for computing the prefix function, the for loop from step 4 to step 10 runs ‘m’ times. Step 1 to step 3 take constant time. Hence the running time of compute prefix function is Θ(m).  KMP Matcher 1 n  length[S] 2 m  length[p] 3 Π  Compute-Prefix-Function(p) 4 q  0 5 for i  1 to n 6 do while q > 0 and p[q+1] != S[i] 7 do q  Π[q] 8 if p[q+1] = S[i] 9 then q  q + 1 10 if q = m 11 then print “Pattern occurs with shift” i – m 12 q  Π[ q] The for loop beginning in step 5 runs ‘n’ times, i.e., as long as the length of the string ‘S’. Since step 1 to step 4 take constant time, the running time is dominated by this for loop. Thus running time of matching function is Θ(n).