Hahmontunnistus voidaan suorittaa ajassa yksinkertaista
äärellistä automaattia käyttävällä algoritmilla.
Ideana on, että tekstissä ei siirrytä koskaan taaksepäin.
Tähän päästään huomaamalla, että jos
,
tiedetään kuitenkin, että
.
Oletetaan, että meillä on käytössä jonon
(jono,
jonka tiedetään täsmäävän) pisimmän alkuosan pituus
.
Tämä pisin alkuosa on myös
jonon
loppuosa.
Toisin sanoen
ja
.
Vertailua voidaan nyt jatkaa kokeilemalla, onko
,
koska
:n vasemmalla puolella tiedetään olevan
täsmäystä.
Algoritmin toteutuksessa muodostetaan aluksi -tilainen
äärellinen automaatti
(kuva 1),
joka
sisältää tilat
.
Automaatin alkutila on
ja lopputila
.
Automaatissa on jokaisella hahmon merkillä
tilasiirtymä
tilasta
tilaan
. Lisäksi jokaisesta tilasta
on
korjaussiirtymä tilaan
.
Algoritmi suoritetaan selaamalla tekstiä merkki
kerrallaan seuraavasti:
Käytännön toteutuksessa ei muodosteta varsinaista automaattia, vaan
käytetään indeksimuuttujaa , joka vastaa automaatin
tilaa
. Lisäksi käytössä on taulukko
, jonka alkio
sisältää uuden arvon
:lle (korjaussiirtymän jälkeisen tilan
numeron), mikäli
.
Automaatin
muodostamisen aikavaatimus on
. Tekstin selaamisen aikavaatimus
taas on
. Näin ollen KMP-algoritmin kokonaisaikavaatimus
on
.