COMPUTE-PREFIX-FUNCTION'(P, m) π = COMPUTE-PREFIX-FUNCTION(P, m) Let π'[1 : m - 1] be a new array for q = 1 to m - 1 if π[q] == 0 π'[q] = 0 else if π[q] != 0 and P[π[q] + 1] == P[q + 1] π'[q] = π'[π[q]] else π'[q] = π[q] return π, π'
KMP-MATCHER'(T, P, n, m) π, π' = COMPUTE-PREFIX-FUNCTION(P, m) q = 0 for i = 1 to n while q > 0 and P[q + 1] != T[i] q = π[q] if P[q + 1] == T[i] q = q + 1 if q == m print "Pattern occurs with shift" i – m q = π[q]
IS-CYCLIC-ROTATION(T, T', m) π = COMPUTE-PREFIX-FUNCTION(P, m) q = 0 S = TT for i = 1 to m + m while q > 0 and T[q + 1] != S[i] q = π[q] if T[q + 1] == S[i] q = q + 1 if i > m and q == m print "T' is T with shift" i – m q = π[q]
COMPUTE-TRANSITION-FUNCTION-KMP(P, ∑, m) π = COMPUTE-PREFIX-FUNCTION(P, m) for each character a ∈ ∑ δ(0, a) = 0 δ(0, P[1]) = 1 for q = 1 to m for each character a ∈ ∑ if q < m and P[q + 1] == a δ(q, a) = q + 1 else δ(q, a) = δ(π[q], a) return δ