数据结构-数组和串的模式匹配

数据结构-数组和串的模式匹配

ID:40210068

大小:170.50 KB

页数:16页

时间:2019-07-26

数据结构-数组和串的模式匹配_第1页
数据结构-数组和串的模式匹配_第2页
数据结构-数组和串的模式匹配_第3页
数据结构-数组和串的模式匹配_第4页
数据结构-数组和串的模式匹配_第5页
资源描述:

《数据结构-数组和串的模式匹配》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、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向右移动一位,再执行下

2、一个i的新一轮匹配。如执行了n-m+1轮,即i从0到n-m的所有情况,在T中都没有找到P的子串,则匹配失败。#defineMAXN100#defineMAXM50chart[MAXN],p[MAXM];intsimple_match(t,p,n,m)chart[],p[];intn,m;{inti,j,k;for(i=0;i<=n-m;i++){for(j=0;k=i;j

3、(mn)。3.模式匹配的KMP算法由D.E.Knuth,J.H.Morris和V.R.Pratt三个人提出来的。Kunth-Morris-Pratt算法举例:T:abcabcaabcabcabcd……P:abcabcd(abc)abcd(a)bcabcdabcabcd(abc)abcd数据结构第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

4、[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节串数据结构第4章数组和串第5节串在执行匹配过程中一旦出现ti≠pj处失配,我们必须在模式P中找出一段p0p1…pk-1=pj-kpj-k+1….pj-1,这个k我们称pj的“失败链接值”,我们发现在寻找模式P的各个字符的失败链接值

5、与正文T无关,只依赖模式本身。在进行匹配前,预先为模式P的每一个符号设置好它的失败链接值,一旦出现ti≠pj处失配。那么就取出pj失败链接值k,而下次匹配直接将模式P的pk开始与正文失败处ti继续比较下去。数据结构第4章数组和串第5节串计算失败链接值数组元素(对应模式的下标j)j012345678910pabcabcabbacflink[j]-10001234501数据结构第4章数组和串第5节串失败链接值的函数:#defineMAXN100#defineMAXM50chart[MAXN],p[MAXM];intflink[MAXN];voidfaillink(c

6、harp[],intflink[],intm){intj=1,k;flink[0]=-1;while(j

7、)return(i-m+1);i++;j++;}return(-1)}//时间复杂度分析为O(n)数据结构第4章数组和串第5节串4.模式匹配BM(Boyer-Moore)算法BM算法与KMP算法差别在于:(1)在模式匹配时,不是自左向右进行,而是自右向左进行。(2)事先计算一个函数d(x),包含下列信息:当x不在模式P中,或出现在P的尾端,则d(x)取值为模式P的长度。其余情况,d(x)取值等于字符x在模式P中最右端的字符x到尾端的距离。给定的模式P=p0p1p2….pm-1,模式P长度为m,则D(x)函数表示如下:m若x不在P,或x=pm-1,但x≠pi(0≤

8、i≤m-2)d(x)=m

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。