我這裏指的是克努特莫里斯 - 普拉特(KMP)算法在塞奇威克的書「算法」字符串搜索的輪廓(第四版)。DFA建設克努特莫里斯普拉特算法
的KMP算法使用基於確定性有限自動機(DFA)中字符串搜索備份。據我所知,DFA是如何進入的算法,但我不明白如何構建的 DFA,這是由下面的代碼片段完成:
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];
}
其中M
是模式的長度pat
和R
字母表的大小。 charAt()
函數返回相應位置上字符的整數值。
有人可以用什麼方式這段代碼構造一個DFA解釋一下嗎?我迷失在內循環的實際直觀意義中。
dfa是一個包含故障鏈接的狀態表。看到這個問題:http://stackoverflow.com/questions/23260938/knuth-morris-pratt-fail-table?rq = 1 – Bytemain