天津市大学软件学院
实验报告
课程名称:串匹配算法实验
姓名: *** 学号:********** 班级: 业务1114
串匹配问题
一、实验题目:
给定一个主串,在该主串中查找并定位任意给定字符串。 二、实验目的:
(1)深刻理解并掌握蛮力法的设计思想; (2)提高应用蛮力法设计算法的技能;
(3)理解这样一个观点:用蛮力法设计的算法,一般来说,经过适度的努力后,都可以对算法的第一个版本进行一定程度的改良,改进其时间性能。 三、实验分析:
串匹配问题的BF算法
1 在串S中和串T中设比较的下标i=1和j=1;
2 循环直到S中所剩字符个数小于T的长度或T中所有字符均比较完 2.1 k=i
2.2 如果S[i]=T[j],则比较S和T的下一字符,否则 2.2 将i和j回溯(i=k+1; j=1)
3 如果T中所有字符均比较完,则匹配成功,返回k 否则匹配失败,返回0
时间复杂度:设匹配成功发生在si处,则在i-1趟不成功的匹配中比较了(i-1)m次,第i趟成功匹配共比较了m次,所以总共比较了im次,因此平均比较次数是:
pi(im)=
(im)=
一般情况下,m< #include cout<<\"请输入主串并且以0和回车结束\"< cin>>s[m]; if(s[m]=='0') { s[m]='\\0'; break; } } cout<<\"您输入的主串为:\"; for(int o=0;o t[n]='\\0'; break; } } cout<<\"您输入的子串为:\"; for(int a=0;a for(i=0;i for(j=0;j if(s[i]==t[j]) { if(j==strlen(t)-1) { cout<<\"找到了相同的字串:\"; cout<<\"位置在主串的第\"< j=0; break; } } i=k+1; if(y==1) break; } if(i==strlen(s)-strlen(t)+1&&j!=strlen(t)-1) { cout<<\"没有找到可以匹配的子串\"< 查找到了子串 没有查找到子串 KMP算法 程序代码 #include //前缀函数值,用于KMP算法 int GETNEXT(char t[],int b) { int NEXT[10]; NEXT[0]=-1; int j,k; j=0; k=-1; while(j cout<<\"请输入主串并且以0和回车结束\"< } } cout<<\"您输入的子串为:\"; for(int a=0;a 程序执行结果: 查找到子串 没有查到子串 因篇幅问题不能全部显示,请点此查看更多更全内容cout<