KMP算法复杂度与简单比较.doc

KMP算法复杂度与简单比较.doc

ID:62044957

大小:160.50 KB

页数:4页

时间:2021-04-16

KMP算法复杂度与简单比较.doc_第1页
KMP算法复杂度与简单比较.doc_第2页
KMP算法复杂度与简单比较.doc_第3页
KMP算法复杂度与简单比较.doc_第4页
资源描述:

《KMP算法复杂度与简单比较.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、个人收集整理勿做商业用途  3110008344 王扬旭 信计二班实现字符串匹配的普通匹配算法和KMP算法#include<iostream>#includeusingnamespace std;#defineMAXL255//可由用户定义的字符串的长度为255(数值自己设置)typedefunsignedcharSString[MAXL +1];intIndex(SString S,SStringT,intpos){         //按照普通匹配查找方式查找模式串ﻩinti=pos;ﻩintj=1,k=1;while(i<=S[0]&&j<=T[0]){ﻩif

2、(S[i]==T[j]){ﻩ++i;ﻩﻩ++j;ﻩ}      //继续比较后继字符ﻩelseﻩﻩ{ﻩﻩi=i-j+2;j=1;ﻩ}     //指针后退重新开始匹配ﻩk++;ﻩ}ﻩcout<<"普通匹配查找的时间复杂度为"<T[0])ﻩﻩreturni-T[0];    //匹配成功ﻩelsereturn0;}//Indexvoidget_next(SStringT,intnext[]){          //求KMP算法中的next函数值,并存入数组next[] inti=1;ﻩnext[1]=0;intj=0;ﻩwhile(i

3、j==0|

4、T[i]==T[j]){ ++i;ﻩﻩ++j;ﻩﻩﻩnext[i]=j;ﻩ}ﻩelse j=next[j];ﻩ }个人收集整理勿做商业用途}//get_nextintIndex_KMP(SStringS,SStringT,int pos){             //KMP算法的实现过程intnext[MAXL];ﻩinti=pos;ﻩintj=1,k=1;while(i<=S[0]&&j<=T[0]){ﻩﻩif(j==0

5、

6、S[i]==T[j]){ﻩ++i;ﻩ++j;ﻩ}         //继续比较后继字符ﻩelse{ﻩﻩget_next(T,next);ﻩj=nex

7、t[j];ﻩﻩ}         //模式串向右移动k++;}ﻩcout<<"KMP匹配查找的时间复杂度为"<(int)T[0])returni-T[0];       //匹配成功ﻩelsereturn0;}//Index_KMPvoidmain(){ﻩSStringT,S;intp,i,j,k1,k2;p=1;ﻩcout<<"请输入字符串匹配主串:"<<endl;cin>>S;ﻩcout<<"请输入字符串匹配模式串:"<

8、j++) {ﻩT[0]=j; }       //存储字符串 ﻩcout<<"普通算法:"<

9、qqqqqqqqqqqqqqqqqqqqqvbn’;运行界面如下:小结:得到普通匹配算法的时间复杂度为440,而KMP算法的时间复杂度为66,显然在匹配算法中,KMP算法优于普通算法,节省了时间以及资源。(2)当输入主串为S=’asdfghjlklzxcvbnmqwertyuiop’;模式串为T=qwertyui’运行结果如下:小结:当匹配串重复出现的字符不多时,KMP算法的优势无法明显体现出来,KMP的复杂度不一定比普通匹配的小。(3)还有一个问题就是当我匹配模式串只输入一个字符的话系统会出现问题普通算法的可以做但是KMP的就出错了。个人收集整理勿做商业用途(4)对于T(0)我是这样

10、理解的1.//生成一个其值等于串常量strs的串T2.voidStrAssign(SString&T,char *strs)3.{4.inti;5.T[0]=0;//0号单元存储字串长度6.for(i=0;strs[i];i++) //用数组strs给串T赋值7.T[i+1] =strs[i];8.T[0] = i;9.}但是在上面的程序上我看书里面可以直接拿来用,就没有重新去对T进行赋值了。问题出现在get_next()

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。