第13讲-数据结构与算法分析——字符串匹配.pptxVIP

第13讲-数据结构与算法分析——字符串匹配.pptx

  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文档。上传文档
查看更多

字符串匹配问题的形式化定义:

假设文本是一个长度为n的数组T[1…n],而模式是一个长度为m的数组P[1…m],其中m≤n,P和T的元素都取自一个有限字母集∑的字符。如果0≤s≤n-m,且T[s+1…s+m]=P[1…m],则称模式P在文本T中出现,且偏移为s。

;字符串匹配算法;NAIVE-STRING-MATCHER(T,P)

{n=T.length

m=P.length

for(s=0ton-m)

if(P[1…m]==T[s+1…s+m])

print“Patternoccurswithshift”s

};朴素字符串匹配算法;一个有限自动机M是一个5元组(Q,q0,A,∑,δ),其中:

Q是状态的有限集合

q0∈Q是初始状态

A?Q是一个特殊的接受状态集合

∑是有限输入字符集合。

δ是一个从Q?∑到Q的函数,称为M的转移函数。

有限自动机从q0状态开始,依次读入字符,如果在状态q读入字符a,则发生了一次状态转移,状态从q变为δ(q,a)。

当状态q∈A,则自动机M接受了所读入的字符串。

没有被接受的输入称为被拒绝的输入。

;例如:一个拥有两个状态集Q={0,1}的简单有限状态自动机

q0={0,1},∑={a,b},状态1是唯一的被接受状态。

图a是用表格表示的转移函数δ,图b为等价的状态转移图。

δ(1,b)=0,δ(0,a)=1

输入字符串abaaa

自动机输入状态序列为:

(第一个为初始状态)

(0,1,0,1,0,1),该输入被接受

输入字符串abbaa

自动机输入状态序列为:

(第一个为初始状态)

(0,1,0,0,1,0),该输入被接受

;符号

两个字符串x和y的连结用xy表示。

如果对某个字符串y∈∑*有x=wy,则称字符串w是字符串x的前缀,记作w?x,|w|≤|x|(∑*表示包含所有有限长度的字符串集合)

如果对某个字符串y∈∑*有x=yw,则称字符串w是字符串x的后缀,记作w?x,|w|≤|x|

P[1…m]中由k个字符组成的前缀P[1…k]记作Pk

空字符串P0=ε是任何一个字符串的前缀和后缀。

模式P[1…m]的后缀函数σ:函数σ是一个从∑*到{0,1,…,m}上的映射,满足:σ(x)=max{k:Pk?x},即,Pk同时为x的后缀和P的前缀,长度最长。

例如:P=ab,σ(ε)=0,σ(ccaca)=1,σ(ccab)=2;对于一个给定的模式P[1…m],构造出相应的自动机,然后利用自动机完成字符串匹配。

一个给定的模式P[1…m],相应的自动机定义:

状态集合Q为{0,1,2,…,m},开始状态q0为0,只有状??m是唯一被接受的状态。

对于任意的状态q和字符a,转移函数δ定义为:

δ(q,a)=σ(Pqa)

;例如:P=“ABABAC”

;利用有限自动机进行字符串匹配;利用有限自动机进行字符串匹配;在文本T[1…n]中查找长度为m的模式P出现的位置,模式P的自动机为δ(状态转移函数表示),初始状态为0,唯一接受的状态为m

FINITE-AUTOMATON-MATCHER(T,δ,m)

{n=T.length

q=0

for(i=1ton)

{q=δ(q,T[i])

if(q==m)

print“Patternoccurswithshift”i-m

}

};;计算转移函数:给定模式P[1…m]

COMPUTE-TRANSITION-FUNCTION(P,∑)

{m=P.length

for(q=0tom)

{for(eachcharactera∈∑)

k=min(m+1,q+2)

repeat

k=k-1//k的最大可能值min(m,q+1)开始

untilPk?Pqa

δ(q,a)=k

}

returnδ

};?;KMP算法(Knuth-Morris-Prattalgorithm);KMP算法(Knuth-Morris-Prattalgorithm);KMP算法(Knuth-Morris-Prattalgorithm);KMP算法(Knuth-Morris-Prattalgorit

文档评论(0)

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

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

1亿VIP精品文档

相关文档