- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
KMP算法(原创).ppt
第四章 字符串模式匹配算法 什么是模式匹配? 在一般的编辑软件中,经常要遇到在一个给定的文本中查找一个特定的字符串的问题,这就是字符串匹配,也称模式匹配。 设P是一个模式字符串(简称模式),其长度为m;s是一个正文字符串(简称正文),其长度为n。通常认为nm 简单算法(Brute-Force算法) 算法描述: 从正文s和模式p的第一个字符出发,将s和p的字符依次逐个进行比较,如果p中的所有字符均与s中的对应字符匹配,则说明匹配成功;如果在比较过程中发现了一个字符不匹配,则将模式p沿正文s向后移动一个字符的位置,然后再从p的第一个字符开始与中的对应字符逐个进行比较。以此类推,直到匹配成功或到达的末段为止。 模式匹配的KMP算法 基本思想: 当模式p与正文s进行比较的过程中发现不匹配时,找到一种模式p沿正文s向后移动的规则,以便使得正文s中失去匹配的字符以前的字符不再参与比较,即只从当前失去匹配的字符开始与模式p中的字符继续依次进行比较,并且又不错过模式被发现的机会。 示例: 算法分析 假设正文为‘s0s1……sn-1’,模式为‘p0p1……pm-1’,要实现改进算法,也就是要解决下述问题:当匹配过程中产生失配时(即si != pj),模式“向右滑动”可行的距离有多远,换句话说,当正文中第i个字符与模式中第j个字符“失配”时,正文中第i个字符应与模式中哪个字符相比较? 假设此时应与模式中第k个字符继续比较,其中k应具有以下两个性质: 1、kj,因为当失配时必然使模式p向后移,从而导致kj。移的幅度越小,k与j相差越小。 2、k应取所有可能值中的最大值,因为取最大值就意味着移的幅度最小,也就避免错过成功匹配的机会。 根据这个假设,必然使得下式成立: ‘p0p1……pk-1’=‘si-ksi-k+1……si-1’ (1) 而已经得到的“部分匹配”的结果是: ‘pj-kpj-k+1……pj-1’=‘si-ksi-k+1……si-1’ (2) (2)式的由来是: 当初正文中的第i个字符与模式中的第j个字符失配时,说明两者之前的j个字符肯定是一样的,而kj,所以前k个字符也是相同的。这就得出(2)式。 由(1)(2)两式便可得: ‘p0p1……pk-1’= ‘pj-kpj-k+1……pj-1’ (3) (3)式的结论可如下描述: 在模式p中,前k个字符与第j个字符之前的k个字符相同。 设next[j]表示:当模式中第j个字符与正文中相应字符“失配”时,在模式中重新和正文中该字符进行比较的字符的位置。 并令next[j]=k。 Next数组的完整定义如下: Next[0]=-1表示当模式p的第0个字符失去匹配时应将p沿正文方向右移一个位置,也即使p的第一个字符与正文s的下一个字符进行比较。 利用next数组进行模式匹配示例: 如何预先求得next数组值 首先要明确一点: next数组的求值只与模式p有关,而与具体的正文s无关。 我们可用递推的方法求next数组值。 假设已求得next[j]=k,根据定义可得 ‘p0p2……pk-1’= ‘pj-kpj-k+1……pj-1’ 那么next[j+1]=? 有两种可能情况 1、若pk=pj,则表明‘p0p1……pk’ = ‘pj-kpj-k+1……pj’,并且不可能存在k’k满足上式,那么 next[j+1]=k+1 式1 也就是:next[j+1]=next[j]+1 2、若pk!=pj,则表明‘p0p1……pk’ ! = ‘pj-kpj-k+1……pj’ 这时如何求next[j+1]呢? 转化法 式1的结论可这样描述:何时的k使得pk=pj,就用此时的k代入式1。 而现在的k是pk!=pj,因此必须要换成另外一个“k”,并设它为k2,以使得pk2=pj。 问题又出来了: k2如何得来? 如图: k2,到底是多少首先取决于另一个前提条件: ‘p0p1……pk2-1’= ‘pj-k2pj-k2+1……pj-1’ 如图: 那么,满足了这个前提条件,是否就满足pk2=pj了呢? 显然两者互不相干。也就是说,仅移动一次不一定满足pk2=pj 。 如果移动一次后得到k2仍然不满足pk2=pj ,就要按照前提条件再移动一次。 依次类推,直到pkn=pj ,或kn=0为止。 此时有: next[j+1]= kn +1 而 kn = next[kn-1] k1 =k= next[j] 由于, kn kn-1 …… k1 =kj
您可能关注的文档
- ICD年代致命性室律失常药物治疗地位.ppt
- icp备案代理.doc
- ICU的收治、转出指南.ppt
- IC封装技术面面观.doc
- IE主页篡改修复.doc
- IE介绍之一:IE学科形成和发展.ppt
- IE八大浏览器故障.doc
- IE基本概念.doc
- ie无法打开.doc
- IE浏览器为什么老是报错.doc
- 浙江省温州市浙南名校联盟2025-2026学年高一上学期期中联考数学试题含解析.docx
- 26高考数学提分秘诀重难点34圆锥曲线中的定点、定值、定直线问题(举一反三专项训练)(全国通用)(含解析).docx
- 26高考数学提分秘诀重难点35概率与统计的综合问题(举一反三专项训练)(全国通用)(含解析).docx
- 26高考数学提分秘诀重难点31圆锥曲线中的切线与切点弦问题(举一反三专项训练)(全国通用)(含解析).docx
- 26高考数学提分秘诀重难点30圆锥曲线中的弦长问题与长度和、差、商、积问题(举一反三专项训练)(全国通用)(含解析).docx
- 26高考数学提分秘诀重难点29巧解圆锥曲线的离心率问题(举一反三专项训练)(全国通用)(含解析).docx
- 26高考数学提分秘诀重难点28直线与圆的综合(举一反三专项训练)(全国通用)(含解析).docx
- 寡核苷酸药物重复给药毒性研究技术指南.docx
- 重组溶瘤腺病毒生产质量管理标准.docx
- 26高考数学提分秘诀重难点27直线与圆中常考的最值与范围问题(举一反三专项训练)(全国通用)(含解析).docx
原创力文档


文档评论(0)