BF(Brute-Force)算返抹.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
BF(Brute-Force)算返抹

1.BF(Brute-Force)算法 Brute-Force算法的基本思想是: 1) 从目标串s 的第一个字符起和模式串t的第一个字符进行比较,若相等,则继续逐个比较后续字符,否则从串s 的第二个字符起再重新和串t进行比较。 2) 依此类推,直至串t 中的每个字符依次和串s的一个连续的字符序列相等,则称模式匹配成功,此时串t的第一个字符在串s 中的位置就是t 在s中的位置,否则模式匹配不成功。 Brute-Force算法的实现 c语言实现: // Test.cpp : Defines the entry point for the console application. // #include stdafx.h #include stdio.h #include stdlib.h #include iostream using namespace std; //宏定义 #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define MAXSTRLEN 100 typedef char SString[MAXSTRLEN + 1]; /************************************************************************/ /* 返回子串T在主串S中第pos位置之后的位置,若不存在,返回0 */ /************************************************************************/ int BFindex(SString S, SString T, int pos) { if (pos 1 || pos S[0] ) exit(ERROR); int i = pos, j =1; while (i= S[0] j = T[0]) { if (S[i] == T[j]) { ++i; ++j; } else { i = i- j+ 2; j = 1; } } if(j T[0]) return i - T[0]; return ERROR; } void main(){ SString S = {13,a,b,a,b,c,a,b,c,a,c,b,a,b}; SString T = {5,a,b,c,a,c}; int pos; pos = BFindex( S, T, 1); coutPos:pos; } 2.KMP算法 2.1 算法思想:每当一趟匹配过程中出现字符比较不等时,不需要回溯I指针,而是利用已经的带的“部分匹配”的结果将模式向右滑动尽可能远的一段距离后,继续进行比较。 即尽量利用已经部分匹配的结果信息,尽量让i不要回溯,加快模式串的滑动速度。 需要讨论两个问题: ①如何由当前部分匹配结果确定模式向右滑动的新比较起点k? ② 模式应该向右滑多远才是高效率的? 现在讨论一般情况: 假设 主串:s: ‘s(1) s(2) s(3) ……s(n)’ ; 模式串 :p: ‘p(1) p(2) p(3)…..p(m)’ 现在我们假设 主串第i个字符与模式串的第j(j=m)个字符‘失配’后,主串第i个字符与模式串的第k(kj)个字符继续比较。 此时,s(i)≠p(j): 由此,我们得到关系式:即得到到1 到 j -1 的部分匹配结果: ‘P(1) P(2) P(3)…..P(j-1)’ = ’ S(i-j+1)……S(i-1)’ 从而推导出k 到 j- 1位的“部分匹配”:即P的j-1~j-k=S前i-1~i- (k -1))位 ‘P(j - k + 1) …..P(j-1)’ = ’S(i-k+1)S(i-k+2)……S(i-1)’ 由于s(i)≠p(j),接下来s(i)将与p(k)继续比较,则模式串中的前(k-1)个字符的子串必须满足下列关系式,并且不可能存在 k’k 满足下列关系式:(kj) 有关系式: 即(P的前k- 1 ~ 1位= S前i-1

文档评论(0)

ayangjiayu5 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档