数据结构——数组和串的模式匹配.pptVIP

  1. 1、本文档共16页,可阅读全部内容。
  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文档。上传文档
查看更多
数据结构——数组和串的模式匹配

4.5.3 模式匹配 1. 模式匹配的概念 设有给定的两个串T和P,则在T中寻找等于P的子串的过程,称为模式匹配,T称为正文(text),P称为模式(pattern)。 通常T长度远远大于P的长度,若在T中找到等于P的子串,则匹配成功;否则,匹配失败。 2.简单的模式匹配算法 算法思想如下:对于i=0, 1, …, n-m,依次执行下列匹配: 用p[0], p[1], …, p[m-1]依次与t[i], t[i+1], …, t[i+m-1]比较,若均对应相等,则匹配成功,整个算法结束;若存在某个k(0≤k ≤m-1),使得p[k] ≠t[i+k],则立即结束这轮比较, 将模式P向右移动一位,再执行下一个i的新一轮匹配。 如执行了n-m+1轮,即i从0到n-m的所有情况,在T中都没有找到P的子串,则匹配失败。 #define MAXN 100 #define MAXM 50 char t[MAXN], p[MAXM] ; int simple_match ( t, p, n, m) char t[ ] , p[ ] ; int n , m ; { int i , j , k ; for (i=0 ; i=n-m ; i++ ) { for (j=0 ; k=i ; jm t[k] == p[ j ] ; k++ , j++) if (j == m ) return (i ) ; } return (-1 ) ; } 简单模式匹配算法,在最坏的情况下,比较的总次数为:m(n-m+1) ,则时间复杂度为:O(mn)。 3.模式匹配的KMP算法 由D.E.Knuth,J.H.Morris和V.R.Pratt三个人提出来的。 数据结构 第 4 章 数组和串 第 5 节 串 Kunth-Morris-Pratt算法举例: T: a b c a b c a a b c a b c a b c d…… P: a b c a b c d (a b c)a b c d (a)b c a b c d a b c a b c d (a b c)a b c d 数据结构 第 4 章 数组和串 第 5 节 串 KMP(D.E.Knuth-J.H.Morris-V.R.Pratt)算法 t[0] … t[i-j] t[i-j+1] … t[i-k] t[i-k+1] … t[i-1] t[i]  t[i+1] … ‖ ‖ ‖ ‖ ‖ ‖ p[0] p[1] … p[j-k] p[j-k+1] …p[j-1] p[j]  p[j+1] … ‖ ‖ ‖ ? p[0] p[1] …p[k-1] p[k]   p[k+1]  如果模式P的开头k个字符(p[0], …,p[k-1])依次与p[j]的前面k个字符(p[j-k], …,p[j-1])相同,那么可以省去烦琐的一轮轮的比较,还可省去模式的前k个字符的比较,只需从t[i]与p[k]开始依次继续进行比较。 数据结构 第 4 章 数组和串 第 5 节 串 在执行匹配过程中一旦出现ti≠pj处失配,我们必须在模式P中找出一段p0p1…pk-1 = pj-kpj-k+1….pj-1,这个k我们称pj的“失败链接值”,我们发现在寻找模式 P的各个字符的失败链接值与正文T无关,只依赖模式本身。 在进行匹配前,预先为模式P的每一个符号设置好它的失败链接值,一旦出现ti≠pj处失配。那么就取出pj失败链接值k,而下次匹配直接将模式P的pk开始与正文失败处ti继续比较下去。 数据结构 第 4 章 数组和串 第 5 节 串 计算失败链接值数组元素(对应模式的下标 j) 数据结构 第 4 章 数组和串 第 5 节 串 失败链接值的函数: #define MAXN 100 #define MAXM 50 char t[MAXN], p[MAXM] ; int flink[MAXN]

文档评论(0)

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

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

版权声明书
用户编号:7014141164000003

1亿VIP精品文档

相关文档