文档详情

简单匹配算法和KMP算法

hy****d
实名认证
店铺
DOC
58KB
约4页
文档ID:157298059
简单匹配算法和KMP算法_第1页
1/4

  实现字符串匹配的简单匹配算法和KMP算法,并且使用相同的比较字符串重复比较至少5000次,计算两者的时间差别实验要求:完成实验内容要求,编写程序实现提交报告,报告分三部分内容:1) 自己是怎么做的?遇到什么问题,怎样解决的?2) 用了哪些数据,得到什么结果?程序结果是不是跟你想的一样?为什么不一样?3) 还有哪些值得改进或者不懂的?一、 实验方案源程序的头文件定义为:#include 〈stdio.h〉#include <stdlib.h>#include #include <malloch〉又作出以下宏定义方便编程:#define OVERFLOW —2#define OK 1#define MAXSTRLEN 255源程序中的各个函数原型如下所示:typedef  char SString[MAXSTRLEN+1];int Index(SString S,SString T,int pos){              //按照普通匹配查找方式查找模式串ﻩint i=pos; int j=1,k=0; while(i<=(int)S[0] && j<=(int)T[0])ﻩ{ if(S[i]==T[j])ﻩﻩ{ ++i;ﻩ ++j; } ﻩelse ﻩ{ﻩﻩ i=i-j+2; ﻩ j=1; }ﻩ ﻩk++;ﻩ} printf("普通匹配查找的时间复杂度为%d。

\n”,k);ﻩif(j〉T[0]) ﻩ return i—T[0]; else return 0;}//Indexvoid get_next(SString T,int next[]){             //求KMP算法中的next函数值,并存入数组next[] int i=1; next[1]=0;ﻩ int j=0;ﻩ while(i〈(int)T[0])ﻩ {ﻩﻩ if(j==0 || T[i]==T[j])ﻩ { ﻩﻩ ++i;ﻩ ﻩ ++j; ﻩ if(T[i]!=T[j]) next[i]=j; ﻩ else next[i]=next[j]; ﻩ }  else j=next[j]; }}//nextint Index_KMP(SString S,SString T,int pos){               //KMP算法的实现过程 int next[MAXSTRLEN];ﻩint i=pos; int j=1,k=0;ﻩwhile(i<=(int)S[0] && j〈=(int)T[0])ﻩ{ ﻩif(j==0 || S[i]==T[j]) { ﻩﻩ++i; ++j;ﻩ }ﻩﻩelseﻩ {ﻩ get_next(T,next); ﻩﻩj=next[j]; ﻩ} k++; } printf("KMP匹配查找的时间复杂度为%d。

\n",k);ﻩif(j>(int)T[0])ﻩ return i—T[0]; else return 0;}//Index_KMP源程序中主函数如下:void main(){ SString T,S;ﻩint p,i,j,k1,k2; p=1;ﻩi=1; j=1;ﻩprintf(”请输入字符串匹配主串:\n”); gets(&S[1]);ﻩprintf("请输入字符串匹配模式串:\n");ﻩgets(&T[1]); for(i=1;S[i]!=NULL;i++)ﻩ{ ﻩS[0]=(int)(i); } printf("字符串匹配中主串:\n”); puts(&S[1]);ﻩfor(j=1;T[j]!=NULL;j++)ﻩ{ﻩ T[0]=(int)(j); } printf("\n字符串匹配中模式串:\n");ﻩputs(&T[1]); ﻩprintf("-————————-普通算法——-——---————\n”);ﻩk1=Index(S,T,p);ﻩprintf(”普通匹配算法得模式串位置:%d\n\n",k1);ﻩprintf("———————---KMP算法———————-——-—\n”);ﻩk2=Index_KMP(S,T,p); printf("KMP算法得模式串位置:%d\n",k2);}二、 实验结果和数据处理(1)程序运行时,输入主串为S=’qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqws ‘;模式串为T='qqqqqqqqqqqqqqqqqqqqws';运行界面如下:小结:得到普通匹配算法的时间复杂度为3793,而KMP算法的时间复杂度为174,显然在匹配算法中,KMP算法优于普通算法,节省了时间以及资源。

2)当输入主串为S=’A STRING SEARCHING EXAMPLE CONSISTING OF SIMPLE TEXT';模式串为T=’STING’运行结果如下:小结:当主串重复出现的字符不多时,KMP算法的优势无法明显体现出来4 / 4。

下载提示
相关文档
正为您匹配相似的精品文档