【发布时间】:2015-08-13 10:01:15
【问题描述】:
我指的是 Sedgewick 的“算法”一书中(第 4 版)中用于子串搜索的 Knuth-Morris-Pratt (KMP) 算法的大纲。
KMP 算法在基于确定性有限自动机 (DFA) 的子字符串搜索中使用备份。我了解 DFA 是如何进入算法的,但是我不了解如何构造 DFA,这是通过以下代码 sn-p 完成的:
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 吗?我迷失在内部 for 循环的实际直观含义中。
【问题讨论】:
-
dfa 是一个带有失败链接的状态表。看到这个问题:stackoverflow.com/questions/23260938/…
标签: string algorithm substring dfa knuth-morris-pratt