數據結構求next、nextval數組算法和KMP算法


求next數組的代碼如下:

 1 int get_next(String T,int &next[])
 2 {    //求next數組
 3     int i=1,j=0;
 4     next[1]=0;
 5     while(i<T.length)
 6     {
 7         if(j==0||T.ch[i]==T.ch[j])
 8         {
 9             ++i;++j;
10             next[i]=j;   //若pi=pj,則next[j+1]=next[j]+1
11         }
12         else
13             j=next[j];  //否則令j=next[j],循環繼續
14     }
15 }

求nextval數組的代碼如下:

 1 int get_nextval(String T,int &nextval[ ]){
 2 //求模式串T的nextval數組。
 3     int i=1,j=0; nextval[1]=0; 
 4     while(i<T.length){
 5         if(j==0||T.ch[i]==T.ch[j]){
 6             ++i;++j;
 7             if (T.ch[i]!=T.ch[j]) nextval[i]=j;
 8             else nextval[i]=nextval[j];
 9         }
10         else j=nextval[j];
11     }    
12 }//get_nextval

kmp算法代碼如下:

 1 int Index_KMP(String S,String T,int next[])
 2 {
 3     int i=1,j=1;
 4     while(i<=S.length&&j<=T.length)
 5     {
 6         if(j==0||S.ch[i]==T.ch[j])
 7         {
 8             ++i,++j;   //繼續比較后續字符
 9         }
10         else
11             j=next[j];  //模式串右移
12     }
13     if(j>T.length)
14         return i-T.length;   //匹配成功
15     else
16         return 0;   //匹配失敗
17 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM