字符串模式匹配---BF算法

字符串模式匹配---BF算法

ID:37340476

大小:143.50 KB

页数:20页

时间:2019-05-22

字符串模式匹配---BF算法_第1页
字符串模式匹配---BF算法_第2页
字符串模式匹配---BF算法_第3页
字符串模式匹配---BF算法_第4页
字符串模式匹配---BF算法_第5页
资源描述:

《字符串模式匹配---BF算法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、字符串模式匹配---BF算法字符串模式匹配有着广泛的应用,如求最大公共子串、最长回文字符串、L-Gap、数据压缩、DNA序列匹配等问题。所谓模式匹配就是在目标字符串中寻找字串的过程,要寻找的字串即为模式。BF(BruceForce)算法可以说是模式匹配算法中最简单、最容易理解的一个。原理很简单。其基本思想是从主串的start位置开始与模式串进行匹配,如果相等,则继续比较后续字符,如果不相等则模式串回溯到开始位置,主串回溯到start+1位置,继续进行比较直至模式串的所有字符都已比较成功则匹配成功

2、,或者主串所有的字符已经比较完毕,没有找到完全匹配的字串,则匹配失败。该算法较为简单,代码如下://start为从第start位置的字符开始比较,默认为0intBF(chars[],chard[],intstart=0){     char*p=s+start;//记录开始比较的位置     intindex=start-1;//记录位置,以便成功时返回字串在主串的位置     char*q=d;     char*tmp;     while(*p!='')     {          

3、  tmp=p;            ++index;            while(*q!=''&&*tmp!=''&&*tmp==*q)            {                   ++tmp;                   ++q;            }            if(*q=='')//匹配成功,返回结果                   returnindex;            else//主串和模式串回溯       

4、     {                   ++p;                   q=d;            }     }     return-1;//匹配失败}   设有主串s和子串t,子串t定位是指在主串s中找到一个与子串t相等的子串。通常把主串s称为目标串,把子串t称为模式串,因此定位也称作模式匹配。模式匹配成功是指在目标串s中找到一个模式串t。      传统的字符串模式匹配算法(也就是BF算法)就是对于主串和模式串双双自左向右,一个一个字符比较,如果不匹配,主串和

5、模式串的位置指针都要回溯。这样的算法时间复杂度为O(n*m),其中n和m分别为串s和串t的长度。      KMP算法是由Knuth,Morris和Pratt等人共同提出的,所以成为Knuth-Morris-Pratt算法,简称KMP算法。KMP算法是字符串模式匹配中的经典算法。和BF算法相比,KMP算法的不同点是匹配过程中,主串的位置指针不会回溯,这样的结果使得算法时间复杂度只为O(n+m)。下面说说KMP算法的原理。KMP字符串模式匹配通俗点说就是一种在一个字符串中定位另一个串的高效算法。简

6、单匹配算法的时间复杂度为O(m*n);KMP匹配算法。可以证明它的时间复杂度为O(m+n).。一.  简单匹配算法先来看一个简单匹配算法的函数:intIndex_BF(charS[],charT[],intpos){/* 若串 S 中从第pos(S 的下标0≤pos

7、(S[i+j]==T[j])j++; // 继续比较后一字符else{i++;j=0; // 重新开始新的一轮匹配}if(T[j]=='/0')returni; // 匹配成功   返回下标elsereturn-1; // 串S中(第pos个字符起)不存在和串T相同的子串} //Index_BF   此算法的思想是直截了当的:将主串S中某个位置i起始的子串和模式串T相比较。即从 j=0 起比较 S[i+j] 与 T[j],若相等,则在主串 S中存在以 i 为起始位置匹配成功的可能性,继续往后比较

8、(j逐步增1),直至与T串中最后一个字符相等为止,否则改从S串的下一个字符起重新开始进行下一轮的"匹配",即将串T向后滑动一位,即 i 增1,而 j 退回至0,重新开始新一轮的匹配。例如:在串S=”abcabcabdabba”中查找T=”abcabd”(我们可以假设从下标0开始):先是比较S[0]和T[0]是否相等,然后比较S[1] 和T[1]是否相等…我们发现一直比较到S[5] 和T[5]才不等。如图:   当这样一个失配发生时,T下标必须回溯到开始,S下标回溯的长度与T相同,然后S下标增1,

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

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

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