完整串的模式匹配程序

上传人:hs****ma 文档编号:469364923 上传时间:2023-04-29 格式:DOCX 页数:9 大小:71.69KB
返回 下载 相关 举报
完整串的模式匹配程序_第1页
第1页 / 共9页
完整串的模式匹配程序_第2页
第2页 / 共9页
完整串的模式匹配程序_第3页
第3页 / 共9页
完整串的模式匹配程序_第4页
第4页 / 共9页
完整串的模式匹配程序_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《完整串的模式匹配程序》由会员分享,可在线阅读,更多相关《完整串的模式匹配程序(9页珍藏版)》请在金锄头文库上搜索。

1、 串的模式匹配字符串模式匹配算法,通俗点说,就是一种在一个字符串中定位另一个串的高效算法。KMP(Knuth-Morris-Pratt)算法是一种基于前缀搜索的方法。简单匹配算法的时间复杂度为O(m*n);KMP匹配算法在搜索阶段的最坏时间复杂度和平均时间复杂度都是O(n),在预处理阶段的时间复杂度是O(m),所以它的时间复杂度为O(m+n)。 一.简单匹配算法先来看一个简单匹配算法的函数:int Index_BF ( char S , char T , int pos )/* 若串 S 中从第pos(S 的下标0pos S0 != S1,S1 != S2,所以S1 != T0,S2 != T

2、0. 还是从理论上间接比较了。有人疑问又来了,你分析的是不是特殊轻况。假设S不变,在S中搜索T=“abaabd”呢?答:这种情况,当比较到S2和T2时,发现不等,就去看next2的值,next2=-1,意思是S2已经和T0 间接比较过了,不相等,接下来去比较S3和T0吧。假设S不变,在S中搜索T=“abbabd”呢?答:这种情况当比较到S2和T2时,发现不等,就去看next2的值,next2=0,意思是S2已经和T2比较过了,不相等,接下来去比较S2和T0。假设S=”abaabcabdabba”在S中搜索T=“abaabd”呢?答:这种情况当比较到S5和T5时,发现不等,就去看next5的值,

3、next5=2,意思是前面的比较过了,其中,S5的前面有两个字符和T的开始两个相等,接下来去比较S5和T2吧。总之,有了串的next值,一切搞定。那么,怎么求串的模式函数值nextn呢?(本文中next值、模式函数值、模式值是一个意思。) 三. 怎么求串的模式值nextn定义:(1)next0= -1 意义:任何串的第一个字符的模式值规定为-1。(2)nextj= -1 意义:模式串T中下标为j的字符,如果与首字符相同,且j的前面的1k个字符与开头的1k个字符不等(或者相等但Tk=Tj)(1kj)。如:T=”abCabCad” 则 next6=-1,因T3=T6(3)nextj=k 意义:模式串T中下标为j的字符,如果j的前面k个字符与开头的k个字符相等,且Tj != Tk (1kj)。 即T0T1T2。Tk-1=Tj-kTj-k+1Tj-k+2Tj-1 ,且Tj != Tk.(1kj);(4) nextj=0 意义:除(1)(2)(3)的其他情况。 举例:01)求T=“abcac”的模式函数的值。 next0= -1 根据(1) next1=0 根据 (4) 因(3)有1=kj;不能说,j=1,Tj-1=T0 next2=0 根据 (4) 因(3)有1=k0 但kn, 表示,Sm的前k个字符与T中的开始k个字符已经间接比较相等了,下一次比较Sm和Tk相等吗?4.

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 建筑资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号