亚洲一区亚洲二区亚洲三区,国产成人高清在线,久久久精品成人免费看,999久久久免费精品国产牛牛,青草视频在线观看完整版,狠狠夜色午夜久久综合热91,日韩精品视频在线免费观看

KPM算法心得體會

時間:2023-04-26 00:30:33 心得體會 我要投稿
  • 相關(guān)推薦

KPM算法心得體會

next函數(shù)求法(目前只能死記) 0  1  2  3  4 a  b  a  b  c  next  -1  0  0  1  2 過程: 第0位,next[0]=-1 第1位,next[1]=0 第2位,b!=p[0]=a => next[2]=next[next[1]]=-1+1=0 第3位,a==p[0]=a => next[3]=0+1=1 第4位,b==p[1]=b => next[3]=1+1=2 技巧:算哪位就看前一位 -------------------------------------------- next優(yōu)化過程   0  1  2 3  4   a  b  a b  c   next  -1  0  0 1  2 next_adv  -1  0  -1  0  2 第1位,b!=p[0]=a =>  next_adv[1]=next[1]=0,不變 第2位,a==p[0]=a =>  next_adv[2]=next[0]=-1 第3位,b==p[1]=b =>  next_adv[3]=next[1]=0 第4位,c!=p[2]=a =>  next_adv[1]=next[1]=2,不變 技巧:比較p[i]和p[next[i]],不一樣,不變,一樣,賦值 ---------------------------------------------- KPM匹配過程 aaaaabababcaaa ab  ab   ab ab   ababc   ababc 產(chǎn)生匹配 ab   ab --------------------------------------------- 源代碼如下:   #include <iostream> #include <cstring> using namespace std; void getNext(const char *p,int next[])//多算一位的next算法 {   int j=-1,i=0;   next[0]=-1;   int len=strlen(p);   while(i<=len)   {   if(j==-1||p[i]==p[j])   {   i++;   j++; //next[i]=j;//以下是改進的算法   if(p[i]!=p[j])  next[i]=j;   else next[i]=next[j];   }   else j=next[j];   } } //返回匹配的首位置 int kpm_search( char *t,char *p,int next[]) {   int j=0,i=0;   int len_t=strlen(t);   int len_p=strlen(p); while(i<len_t)   {   if(j==-1||t[i]==p[j])   {   i++;   j++;   }   else j=next[j];  }   if(j>=len_p) { //j=0;重置j可以繼續(xù)下一個查找   return i-len_p;   } return -1;  } int main() {   char p[]=ababc;   char t[]=aaaaabababcaaa;   int len=strlen(p);   int next[len+1];   get_nextval(p,next);   for(int i=0; i<len; i++) cout<<next[i]<<,;   cout<<endl;   cout<<kmp_match(t,p,next,0)<<endl;   return 0; }

【KPM算法心得體會】相關(guān)文章:

數(shù)學算法04-28

算法崗位職責03-15

手指快算法簡介04-28

算理和算法04-28

乘法的簡便算法教案04-28

算理與算法的關(guān)系-我對算理與算法統(tǒng)一的感悟04-28

算理與算法的有效結(jié)合04-28

算法優(yōu)化要五問04-28

算法初步的教學策略04-28

算理和算法的關(guān)系04-28