- 1、本文档共16页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
KMP算法讲解之——不需要公式,就能理解KMP算法课件
KMP算法
20XX.XX.XX
汇报人:XXX
KMP算法
一.KMP背景介绍
三.KMP核心——跳转表next[]
二.由朴素匹配到KMP
四. next[]的计算——引入f(j)
KMP算法
一.KMP背景介绍
在文本编辑中,我们经常要在一段文本中某个特定的位置找出某个特定的字符或模式。再比如,在HTTP协议里的字节流,有各种关键的字节流字段,对HTTP数据进行解释就需要用到模式匹配算法。由此,便产生了字符串的匹配问题。
KMP算法是由Knuth,Morris,Pratt三人共同提出的模式匹配算法,其对于任何模式和目标序列,都可以在线性时间内完成匹配查找,而不会发生退化,是一个非常优秀的模式匹配算法。
KMP算法
二.由朴素匹配到KMP
假设有目标字符串(Target)T=b a b c b a b c a b c a a b c a b c a b c a c a b c,我们要在其中找到模式字符串(Pattern)P=a b c a b c a c a b。
如何做更为高效呢?
由朴素匹配,我们要做16次,而KMP算法仅匹配了6次就找到了模式字符串
朴素匹配的时间复杂度为O(m*n);
KMP的时间复杂度为O(n)。
KMP算法
三.KMP算法核心——跳转表next[]
其实,模式串往往含有一定的信息——前缀包含。
对于模式串而言,其前缀字符串,有可能也是模式串中的非前缀子串,这个问题我称之为前缀包含问题。
那么每次要跳跃多少呢?这与跳转表next[]存储的数值相关。
以模式串a b c a b c a c a b为例,其前缀的4个字符a b c a,正好也是模式串的一个子串a b c (a b c a) c a b,所以当目标串与模式串执行匹配的过程中,如果直到第 8 个字符才匹配失败,同时也意味着目标串当前字符之前的 4 个字符,与模式串的前 4 个字符是相同的,所以当模式串向后移动的时候,可以直接将模式串的第 5 个字符与当前字符对齐,执行比较,这样就实现了模式串一次性向前跳跃多个字符。
KMP算法
三.KMP算法核心——跳转表next[]
模式字符串P= a b c a b c a c a b,其跳转表为:
KMP算法
三.KMP算法核心——跳转表next[]
我们以KMP匹配的第 3 步为例:
此时 pattern 串的第 1 个字母与 target[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),其含义是,对于模式串的第 j 个字符 pattern[j],f(j)是所有满足使 pattern[1···k-1] =pattern[j-(k-1)···j-1] (k j) 成立的 k 的最大值。f(j)=k
我们可以看出k最小为2,
因此,规定f(1)=0;
不存在前缀包含时,f(j)=1
模式字符串P= a b c a b c a c a b的f(j)计算结果如下:
KMP算法
四. next[]的计算——引入f(j)
f(j) 含义:对于模式串的第 j 个字符 pattern[j],f(j)是所有满足使 pattern[1···k-1] =pattern[j-(k-1)···j-1] (k j) 成立的 k 的最大值。f(j)=k
比如,假设一个11位模式字符串为a b a b c d a b a b g,则f(11)=5 != 3。
如何理解取K最大值呢?
通过上图,我们不难看出,k越小,跳跃的步伐越大,很可能会把满足条件的匹配结果跳过去,因此我们在保证算法快速的同时,还要保证准确!
KMP算法
四. next[]的计算——引入f(j)
为了说明f(j)和next[j]之间的关系,我们以pattern[8]为例,假如匹配到pattern[8]才匹配失败。f(8)=5,pattern[1··
您可能关注的文档
- 树立正确的消费观说课.ppt
- K48+000-K48+500沥青下面层首件工程总结报告(上报).doc
- K43+940-k44+240基层首件工程开工报告(上报).doc
- K52+0001-8小桥扩大基础混凝土基础及下部构造开工报告(批复).doc
- K5B计算机联锁选择题.doc
- K53+2501-8小桥扩大基础混凝土基础及下部构造开工报告(上报)-副本.doc
- 校园广播系统设计方案.doc
- KA销售管理培训.ppt
- 校园安全教育PPT.ppt
- KDT操作手册.doc
- 大学生职业规划大赛《新闻学专业》生涯发展展示PPT.pptx
- 大学生职业规划大赛《应用统计学专业》生涯发展展示PPT.pptx
- 大学生职业规划大赛《音乐学专业》生涯发展展示PPT.pptx
- 大学生职业规划大赛《中医学专业》生涯发展展示PPT.pptx
- 大学生职业规划大赛《信息管理与信息系统专业》生涯发展展示PPT.pptx
- 大学生职业规划大赛《汽车服务工程专业》生涯发展展示PPT.pptx
- 大学生职业规划大赛《水产养殖学专业》生涯发展展示PPT.pptx
- 大学生职业规划大赛《市场营销专业》生涯发展展示PPT.pptx
- 大学生职业规划大赛《音乐表演专业》生涯发展展示PPT.pptx
- 大学生职业规划大赛《音乐学专业》生涯发展展示PPT.pptx
最近下载
- 目的论视角下奢侈品香水广告的汉译策略研究——以迪奥为例.docx
- 2022年新版大象版六年级科学上册全册PPT课件.pptx
- 【新结构】湖北省七市州2024届高三下学期3月联合统一调研测试数学试题+答案解析.pdf VIP
- 物流和供应链(英文).ppt
- 北师大版数学八年级下册第四章 因式分解 大单元整体教学设计学历案教案附作业设计(基于新课标教学评一致性).docx
- 2023欧洲车身会议资料010_SUV full aluminium case_Hyundai and Alumobility.pdf
- 心衰的新药物治疗.pptx VIP
- 老旧小区外立面改造安全生产和文明施工措施.doc
- 口腔科护理质量查检表.docx VIP
- 《管理学习题》无答案.docx VIP
文档评论(0)