本章学习了串,数组以及稀疏矩阵。其中老师主要讲解了串的模式匹配(在主串S中查找与模式T相匹配的子串)的两种算法,BF算法和KMP算法。这次实践作业与两种算法密切相关。
BF算法:将i,j定位于主串和子串的0下标,若S[i]==T[j], i++,j++,继续匹配下一个字符;若S[i]!=T[j],指针后退重新开始匹配,从主串的下一个字符(i=i-j+1)起再重新和模式T的第一个字符(j=0)比较....
优点:易懂
缺点:数据量较大的情况下运行效率低,超时。平均时间复杂度为O(m*n)(m为主串长度,n为子串长度)--此次PTA作业运行超时
int BF(string &S,string &T,int pos)
{//字符串匹配的BF算法函数
int i=pos-1;
int j=0;
while(i<S.length( ) && j<T.length( ))
{//若S,T字符相等,继续比较后继字符
if(S[i]==T[j]) { i++; j++; }
//否则返回主串的下一个字符与子串的第一个字符继续匹配
else { i=i-j+1; j=0;}
}
if (j==T.length( ))
{
return i-j+1;//匹配成功
}
else return 0;
}
KMP算法的不同之处是若匹配失败,指针i不变,指针j退回到next[j]所指的位置上重新比较。而next[j]就是我们需要探索的,它是根据主串的最大长度的相同前缀后缀决定。目前对于这个算法还是很恍惚...继续学习。
感觉自己上机时间挺少的,打代码的能力也挺差的。多花些时间加强。
学习KMP参考:https://www.cnblogs.com/ZuoAndFutureGirl/p/9028287.html
标签:字符,BF,主串,++,int,算法,小结,第四章 来源: https://www.cnblogs.com/liuyuany/p/10705372.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。