《数据结构与算法》第四章串String概要1.ppt

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《数据结构与算法》第四章串String概要1

T j next[j]=k k-1 T j 若pk≠pj,设next[k]=h k-1 next[j+1]=h+1=next[k]+1 T j 若pnext[k] =pj k-1 h-1 j next 1 0 2 1 3 1 4 1 5 1 6 2 7 2 8 3 9 4 10 2 例:T=‘abcdaabcab’ void get_next(SString T,int next[]) { //求模式串T的next函数值并存如数组next j=1; next[j]=0; k=0; while(jT[0]) if(k==0||T[j]==T[k]) {++j; ++k; next[j]=k;} else k=next[k]; }//get_next int Index_KMP(SString S,SString T,int pos) { //利用模式T的 next函数求T在主串S中第pos个字符后的位置 //的 KMP算法,其中T非空, 1≤pos≤StrLength(S) i=pos; j=1; while(i=S[0]j=T[0]) if(j==0 || S[i]==T[j] ) {++i; ++j; } else j=next[j]; if(jT[0]) return i-T[0]; else return 0; }//Index_KMP 由于指针i无须回溯,比较次数仅为n,即使加上计算next[j]时所用的比较次数m,比较总次数也仅为n+m=O(n+m),大大快于穷举算法。 a b a c a a c a b c a b a c a b a a a b a c a b 1 2 3 4 5 6 a b a c a b 7 a b a c a b 8 9 10 11 12 a b a c a b 13 a b a c a b 14 15 16 17 18 19 2 1 2 1 1 0 Next b a c a b a P 6 5 4 3 2 1 j a a a a b a a a a a a a a a a b a a a a a b 1 2 3 4 5 6 a a a a a b 5 4 3 2 1 0 Next b a a a a a P 6 5 4 3 2 1 j a a a a a b 7 a a a a a b 8 a a a a a b 9 ......Si-j Si-j+1 Si-j+2 Si-k+2 ... Si-k Si-k+1 ... ... Si p1 p2 pj-k pj-k+1 ... pj-2 pj-1 p1 p2 pk ... pk-2 pk-1 Si-2 Si-1 pj-k+2 pj ≠ || || || || || || || || || || || || 不需要比较 p1 p2 ... pnext[k] ........ 修正next 5 0 0 0 0 0 nextval b a a a a a T 6 5 4 3 2 1 j void get_nextval(SString T,int nextval[]) { //求模式串T的next函数修正值并存如数组nextval j=1; nextval[j]=0; k=0; while(jT[0]) if(k==0||T[j]==T[k]) {++j; ++k; if(T[j]!=T[k]) nextval[j]=k; else nextval[j]=nextval[k]; } else k=nextval[k]; }//get_nextval int index(char s[ ], char t[ ],int pos) { int i, j, k; for(i =pos-1; s[i] != ‘\0’; i++){ for(j=i,k=0;t[k]!=‘\0’s[j]==t[k]; j++,k++); if(t[k] == ‘\0’) return ( i+1); } return ( 0); } * i1+j-1=i2 i1=i2-j+1 i1+1=i2

文档评论(0)

yaocen + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档