Mi riferisco al profilo dell'algoritmo Knuth-Morris-Pratt (KMP) per la sottostringa di ricerca nel libro "Algoritmi" di Sedgewick (4 ° ed.).DFA costruzione nell'algoritmo di Knuth-Morris-Pratt
L'algoritmo KMP utilizza un backup nella ricerca di sottostringa basata su un automa finito deterministico (DFA). Capisco come DFA entra l'algoritmo, ma non capisco come costruire DFA, che è fatto dalla seguente frammento di codice:
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];
}
dove M
è la lunghezza del pattern pat
e R
la dimensione dell'alfabeto. La funzione charAt()
restituisce il valore intero del carattere nella rispettiva posizione.
Qualcuno può spiegare in che modo questa parte di codice costruisce un dfa? Mi sono perso nel significato intuitivo effettivo del ciclo interiore.
Il dfa è una tabella di stato con collegamenti di errore. Vedi questa domanda: http: //stackoverflow.com/questions/23260938/knuth-morris-pratt-fail-table? Rq = 1 – Bytemain