Ich beziehe mich auf den Entwurf des Knuth-Morris-Pratt (KMP) -Algorithmus für die Substring-Suche in Sedgewicks Buch "Algorithms" (4. Aufl.).DFA-Konstruktion im Knuth-Morris-Pratt-Algorithmus
Der KMP-Algorithmus verwendet eine Sicherung in der Substring-Suche basierend auf einem deterministischen endlichen Automaten (DFA). Ich verstehe, wie das EDA den Algorithmus eintritt, aber ich verstehe nicht, wie man konstruieren das EDA, die durch den folgenden Code-Schnipsel getan wird:
dfa[pat.charAt(0)][0] = 1;
for (int X = 0; j = 1; j< M; j++) {
for (int c = 0; c < R; c++) {
dfa[c][j] = dfa[c][X];
}
dfa[pat.charAt(j)][j] = j+1;
X = dfa[pat.charAt(j)][X];
}
wo M
die die Länge des Musters ist pat
und R
die Größe des Alphabets. Die Funktion charAt()
gibt den ganzzahligen Wert des Zeichens an der entsprechenden Position zurück.
Kann jemand erklären, auf welche Art und Weise dieses Stück Code ein dfa konstruiert? Ich bin in der eigentlichen intuitiven Bedeutung der inneren For-Schleife verloren.
Die dfa ist eine Statustabelle mit Fail-Links. Siehe diese Frage: http: //stackoverflow.com/questions/23260938/knuth-morris-pratt-fail-table? Rq = 1 – Bytemain