Skip to main content

Knuth–Morris–Pratt Algorithm (KMP Algorithm)

Definition

The Knuth–Morris–Pratt (KMP) Algorithm is a string searching algorithm that efficiently finds occurrences of a pattern within a text. It does so by utilizing information from previously matched characters to avoid unnecessary comparisons

Practice

computePrefixFunction(pattern):
m = length of pattern
prefixFunction[m]
prefixFunction[0] = 0
k = 0
for q from 2 to m:
while k > 0 and pattern[k+1] ≠ pattern[q]:
k = prefixFunction[k]
if pattern[k+1] == pattern[q]:
k = k + 1
prefixFunction[q] = k
return prefixFunction

searchKMP(text, pattern):
n = length of text
m = length of pattern
prefixFunction = computePrefixFunction(pattern)
q = 0
for i from 1 to n:
while q > 0 and pattern[q+1] ≠ text[i]:
q = prefixFunction[q]
if pattern[q+1] == text[i]:
q = q + 1
if q == m:
print "Pattern occurs with shift" i - m
q = prefixFunction[q]