前几天看了关于KMP算法的资料,一直不知道这个DFA怎么画,后来搞明白了,今天有时间就把自己理解的写出来以供大家参考。

看这个需要你对KMP有点了解,我只讲怎么画这个DAF图,其它基础知识你们再去看资料了。

KMP算法之DFA画法,非常简单


我就直接先把算法第四章的图搬上来了,然后开始一步步说怎么画


第一步:

因为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

第五步:

现在有5个字母了,就把中间的B,A,B和第0个字母进行比较,先用B和第0个字母比较,因为第0个字母是A,所以失败。再用A和第0个字母比较,显然比较成功。继续用B和第1个字母比较,因为第1个字母是B,比较成功,所以就把j=2的状态复制过来得到3  0  0,然后又因为A是匹配的可以进入到下一个状态,所以就把A的那一个更新为5,结果就是 5  0  0

第六步:

现在有6个字母了,就把中间的B,A,B,A和第0个字母进行比较,先用B和第0个字母比较,因为第0个字母是A,所以失败。再用A和第0个字母比较,显然比较成功。继续用B和第1个字母比较,因为第1个字母是B,比较成功。继续用A和第2个字母比较,因为第2个字母是A,比较成功,所以就把j=3的状态复制过来得到1  4  0,然后又因为C是匹配的可以进入到下一个状态,所以就把C的那一个更新为6,结果就是 1  4  6


整个过程就结束了,如果我有说错的希望大牛可以批评指正KMP算法之DFA画法,非常简单KMP算法之DFA画法,非常简单KMP算法之DFA画法,非常简单,有不明白的可以评论,谢谢大家。第一次发帖真刺激!KMP算法之DFA画法,非常简单KMP算法之DFA画法,非常简单KMP算法之DFA画法,非常简单

相关文章:

  • 2021-07-02
  • 2021-10-04
  • 2021-10-11
  • 2022-12-23
  • 2021-09-04
  • 2022-12-23
  • 2021-05-15
  • 2021-11-20
猜你喜欢
  • 2021-08-06
  • 2022-01-16
  • 2021-07-12
  • 2022-01-22
  • 2022-02-06
  • 2022-12-23
  • 2022-02-18
相关资源
相似解决方案