博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
kmp算法
阅读量:7224 次
发布时间:2019-06-29

本文共 580 字,大约阅读时间需要 1 分钟。

  KMP算法是一种改进的算法,由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现,因此人们称它为————操作(简称KMP算法)。KMP算法的关键是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是实现一个next()函数,函数本身包含了模式串的局部匹配信息。O(m+n)。

  设主串(下文中我们称作T)为:a b a c a a b a c a b a c a b a a b b
  模式串(下文中我们称作W)为:a b a c a b

  在native朴素匹配算法中,遍历T的每个位置,对每个位置逐个比较T[i]与W[j],这样的算法效率比较低。kmp算法通过寻找W中的重复信息,不是遍历每个T的位置,在一次位置匹配中跳出,下次匹配位置可以根据这次匹配信息跳过几步,而不是简单的i++,这里跳过多少步就是用next[]数组表示,数组长度等于W的长度。

  用法:求next[]数组,next数组中k位置的值next[k]等于W[0:k]中包含的最长的相同的前缀和后缀(如aba为1,abcab为2),公式可以有不同的表示,这里其他情况1也可以是0,在跳步中对应跳1步

 

  原理:

 

转载于:https://www.cnblogs.com/undefined-name/p/9190442.html

你可能感兴趣的文章
解密敏捷自动化测试
查看>>
DelphiMVC拦截器介绍
查看>>
Spring Cloud构建微服务架构:分布式配置中心【Dalston版】
查看>>
iOS 11正式版终于来了!强力助攻小程序
查看>>
开放平台API接口调用频率控制系统设计浅谈
查看>>
Lucene4.3进阶开发之潜龙勿用( 七)
查看>>
DTD和schema小总结
查看>>
去掉导航栏的黑线
查看>>
怎样让html加载完毕后加载js代码
查看>>
piwik 案例介绍
查看>>
敏感字过滤
查看>>
为什么我们要从 NodeJS 迁移到 Ruby on Rails
查看>>
Android 文件式数据库Realm
查看>>
Linux 面试知识点笔记
查看>>
论flex布局和box布局的华为meta8手机自带浏览器的兼容
查看>>
dubbo与springcloud初识
查看>>
iis web.config 配置示例
查看>>
归并排序
查看>>
java 的转义字符
查看>>
SharedPreferences的使用注意事项
查看>>