我这里指的是克努特莫里斯 - 普拉特(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