串匹配算法.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文档。上传文档
查看更多
串匹配算法

串匹配算法 串匹配简单算法 算法1的基本思想: 匹配的定义:给出两个文字串,一个长度为n,称为正文,记为T。另一个长度为m,称为模式,记为P。在T中找出P的出现,找到一次称为发生一次匹配,P和T可能发生一次匹配、多次匹配或不匹配。 子段的划分:在长度m的模式前提下,长度为n的正文可以分为n-m+1个子段。 问题的输入:正文T和模式P,两者皆非空。 问题要求的输出结果:成功或失败的标志。成功是相对于每个独立子段的,一次匹配为一次成功,多次匹配输出多次成功的标志;而失败是相对与所有子段的,一次子段的不匹配不会输出失败的标志,只有当所有子段都不匹配时才输出失败的标志,程序算法中应该输出一次或多次成功标志再加上一个所有子段都匹配完的失败标志,或都不匹配时只输出一个失败标志。 逻辑判断中的移位问题(移位类型和移位条件):正文中存在子段内移位和子段间移位两种情况,模式中只有内部移位,可以用下标i,j,k来分别指定子段、段内字母、模式内字母,用 i++,j++,k++ 分别进行移位。段内字母和模式内字母移位同时进行,移位的条件是对应字母相等和k!=m,k=m则不再移位而输出成功标志,段间移位的条件是I=n-m+1且正文子段与模式的对应首字母相等。 算法在最坏情况下需要比较的次数为:m(n-m+1)=O(mn)。 算法程序如下: Begin I ← 0 While I=n-m+1 do Begin I ← I+1;j ← I;k ←1 While Tj=PK do Begin If k=m then return’SUCCESS’ Else do Begin J ← j+1 K← k+1 End End End Return ‘FAILURE’ end 算法1的举例和分析: 给定模式P: ABABC,正文T: ABABABCCA 。在 T中寻找于P匹配的子段。 可以看出此例中正文的子段数为5,只有在第三个子段才匹配成功。 算法2的基本思想: 算法2和算法1的思想基本相同,只是作了一点改进,它把模式P接在正文T的后面,成为TP,TP存放在数组a:array[1…(n+m)] of char,这时,P不必移动,可以减少一个指针。此时k用n+j代替,Pk用 a[n+j]代替。算法程序如下: begin I ← 0 Repeat i ← i+1 j ← 1 while(j=m)and (a[I+j-1]=a[n+j]) do j ← j+1 until jm search ← I end 在上述程序中,T存放在a:[1…n]中,P存放在a:[n+1…n+m]中,P与T不匹配时,返回值为n+1。算法2在最坏情况下的复杂性与算法1相同,在文字编辑中,算法2的内循环执行次数很少,故所需时间接近于n。 算法2的举例和分析:P: relative T: a string searching example involving relative simple text 执行算法2时,在出现匹配之前,内循环语句j ←j+1只执行两次。 P: aaaab T:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab 执行算法2时,在出现匹配之前,内循环语句j ← j+1要执行4× 30+5=125次。 在文字编辑和实用中,这种情况很少出现。但在P,T仅由0,1两个字符组成的字符串中常出现,再加上如果n很大,那么算法2耗费的时间将是很多的。 KMP算法 (一) KMP算法思想 在简单算法中,当发现模式P与正文的某个子段Tj不匹配时,P模式只能向右移动一个字符,而且主串指针必须回朔,因此速度很慢。模式P每次能不能多以几个字符?主串指针可以不回朔吗?通过分析模式P的结构,可以发现Pk与Tj不匹配时,前面已经匹配的那部分结果是可以利用的。KMP算法就是通过利用已经匹配那部分结果确定P向右滑动的字符数,且主串指针无需回朔。 (看一个例子,有助于我们理解这个算法的思想) 主串:a c a b a a b a a b c a c a a b c 模式:a b a a b c a c 第一次匹

文档评论(0)

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

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

1亿VIP精品文档

相关文档