版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
6-5模式匹配v第六章查找技术模式匹配模式匹配的应用场景1:模式匹配模式匹配的应用场景2:模式匹配问题有什么特点?(2)改进取得的积累效益:模式匹配操作被频繁调用,执行频率高。(1)算法的一次执行时间:问题规模通常很大,常常在大量信息中进行匹配;模式匹配(字符串匹配):在主串S中寻找子串T
的过程,T也称为模式S="s1s2…sn"T="t1t2…tm"如果匹配成功,返回T
在S
中的位置;否则返回0模式匹配BF算法KMP算法6-5-1BF算法v第六章查找技术基本思想1.在串S和串T中设比较的起始下标i和j;2.循环直到S或T的所有字符均比较完2.1如果S[i]等于T[j],继续比较S和T的下一个字符;2.2否则,将i和j回溯,准备下一趟比较;3.如果T中所有字符均比较完,则返回匹配的起始比较下标;否则返回0;ji…ij
主串Ss1s2si
sn模式T
t1t2tjij例1主串S="ababcabcacbab",模式T="abcac"ababcabcacbabi=2,j=2失败;i回溯到1,j回溯到0ijijij第1趟abcac运行实例i=1,j=0失败;i回溯到2,j回溯到0ababcabcacbab第2趟abcaciji=6,j=4失败i回溯到3,j回溯到0ababcabcacbabij第3趟abcacababcabcacbab第4趟abcaciji=3,j=0失败i回溯到4,j回溯到0例1主串S="ababcabcacbab",模式T="abcac"运行实例例1主串S="ababcabcacbab",模式T="abcac"运行实例ababcabcacbabij第5趟abcaci=4,j=0失败i回溯到5,j回溯到0ijababcabcacbab第6趟abcaci=10,j=5,T中全部字符都比较完毕,匹配成功算法实现intBF(charS[],charT[]){inti=0,j=0;
while(S[i]!='\0'&&T[j]!='\0'){if(S[i]==T[j]){i++;j++;}else{i=i–j+1;j=0;}}
if(T[j]=='\0')return(i–j+1);
elsereturn0;}intBF(charS[],charT[]){inti=0,j=0,start=0;
while(S[i]!='\0’&&T[j]!='\0'){if(S[i]==T[j]){i++;j++;}else{
start++;i=start;j=0;}}
if(T[j]=='\0')returnstart+1;
elsereturn0;}性能分析S="s1s2…sn"T="t1t2…tm"在匹配成功的情况下,考虑两种极端情况:设匹配成功发生在si处,则:例如:S="aaaaaaaaaabcdccccc"T="bcd"最好情况:不成功的匹配都发生在串T
的第1个字符设匹配成功发生在si处,则:例如:S="aaaaaaaaaaaabccccc"T="aaab"最坏情况:不成功的匹配都发生在串T
的最后一个字符性能分析S="s1s2…sn"T="t1t2…tm"在匹配成功的情况下,考虑两种极端情况:分析BF算法为什么BF算法的性能较低?ji…ij
主串Ss1s2si
sn模式T
t1t2tj在每趟匹配不成功时存在大量回溯,没有利用已经部分匹配的结果如何在匹配不成功时主串不回溯?主串不回溯,模式就需要向右滑动一段距离i模式T
t1t2tj如何确定模式的滑动距离?分析BF算法如何在匹配不成功时主串不回溯?主串不回溯,模式就需要向右滑动一段距离
主串Ss1s2si
snababcabcacbabij第1趟a
bcac
i=2,j=2失败;
∵s[1]=t[1];t[0]≠t[1]∴t[0]≠s[1]ababcabcacbab第2趟abcac
分析BF算法ababcabcacbabij第1趟abcac
i=2,j=2失败;
∵s[1]=t[1];t[0]≠t[1]∴t[0]≠s[1]ababcabcacbabi第3趟jabcac
分析BF算法ababcabcacbab第3趟a
bcac
iji=6,j=4失败∵s[3]=t[1];t[0]≠t[1]∴t[0]≠s[3]ababcabcacbab第4趟abcac
分析BF算法ababcabcacbab第3趟abcac
iji=6,j=4失败∵s[4]=t[2];t[0]≠t[2]∴t[0]≠s[4]ababcabcacbab第5趟abcac
分析BF算法ababcabcacbab第3趟abcac
iji=6,j=4失败∵s[4]=t[2];t[0]≠t[2]∴t[0]≠s[4]ababcabcacbab第6趟abcac
iji=6,j=4失败∵s[5]=t[3];t[0]=t[3]∴t[0]=s[5]分析BF算法KMP算法结论:i可以不回溯,模式向右滑动到新的比较起点k如何由当前部分匹配结果确定模式向右滑动的新比较起点k?ababcab…abcac
ijabcac
ababcab…ik下一趟(1)T[0]~T[k-1]=S[i-k]~S[i-1]ababcab…abcac
ijabcac
ababcab…ik下一趟(1)T[0]~T[k-1]=S[i-k]~S[i-1](2)T[j-k]~T[j-1]=S[i-k]~S[i-1]T[0]~T[k-1]=T[j-k]~T[j-1]KMP算法结论:i可以不回溯,模式向右滑动到新的比较起点k如何由当前部分匹配结果确定模式向右滑动的新比较起点k?长度为k的前缀(1)k与j具有函数关系,由当前失配位置j,可以计算出滑动位置kT[0]~T[k-1]=T[j-k]~T[j-1]说明了什么?T[0]~T[k-1]=T[j-k]~T[j-1]的物理意义是什么?长度为k的后缀T[0]~T[j]中前缀和后缀相等的真子串唯一吗?(2)滑动位置k仅与模式串T有关ababac
ababac
ababac
k=1k=3KMP算法max{k|1≤k<j
且T[0]…T[k-1]=T[j-k]…T[j-1]}模式应该向右滑多远才能保证算法的正确性?abababacijababacabababacijababacabababacababacijk=1:k=3:KMP算法失效数组-1j=0max{k|1≤k<j
且T[0]…T[k-1]=T[j-k]
…T[j-1]}集合非空0其它情况next[j]=设next[j]表示在匹配过程中与T[j]比较不相等时,下标j的回溯位置下标:01234模式串T:ababck=next[j]:
j=0时,k=-1j=1时,k=0-10j=2时,T[0]≠T[1],因此,k=00j=3时,T[0]=T[2],T[0]T[1]≠T[1]T[2],因此,k=11j=4时,T[0]≠T[3],T[0]T[1]=T[2]T[3],T[0]T[1]T[2]≠T[1]T[2]T[3],因此,k=22ababaababcb
i=4,j=4失败;
j=next[4]=2ij第1趟ababcnext[j]={-1,0,0,1,2}ababaababcb
ij第2趟ababc运行实例ababaabab
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025山东菏泽曹县苏教高级中学教师招聘6人参考笔试题库附答案解析
- 2025江西瑞昌市投资有限责任公司下属瑞昌市瑞兴置业有限公司招聘7人备考笔试题库及答案解析
- 2025下半年四川绵阳市盐亭县人力资源和社会保障局面向全县考调30人考试备考题库及答案解析
- 2025广东中山市三角镇水务事务中心招聘水闸、泵站管理人员2人备考笔试题库及答案解析
- 江西省水务集团有限公司2025年第三批社会招聘【34人】备考考试试题及答案解析
- 雅安市名山区茶城建设工程有限公司2025年第二批次公开招聘项目用工员工考试备考题库及答案解析
- 网吧维保合同范本
- 网架结构合同范本
- 耕地赠与合同范本
- 职场新秀合同范本
- 2025广东广州市卫生健康委员会直属事业单位广州市红十字会医院招聘47人(第一次)笔试考试参考题库及答案解析
- 中国外运招聘笔试题库2025
- 建筑物拆除施工沟通协调方案
- 2025食品行业专利布局分析及技术壁垒构建与创新保护策略报告
- 2025四川省教育考试院招聘编外聘用人员15人考试笔试模拟试题及答案解析
- 特许经营教学设计教案
- 2025年智能消防安全系统开发可行性研究报告
- 胎儿窘迫课件
- 2025年国家开放大学《刑事诉讼法》期末考试备考试题及答案解析
- 论文导论范文
- (正式版)DB65∕T 4636-2022 《电动汽车充电站(桩)建设技术规范》
评论
0/150
提交评论