收藏 分享(赏)

数据结构与算法设计PPT (12).pdf

上传人:职教中心 文档编号:13704895 上传时间:2022-10-11 格式:PDF 页数:18 大小:18.86MB
下载 相关 举报
数据结构与算法设计PPT (12).pdf_第1页
第1页 / 共18页
数据结构与算法设计PPT (12).pdf_第2页
第2页 / 共18页
数据结构与算法设计PPT (12).pdf_第3页
第3页 / 共18页
亲,该文档总共18页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

1、第3章字符串3.2字符串的模式匹配串的模式匹配定义 在串中寻找子串(第一个字符)在串中的位置词汇 在模式匹配中,子串称为模式,串称为目标。示例 目标T : “Beijing”模式P : “jin”匹配结果= 3第1趟 T a b ba b aP a b a第2趟 T a bb a b aP ab a第3趟 T a b ba b aP ab a第4趟 T a b b ab aP ab a穷举模式串的模式匹配int String:Find ( String &pat) const /穷举的模式匹配char * p = pat.ch, * s = ch; int i= 0;if ( *p &*s)

2、/当两串未检测完while( i= curLen-pat.curLen)if ( *p+ = *s+) /比较串字符if ( !*p )returni; /相等else i+; s = ch+ i; p = pat.ch; /对应字符不相等,对齐目标的/下一位置,继续比较return-1;穷举模式算法目标T t0t1t2 tm-1 tn-1! !模式pat p0p1p2 pm-1目标T t0t1t2 tm-1tm tn-1! !模式pat p0p1 pm-2 pm-1目标T t0t1 titi+1 ti+m-2ti+m-1 tn-1 模式pat p0p1 pm-2 pm-1穷举模式匹配效率分析

3、每个位置进行全匹配比较利用已有的比较成果和模式的特征,跳过中间没必要比较的过程,提高效率a b a b c a bc a c b a b ab c a c发现失败时a b c a c 没必要:abcbcaa b c a c 没必要:abcaa b c a c 没必要:此位置和a比较过是相等的ab c a c 可以直接从模式串的第二个字符和当前位置的主串中的值比较克努特莫里斯普塔特操作(KMT算法)a b c a c :模式串的第一个字符a 比较时不相等发现失败时:只能从主串的下一个位置开始,和模式串中的第一个字符比较a b c a c :模式串的第二个字符b 比较时不相等发现失败时:从主串的当

4、前位置开始,和模式串中的第一个字符比较ab c a c:模式串的第五个字符C比较时不相等发现失败时:从当前位置开始,和模式串中的第二个字符比较a b ca b c c:模式串的第7个字符比较不相等时:从当前位置开始,和模式串中的第几个字符比较?KMT算法j 0 1 2 3 4 5 6 7 8 9 模式串 a b a a b c a c滑动位数一个整数,其含义代表下一步怎样去比较主串位置:子串和主串比较的当前字符位置0:子串从主串当前位置从下标0处比较第一对不同时,主串从下一个位置开始1:子串从主串当前位置对从模式串下标1处进行比较2:子串从主串当前位置对从模式串下标2处进行比较KMT算法j 0

5、 1 2 3 4 5 6 7 8 9 模式串 a b a a b c a cfj 1 模式串 a b a a b c a c取子串的长度为1、2、3、4(k = 0 , 1 , 2 , 3)长度为1的子串:a ! b长度为2的子串:a b a b(p0 p1=p3 p4即k=1 p0 pk=pj-k pj)长度为3的子串:a b a !a a b长度为4的子串: a b a a != b a a bKMT算法 穷举的模式匹配算法时间代价:最坏情况比较n-m+1趟,每趟比较m次,总比较次数达(n-m+1)*m原因在于每趟重新比较时,目标串的检测指针要回退。改进的模式匹配算法可使目标串的检测指针每

6、趟不回退。改进的模式匹配(K )算法的时间代价:w 每趟第一个不匹配,比较n-m+1趟,总比较次数最坏达(n-m)+m nw 每趟第m个不匹配,总比较次数最坏 达 nKMT算法与穷举匹配性能对比 0 1 s-1 s s+1 s+2 s+j-1 s+j s+j+1 n-1 0 1 2 j-1 j j+1 tsts+1ts+2 ts+j= p0p1p2 pj(1) 使模式 目标 匹配, p0p1p2 pj-1 pm-1 = ts+1ts+2ts+3 ts+j ts+m p0p1pj-1 p1p2 pj( ) 可 p0p1pj-1 ts+1ts+2 ts+j下一趟 不匹配KMT算法正确性证明 , p

7、0p1pj-2 p2p3 pj 下一趟 不匹配,因 p0p1pj-2 ts+2ts+3 ts+j 于一个,使p0p1pk+1 pj-k-1pj-kpj p0p1pk=pj-kpj-k+1 pj p0p1pk= ts+j-kts+j-k+1 ts+j pj-kpj-k+1 pjKMT算法正确性证明 的currency1 法当比较 模式第“ 个字符失配时, 的 模式的前“ 个字符 , 目标。fi失fl 数 (“)可。fi失fl 数 (“) 的匹配 “ , 目标指针1,模式指针回 0。 “ , 目标指针不,模式指针回 f ( j-1)+1。失效函数的计算若设 模式 P= p0 p1pm-2 pm-1

8、 =+- 1,-. ,0, =)(110)其它情况的最大整数且使得当jkjkjkppppppjkkjf! j 0 1 2 3 4 5 6 7 P a b a a b c a c f ( j ) -1 -1 0 0 1 -1 0 -1示例:确定失效函数f (j)失效函数的计算第1趟目标aca b a a b a a b c a c a a b c模式aba a b c a cj= 1 j = f(j-1)+1 = 0第2趟目标a ca b a a b a a b c a c a a b c模式ab a a b c a cj = 0 目标指针加1 第3趟目标a c a b a a baa b c

9、a c a a b c模式a b a a bca cj= 5j = f(j-1)+1 = 2第4趟目标a c a b a a b aa b c a ca a b c模式(a b) aa b c a c利用失效函数的匹配过程”n ”n : a ”n ( ”n a ) cn 失fl 数的K 匹配算法”n ”n n a c n n c n ” ( n n )” ( a c c ) + + 相等 比较 ” ( ) + 不相等 a -1 +1” ( n ) n -1 n -n 利用失效函数的匹配的算法计算失效函数f j 的方法首先确定f 0= -1,再利用f j求f j+1。其中, f (1) j =f j ,f(m) j = ff(m -1) j=-=+=+ ,01111)(jkppjfjfj(k)jfm 否则或的最小正整数可找到令 失效函数的计算方法void ”n:a” ( )/计 失 数i tn c n -1 /直接 值 o ( i t“ 1 “n “+) / j i t ” “-1 i ( *(c +“) *(c +”+1) ” )” ” / i ( *(c +“) *(c +”+1) ) “ ”+1 “ -1 失效函数的计算算法

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报