[LIB]: Knuth-Morris-Pratt textsearch algorithm
authorThomas Graf <tgraf@suug.ch>
Fri, 24 Jun 2005 03:58:37 +0000 (20:58 -0700)
committerDavid S. Miller <davem@davemloft.net>
Fri, 24 Jun 2005 03:58:37 +0000 (20:58 -0700)
commitdf3fb93ad9ec0b20c785c0ad82d42d159a1af272
treee29ba25f55cb77e24310999a949b433e98d7656e
parent2de4ff7bd658c97fb357efa3095a509674dacb5a
[LIB]: Knuth-Morris-Pratt textsearch algorithm

Implements a linear-time string-matching algorithm due to Knuth,
Morris, and Pratt [1]. Their algorithm avoids the explicit
computation of the transition function DELTA altogether. Its
matching time is O(n), for n being length(text), using just an
auxiliary function PI[1..m], for m being length(pattern),
precomputed from the pattern in time O(m). The array PI allows
the transition function DELTA to be computed efficiently
"on the fly" as needed. Roughly speaking, for any state
"q" = 0,1,...,m and any character "a" in SIGMA, the value
PI["q"] contains the information that is independent of "a" and
is needed to compute DELTA("q", "a") [2]. Since the array PI
has only m entries, whereas DELTA has O(m|SIGMA|) entries, we
save a factor of |SIGMA| in the preprocessing time by computing
PI rather than DELTA.

[1] Cormen, Leiserson, Rivest, Stein
    Introdcution to Algorithms, 2nd Edition, MIT Press
[2] See finite automation theory

Signed-off-by: Thomas Graf <tgraf@suug.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
lib/Kconfig
lib/Makefile
lib/ts_kmp.c [new file with mode: 0644]