- 1、本文档共22页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
字符串匹配问题本科生教材-
KMP算法 如何消除朴素的模式匹配算法主串指针回溯所带来的复杂性? D.E.Knuth , V.R.Pratt和J.H.Morris提出的一个算法,简称为KMP算法。主要利用现有部分匹配的情况来达到消除回溯的目的。 1、前缀函数 next[q]=max{ l |0=lq-1 且p[0..l-1]是p[0..q-1]的后缀} 2、例2 ? 当p.c[q]与t.c[j]不相等时,模式串p向右滑动多少个位置,再比较,既不丢失可能的匹配,又不做回溯? 以例2为例,展示匹配和滑动的过程! 1) 求p0,p1,…,pq-1中最大相同的前缀与后缀的长度k; 2) next[q]=k 即: 当p.c[q]与t.ch[j]不相等时,模式串p向右滑动q- k 个位置,继续比较p.c[q]和t.c[j]。 依次类推,直至出现下列两种情形之一。 (1) q退到某个next值,next[next…next[ ]]]时,比较i位置的字符,如相等,若此时若还不是完全匹配(q≠m),则q与j值各自增加1,继续比较下一字符 (2)如,k=-1时,模板退回到第1个位置、主串向前进一个,继续比较。 当算法中出现p.ch[q]=t.ch[i],且q=m时,显然找到了一个匹配p[0..m-1]=t[i-m..i-1]这是算法返回主串中出现匹配的第一个字符的位置i-m. 3、KMP算法 4、求前缀函数 5、KMP算法的复杂性 前缀函数的复杂性 设主串s和模式串t的长度分别为n和m,且m=n。 在前缀函数的计算过程中,语句: while( i p-n -1) { while( k=0 p-c[i] != p-c[k]) k = next[k]; i++; k++; if (p-c[i] = = p-c[k]) next[I]=k; } 累计计算的次数不会超过m.苹果栏中苹果最多不超过m,所有从k减小成next[k]的次数都不会超过当前苹果栏中的苹果数 同理KMP算法中: while( i p-n j t-n) if(i= = -1 || p-c[i] = = t -c[j] ) { i++;j++;} else i=next[i]; 累计计算的次数最多不超过O(m+n)。 算法KMP_MATCHER的总计算时间为O(m+n)。 6、KMP算法的改进 算法KMP_MATCHER中比较p[q]和t[i]不相等,且p[q]=p[next[q]]时,不仅可以向右滑动q-next[q]个位置,而且更大一点,可以向右滑动 q-next[next[q]]个位置。因为 p[i]?t[j] 因此,可将前缀函数π修改为: * * 求串‘ababababca’的前缀函数π[] 0 6 5 4 3 2 1 0 0 -1 Next[] a c b a b a b a b a c d a b a b a b a b ? a b a b a b a b c c d a b a b a b a b ? ? ? a b a b a b a b c c d a b a b a b a b ? ? ? ? ? a b a b a b a b c c d a b a b a b a b ? ? ? ? ? a b a b a b a b c 可能存在匹配的位置 最后1个位置不匹配! int pMatch(PSeqString t, PSeqString p, int * next) { int i,j; i=0;j=0; while( i p-n j t-n) if(i= = -1 || p-c[i] = = t -c[j] ) { i++;j++;} else i=next[i]; /* i退回到next[i]-1后边那1个, 此时j没有变化 if ( i = p-n ) return (j- p-n +1) else return(0
您可能关注的文档
- 外脚手架碧翠御景-.doc
- 多位数乘一位数整理和复习2.ppt
- 多元函数微分习题的的答案.ppt
- 多姿多采袋和包.ppt
- 多姿多彩袋和包.ppt
- 多尺度传热传质chapter 11.pdf
- 多彩汉子.ppt
- 多宝串知识-大全.doc
- 多模块综合的练习.doc
- 多民族大家庭一课时1.ppt
- 船舶修造设备提升改造项目可行性研究报告申请立项.doc
- 2025年中医药膳预制食品生产线生产设备智能化升级投资分析.docx
- 基础卷-七年级语文下册期中考前必刷卷(广州专用)(全解全析).pdf
- 基础卷-七年级语文下册期中考前必刷卷(广州专用)(考试版).pdf
- 2025年中医药膳预制食品生产线生产设备维护与保养策略.docx
- 存储测试设备研发及产业化建设项目申请可行性研究报告.doc
- 幼儿园小学生儿童交通安全教育课件 (3).pptx
- 预防早恋27安全教育课件.pptx
- 2025年中医药膳预制食品生产线生产设备节能与环保技术报告.docx
- 基于情感表达的小学绘画教学评价体系构建与实践教学研究课题报告.docx
最近下载
- 2025形势与政策-加快建设社会主义文化强国.pptx
- 人教版(2025)七年级下册Unit1Animal FriendsSection B How are animals part of our lives Section B 1a~2b课件+音频(共3.pptx VIP
- 110kv变电站继电保护毕业设计.doc VIP
- 公路隧道工程施工.pptx
- 电信行业运营商业务连续性保障方案.doc VIP
- 生态酒店设计分析.pptx
- GB∕T 702-2017 热轧钢棒尺寸、外形、重量及允许偏差(高清版).pdf
- 2025-2030年中国采血器产业运行动态分析及投资战略咨询报告.docx
- 江苏旅游资源的特征与分类及开发思考.pptx VIP
- 海南大学2022-2023学年《细胞生物学》期末考试试卷(B卷)附参考答案.docx
文档评论(0)