zoukankan      html  css  js  c++  java
  • KMP模式匹配算法

    KMP模式匹配算法

     

    相信很多人对于这个还有点不了解,或者说是不懂,下面,通过一道题,来解决软考中的这个问题!

     

    正题:

    aaabaaa,其next函数值为多少?

    对于这个问题,我们应该怎么做呢?

    1、整理:

    p1=a,
    p2=a,
    p3=a,
    p4=b,
    p5=a,
    p6=a,
    p7=a

    2、计算:

    1、当j=1的时候,由上面公式可以得到,next(1)=0;


    2、当j=2的时候,计算1<k<j,因为j=2,所以1<k<2,在这种情况下,k是不存在的,所以属于其他情况,      所以,next(2)=1;其实说个更加简单的就是,无论什么情况,next(1)=0;next(2)=1;


    3、当j=3的时候,计算1<k<j,所以,k=2。然后根据右边式子来判断符合不符合。当k=2,左边是p1,右      边是p2,所以‘p1’=‘p2’,有1我们知道,p1=a,p2=a,所以满足条件,所以k=2,所以              next(3)=2;


    4、当j=4的时候,计算1<k<j,所以,k可以为2,也可以为3。当k=2时,判定左边为p1,右边为p3,a=a,所    以,k=2满足条件;当k=3时,左边为p1p2,右边为p2p3,也满足条件,所以根据max(2,3)得,        next(4)=3;


    5、当j=5,计算得,k=2、3、4,然后当k=2时,判定左边式子为p1,右边式子为p4,不满足;当k=3时,判    定左边式子为p1p2,右边式子为p3p4,不满足;当k=4时,判定左边式子为:p1p2p3,右边式子为:      p2p3p4,不满足;所以,这种情况属于其他情况,所以next(5)=1;


    6、当j=6,计算得到k=2、3、4、5。当k=2时,判定左边式子为:p1,右边式子为:p5,满足条件;当k=3    时,判定左边式子为p1p2,右边式子为p4p5,不满足;当p=4、5时,依次向上判定,皆为不满足。所      以next(6)=2;


    7、当j=7,计算得到k=2、3、4、5、6.以此判定每个k值,得到,当k=2,k=3时满足条件,所以根据max函    数,得到next(7)=3;


    3、结果:

        对上面的next函数值进行汇总,得到,aaabaaa的next函数值为0123123.


    4、总结:

         其实很简单,也不麻烦,如果自己做得多了,找到了核心算法思想,直接数就可以了,so easy!

     

    如果大家有兴趣,可以做一下eefegefee,结果是0121212123

     

  • 相关阅读:
    su命令Permission denied
    Linux网络故障
    nsswitch
    route命令
    GCC编译器原理(三)------编译原理三:编译过程(3)---编译之汇编以及静态链接【1】
    GCC编译器原理(三)------编译原理三:编译过程(2-2)---编译之语法分析
    GCC编译器原理(三)------编译原理三:编译过程(2-1)---编译之词法分析
    GCC编译器原理(三)------编译原理三:编译过程---预处理
    GCC编译器原理(二)------编译原理一:ELF文件(3)
    GCC编译器原理(二)------编译原理一:ELF文件(2)
  • 原文地址:https://www.cnblogs.com/DoubleEggs/p/5747174.html
Copyright © 2011-2022 走看看