KMP算法讲解之——不需要公式,就能理解KMP算法.ppt

KMP算法讲解之——不需要公式,就能理解KMP算法.ppt

ID:55796152

大小:150.43 KB

页数:16页

时间:2020-06-07

KMP算法讲解之——不需要公式,就能理解KMP算法.ppt_第1页
KMP算法讲解之——不需要公式,就能理解KMP算法.ppt_第2页
KMP算法讲解之——不需要公式,就能理解KMP算法.ppt_第3页
KMP算法讲解之——不需要公式,就能理解KMP算法.ppt_第4页
KMP算法讲解之——不需要公式,就能理解KMP算法.ppt_第5页
资源描述:

《KMP算法讲解之——不需要公式,就能理解KMP算法.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、KMP算法20XX.XX.XX汇报人:XXX汇报提纲KMP算法一.KMP背景介绍三.KMP核心——跳转表next[]二.由朴素匹配到KMP四.next[]的计算——引入f(j)KMP算法一.KMP背景介绍在文本编辑中,我们经常要在一段文本中某个特定的位置找出某个特定的字符或模式。再比如,在HTTP协议里的字节流,有各种关键的字节流字段,对HTTP数据进行解释就需要用到模式匹配算法。由此,便产生了字符串的匹配问题。KMP算法是由Knuth,Morris,Pratt三人共同提出的模式匹配算法,其对于任何模式和目标序列,都可以在线性时间内完成匹配查找,而不会发生退化,是一个非常优秀的模式匹配算

2、法。KMP算法二.由朴素匹配到KMP假设有目标字符串(Target)T=babcbabcabcaabcabcabcacabc,我们要在其中找到模式字符串(Pattern)P=abcabcacab。如何做更为高效呢?由朴素匹配,我们要做16次,而KMP算法仅匹配了6次就找到了模式字符串朴素匹配的时间复杂度为O(m*n);KMP的时间复杂度为O(n)。KMP算法三.KMP算法核心——跳转表next[]其实,模式串往往含有一定的信息——前缀包含。对于模式串而言,其前缀字符串,有可能也是模式串中的非前缀子串,这个问题我称之为前缀包含问题。那么每次要跳跃多少呢?这与跳转表next[]存储的数值相关

3、。以模式串abcabcacab为例,其前缀的4个字符abca,正好也是模式串的一个子串abc(abca)cab,所以当目标串与模式串执行匹配的过程中,如果直到第8个字符才匹配失败,同时也意味着目标串当前字符之前的4个字符,与模式串的前4个字符是相同的,所以当模式串向后移动的时候,可以直接将模式串的第5个字符与当前字符对齐,执行比较,这样就实现了模式串一次性向前跳跃多个字符。KMP算法三.KMP算法核心——跳转表next[]模式字符串P=abcabcacab,其跳转表为:KMP算法三.KMP算法核心——跳转表next[]我们以KMP匹配的第3步为例:此时pattern串的第1个字母与tar

4、get[6]对齐,从6向后依次匹配目标串,到target[13]时发现target[13]='a',而pattern[8]='c',匹配失败,此时next[8]=5,所以将模式串向后移动8-next[8]=3个字符,将pattern[5]与target[13]对齐,然后由target[13]依次向后执行匹配操作。在整个匹配过程中,无论模式串如何向后滑动,目标串的输入字符都不会回溯,直到找到模式串,或者遍历整个目标串都没有发现匹配模式为止。KMP算法四.next[]的计算——引入f(j)跳转表next[]是如何计算的呢?以及怎样以较小的代价计算?这里我们引入一个概念f(j),其含义是,对于

5、模式串的第j个字符pattern[j],f(j)是所有满足使pattern[1···k-1]=pattern[j-(k-1)···j-1](k

6、abcdababg,则f(11)=5!=3。如何理解取K最大值呢?通过上图,我们不难看出,k越小,跳跃的步伐越大,很可能会把满足条件的匹配结果跳过去,因此我们在保证算法快速的同时,还要保证准确!KMP算法四.next[]的计算——引入f(j)为了说明f(j)和next[j]之间的关系,我们以pattern[8]为例,假如匹配到pattern[8]才匹配失败。f(8)=5,pattern[1···4]=pattern[4···7],此时我们需要关注pattern[8]:1.如果pattern[8]!=pattern[5]因为在匹配到pattern[8]时才失败,此时就可以将输入字符targ

7、et[n]与pattern[f(8)]=pattern[5]对齐,再向后依次执行匹配,所以此时的next[8]=f(8)。KMP算法四.next[]的计算——引入f(j)2.如果pattern[8]=pattern[5]那么pattern[1···5]=pattern[4···8],因为target[n]与pattern[8]匹配失败,那么也意味着target[n-4···n]!=pattern[4···8],那么将target[n

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。