网站大量收购独家精品文档,联系QQ:2885784924

最详细最容易理解的BM算法简介.pptVIP

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

01模式串中没有子串匹配好后缀02S=*******BABCDE********03T=CDECDEGBCDE04T=CDECDEGBCDE05此时需要寻找模式串的一个最长前缀CDE,并让该前缀等于好后缀BCDE的后缀,寻找到该前缀后,让该前缀和好后缀对齐即可。好后缀算法模式串中没有子串匹配上好后缀,并且在模式串中找不到最长前缀,让该前缀等于好后缀的后缀时T=AACDEFGBCDES=*******BABCDE********好后缀算法01模式串中没有子串匹配上好后缀,并且在模式串中找不到最长前缀,让该前缀等于好后缀的后缀时03T=AACDEFGBCDE04T=AACDEFGBCDE02S=*******BABCDE********好后缀算法BobBoyer和JStrotherMoore设计于1977*N,S,N都是坏字符*这里的position[T]=2,从左往右**i=5T[5]=‘b’bmBC[T[5]]=bmBC[‘b’]=0shift=0-(6)*当然,仅仅只用倒退的坏字符算法是有时候效率很低下甚至陷入死循环的。在我提供的demo中大家可以试一试,改成只用坏字符算法,会可以发现陷入死循环*与kmp算法类似,bm算法也是要预处理的*Boyer-Moore算法简介暴力算法与KMP算法都是基于前缀比较的算法BM算法则是基于后缀比较,而且BM算法其实上包含两个并行的算法:坏字符算法好后缀算法相同点:这些算法都是对文本串从左往右分析的12与之前算法的比较1243S=“FINDINAHAYSTACKNEEDLEINA”T=“NEEDLE”FINDINAHAYSTACKNEEDLEINANEEDLE1234朴素的思想-坏字符算法12543S=“FINDINAHAYSTACKNEEDLEINA”T=“NEEDLE”FINDINAHAYSTACKNEEDLEINANEEDLENEEDLE12345朴素的思想-坏字符算法020304050601T=“NEEDLE”S=“FINDINAHAYSTACKNEEDLEINA”FINDINAHAYSTACKNEEDLEINANEEDLENEEDLENEEDLE朴素的思想-坏字符算法S=“FINDINAHAYSTACKNEEDLEINA”1T=“NEEDLE”2FINDINAHAYSTACKNEEDLEINA3NEEDLE4NEEDLE5NEEDLE6NEEDLE7朴素的思想-坏字符算法01CASE103T=ABCDEFGBCDE02S=*******BABCDE********朴素的思想-好后缀算法CASE1S=*******BABCDE********T=ABCDEFGBCDET=ABCDEFGBCDE03040201朴素的思想-好后缀算法1T=CDECDEGBCDE32S=*******BABCDE********CASE2朴素的思想-好后缀算法01020304CASE2S=*******BABCDE********T=CDECDEGBCDET=CDECDEGBCDE朴素的思想-好后缀算法FINDINAHAYSTACKNEEDLEINA1NEEDLE2NEEDLE3NEEDLE4NEEDLE5上面的N,S,N是坏字符,显然在该算法中存在两种情况:坏字符不在模式串中坏字符在模式串中6坏字符算法NEEDLE4Shift=strlen(模式串)-position(坏)5坏字符不在模式串中1******TLE********2NEEDLE3Shift=6-26Case1020304050601******NLE********坏字符在模式串中NEEDLEShift=5-2NEEDLEShift=最右的坏字符位置–position(坏)Case2a213坏字符在模式串中******ELE********

文档评论(0)

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

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

1亿VIP精品文档

相关文档