基于MATLAB的数据结构与算法_KMP课件.ppt

  1. 1、本文档共22页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
毕业论文,单片机论文,毕业论文设计,毕业过关论文,毕业设计,毕业设计说明,硕士论文,研究生论文,毕业论文,单片机论文,毕业论文设计,毕业过关论文,毕业设计,毕业设计说明,硕士论文,研究生论文,本文档支持完整下载,支持任意编辑!选择我们,选择成功!

本文档支持任意编辑,下载使用,定会成功! 基于MATLAB 《数据结构与算法》 延边大学 信息管理专业(13级) 崔基哲 KMP模式匹配算法 MATLAB编程之基础算法 * 串的模式匹配算法 一、基本概念 1、模式匹配(定位) 设有主串S和子串T(将S称为目标串,将T称为模式串),在主串S中,从位置start开始查找,如若在主串S中找到一个与子串T相等的子串,则返回T的第一个字符在主串中的位置,否则返回-1。 2、算法目的 确定主串中所含子串第一次出现的位置(定位) 3、算法种类 KMP算法 KMP模式匹配算法 它是:在一个长字符串中匹配一个短子串的无回溯算法。 定义 s: 模式串 , m: 模式串的长度 text: 要匹配的字符串, n:text的长度 设text: x1,x2,…xn , s: a1,a2,…am, 则当存在i使 xi+k=ak(k=1,2,…m)时,认为text与模式串匹配,当然text也可能与模式串有多处匹配 例如:text: abcabca, s:abc 则text与s匹配的位置有3和6 KMP算法 作为一种无回溯的算法,它是高效的,待会儿你将看到它的时间复杂度为O(m+n),空间复杂度也为O(m+n) 而且,它很容易理解,代码也很短 定义 next: 为对应模式串的数组 设字符串为 s1s2s3...sm ,其中s1,s2,s3,... si,... sm均是字符,则next[i]=m,当且仅当满足如下条件:字符串s1s2...sm equals 字符串s(i-m+1)...si-1 si 并且s1s2...sm s(m+1) unequals s(i-m) s(i-m+1)...si-1 si。 通俗地讲,next[i]保存了以s[i]为结尾的后缀与模式串前缀的最长匹配数。 KMP算法的运行过程 我们用两个指针i和j分别表示,A[i-j+ 1..i]与B[1..j]完全相等。也就是说,i是不断增加的,随着i的增加j相应地变化,且j满足以A[i]结尾的长度为j的字符串正好匹配B串的前 j个字符(j当然越大越好),现在需要检验A[i+1]和B[j+1]的关系。 如果a[i+1]==b[j+1],i和j各加1,什么时候j==m,就说B是A的子串(B串已经整完了) KMP算法的运行过程 如果a[i+1]!=b[j+1],这时候怎么办? i = 1 2 3 4 5 6 7 8 9 …… A = a b a b a b a a b a b … B = a b a b a c b j = 1 2 3 4 5 6 7 j=5时,a[i+1]!=b[j+1],我们要把j改成比它小的值j‘。改成多少合适呢? KMP算法的运行过程 i = 1 2 3 4 5 6 7 8 9 …… A = a b a b a b a a b a b … B = a b a b a c b j = 1 2 3 4 5 6 7 记住,我们要保持A[i-j+ 1..i]与B[1..j]完全相等,因而j’是最大的数使a[i-j’+1..i]与B[1..j’]完全相等. KMP算法的运行过程 i = 1 2 3 4 5 6 7 8 9 …… A = a b a b a b a a b a b … B = a b a b a c b j = 1 2 3 4 5 6 7 显然是求一个最长的以i为末尾的后缀要与B的前缀匹配。由于A[i-j+ 1..i]与B[1..j]完全相等,故令j’=next[j]即可保证此性质保留 KMP算法的运行过程 i = 1 2 3 4 5 6 7 8 9 …… A = a b a b a b a a b a b … B = a b a b a c b j = 1 2 3 4 5 6 7 i = 1 2 3 4 5 6 7 8 9 …… A = a b a b a b a a b a b … B = a b a b a c b j ‘= 1 2 3 4 5 6 7 KMP算法的运行过程 需要注意的是i并没有动,改变的只是j的值 如果改变j的值后a[i+1]仍不等于b[j+1]的话,继续改变j值直到a[i+1]==b[j+1]或者j=0 j=0表示i+1前面无论怎么匹配都不能使a[i+1]==b[j+1],只好让a[i+1]与b[j+1]单独匹配 还是上一个例子,再演示一下 KMP算法的运行过程 i = 1 2 3 4 5 6 7 8 9 …… A = a b a b a b a a b a b … B = a b a b a c b

文档评论(0)

云烟 + 关注
实名认证
内容提供者

教师资格证持证人

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

领域认证该用户于2023年03月21日上传了教师资格证

1亿VIP精品文档

相关文档