为了账号安全,请及时绑定邮箱和手机立即绑定

KMP算法如何构造DFA?

KMP算法如何构造DFA?

呼啦一阵风 2019-03-14 14:15:57
《算法4》书中关于KMP算法的完整试下如下:public class KMP{    private String pat ;    private int[][] dfa ;    public KMP(String pat)    {        this.pat = pat ;        int M = pat.length() ;        int R = 256 ;        dfa = new int[R][M] ;        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] ;        }    }    public int search(String txt)    {        int i , j , N=txt.length() , M = pat.length() ;        for(i=0 , j=0 ; i<N && j<M ; i++)        {            j = dfa[txt.charAt(i)][j] ;        }        if(j == M)            return i - M ;  //找到匹配        else            return N ; //表示为匹配    }}我唯一不理解的地方时在构造dfa数组时x的计算方法, 为什么X = dfa[pat.charAt(j)][X]?
查看完整描述

1 回答

?
翻翻过去那场雪

TA贡献2065条经验 获得超14个赞

<<算法>>上讲KMP我感觉将复杂了,我根本没看懂。
其实根本不用二维数组,建议你看看CSDN上一个叫July的人写的博文,讲的很清楚。

查看完整回答
反对 回复 2019-04-17
  • 1 回答
  • 0 关注
  • 570 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信