天天看點

KMP算法的next求解

題目:

        在字元串的KMP模式比對算法中,需要求解模式串p的next函數值,其定義如下所示。若模式串p為"aaabaaa",則其next函數值為0123123。

KMP算法的next求解

 解析:

        當j=1時    next[1]=0;

        當j=2時    找不到k    next[2]=1;

        當j=3時    k=2    p1=p2    a=a    next[3]=2;

        當j=4時    k=2,3

                        當k=2時    p1=p3    a=a    2成立;

                        當k=3時    p1p2=p2p3    aa=aa    3成立;

                        next[4]=3;

        當j=5時    k=2,3,4

                        當k=2時    p1!=p4    a!=b    2不成立;

                        當k=3時    p1p2!=p3p4    aa!=ab    3不成立;

                        當k=4時    p1p2p3!=p2p3p4    aaa!=aab    4不成立;

                        next[5]=1;

        當j=6時    k=2,3,4,5

                        當k=2時    p1=p5    a=a    2成立;

                        當k=3時    p1p2!=p4p5    aa!=ba    3不成立;

                        當k=4時    p1p2p3!=p3p4p5    aaa!=aba    4不成立;

                        當k=5時    p1p2p3p4!=p2p3p4p5    aaab!=aaba    5不成立;

                        next[6]=2;

        當j=7時    k=2,3,4,5,6

                        當k=2時    p1=p6    a=a    2成立;

                        當k=3時    p1p2=p5p6    aa=aa    3成立;

                        當k=4時    p1p2p3!=p4p5p6    aaa!=baa    4不成立;

                        當k=5時    p1p2p3p4!=p3p4p5p6    aaab!=abaa    5不成立;

                        當k=6時    p1p2p3p4p5!=p2p3p4p5p6    aaaba!=aabaa    6不成立;

                        next[7]=3;

        next的函數值為0123123。

繼續閱讀