next up previous
Next: Up: Previous:

Pseudocode

KMP-Matcher(T, P)
$\;\;\;\;\;$n = length(T)
$\;\;\;\;\;$m = length(P)
$\;\;\;\;\;$$\pi$ = Compute-Prefix-Function(P) $\;\;\;\;\;$ $\;\;\;\;\;$; O(m) amortized
$\;\;\;\;\;$q = 0
$\;\;\;\;\;$for i = 1 to n $\;\;\;\;\;$ $\;\;\;\;\;$ $\;\;\;\;\;$ $\;\;\;\;\;$ $\;\;\;\;\;$ $\;\;\;\;\;$ $\;\;\;\;\;$; O(n) amortized
$\;\;\;\;\;$ $\;\;\;\;\;$while q > 0 and P[q+1] $\neq$ T[i] ; where do we move to in P?
$\;\;\;\;\;$ $\;\;\;\;\;$ $\;\;\;\;\;$q = $\pi$[q]
$\;\;\;\;\;$ $\;\;\;\;\;$if P[q+1] = T[i] $\;\;\;\;\;$ $\;\;\;\;\;$ $\;\;\;\;\;$ $\;\;\;\;\;$ $\;\;\;\;\;$ $\;\;\;\;\;$; matches so far
$\;\;\;\;\;$ $\;\;\;\;\;$then q = q + 1
$\;\;\;\;\;$ $\;\;\;\;\;$if q = m
$\;\;\;\;\;$ $\;\;\;\;\;$then print ``Pattern occurs with shift'' (i-m)
$\;\;\;\;\;$ $\;\;\;\;\;$ $\;\;\;\;\;$q = $\pi$[q]



This algorithm takes O(m+n) time

Example


next up previous
Next: Up: Previous: