前几天看了关于KMP算法的资料,一直不知道这个DFA怎么画,后来搞明白了,今天有时间就把自己理解的写出来以供大家参考。
看这个需要你对KMP有点了解,我只讲怎么画这个DAF图,其它基础知识你们再去看资料了。
我就直接先把算法第四章的图搬上来了,然后开始一步步说怎么画
第一步:
因为A匹配所以若果是A就可以到状态1,B,C就还是状态0。那么结果就是1 0 0;
第二步:
因为就两个字母A和B,中间没有了,所以就复制j=0时的状态为 1 0 0,然后又因为B是匹配的可以进入到下一个状态,所以就把B的那一个更新为2,结果就是 1 2 0
第三步:
因为有三个字母了,就把第1个字母B和第0个字母匹配,因为第0个字母是A,匹配失败,所以还是把j=0的状态复制过来得到 1 0 0, 然后又因为A是匹配的可以进入到下一个状态,所以就把A的那一个更新为3,结果就是 3 0 0
第四步:
现在就是有四个字母了,就把中间的B,A和第0个字母进行比较,先用B和第0个字母比较,因为第0个字母是A,所以失败。再用A和第0个字母比较,显然比较成功,那么就进入状态1,因为状态是从0开始的,现在就把j=1的值复制过来得到1 2 0,然后又因为B是匹配的可以进入到下一个状态,所以就把B的那一个更新为4,结果就是 1 4 0
<