- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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
第一次匹
您可能关注的文档
最近下载
- 2025-2026人教部编版三年级上册语文教学计划.docx VIP
- 施工现场车辆安全教育.pptx VIP
- 给排水系统学习培训ppt课件.pptx VIP
- 2025北京市十八里店乡人民政府城市协管员招聘21人笔试参考题库附答案解析.docx VIP
- 输血科管理制度、程序性文件、SOP文件.docx VIP
- 05J909_工程做法_建筑专业图集.docx VIP
- 2021海绵城市设施通用图集.docx VIP
- 【统编版】高中语文必修上册第一单元《3百合花》优质课(29张PPT)课件.pptx VIP
- 钢丝帘线压延机生产线(中文参考).doc VIP
- 2025年福建省福州市辅警协警笔试笔试预测试题(含答案).docx VIP
文档评论(0)