KMP算法——从入门到懵逼到了解
本博文參考http://blog.csdn.net/v_july_v/article/details/7041827
关于其它字符串匹配算法见http://blog.csdn.net/WINCOL/article/details/4795369
暴力匹配算法
暴力匹配的思路。如果如今文本串S匹配到 i 位置,模式串P匹配到 j 位置。则有:
- 假设当前字符匹配成功(即S[i] == P[j])。则i++,j++。继续匹配下一个字符;
- 假设失配(即S[i]! = P[j]),令i = i - (j - 1),j = 0。相当于每次匹配失败时,i 回溯,j 被置为0。
KMP算法概述
KMP算法过程
- 假设当前字符匹配成功(即S[i] == P[j])。则i++。j++。继续匹配下一个字符。
- 假设失配(即S[i]! = P[j]),令i = i - (j - 1)。j = 0。相当于每次匹配失败时,j回溯到next[j]
基本工作已经完毕了一
比方下图中C和C相等,所以next[j+1]=2+1=3;
此过程相当于模式串的自我匹配,
所以不断的递归k = next[k],直到要么找到长度更短的同样前缀后缀。要么没有长度更短的同样前缀后缀。例如以下图所看到的:
void GetNext(char* p,int next[])
{ int pLen = strlen(p); next[0] = -1; int k = -1; int j = 0; while (j < pLen - 1){ //p[k]表示前缀,p[j]表示后缀 if (k == -1 || p[j] == p[k]){ ++k; ++j; next[j] = k; } else k = next[k]; }
}
当然。此时的KMP算法还是基础版。还有优化版见:
http://baike.baidu.com/link?url=7TyIFAuf53azP6XofEc5oWivGEp5Gt9Dxnmhy5USg7eyiZzEBWiBVLjle1ZpSBUMU-Zqgeh9qqPiQwRdN4lqEq中的优化部分。
转载于:https://www.cnblogs.com/jhcelue/p/7399256.html
KMP算法——从入门到懵逼到了解相关推荐
- 0x15.基本数据结构 — 字符串 (KMP算法(含详细证明)和最小表示法)
目录 一.KMP模式匹配 1.引理: 2.引理证明: 3.使用优化的算法计算nextnextnext数组: 4.luogu P3375 [模板]KMP字符串匹配 5.UVA1328 Period 6. ...
- 算法串匹配C++实现字符串匹配的KMP算法
新手发帖,很多方面都是刚入门,有错误的地方请大家见谅,迎欢批评指正 之前看<算法导论>符字串匹配分部讲到KMP算法,被弄得云里雾里.天今看到阮一峰写了一篇博客<符字串匹配的KMP算法 ...
- KMP算法的Next数组详解(转)
转载请注明来源,并包含相关链接. 网上有很多讲解KMP算法的博客,我就不浪费时间再写一份了.直接推荐一个当初我入门时看的博客吧: http://www.cnblogs.com/yjiyjige/p/3 ...
- 深化对KMP算法的理解
KMP算法 看到这么一句话:你的名字是我告白语中的子串 文章目录 KMP算法 参考代码 预处理模式串的理解 入门题目 KMP一开始理解起来是比较困难的,下方是结合自己的理解写出来代码,仅作参考, (网 ...
- 时序分析:KMP算法用于序列识别
考研基础资料之一的<算法与数据结构>,KMP算法作为串匹配的基本算法,为必考题目之一.对于算法入门来说,也是复杂度稍高的一个基本算法. KMP算法作为串匹配的非暴力算法,是为了减少回溯而设 ...
- 《算法竞赛入门经典训练指南》pdf
下载地址:网盘下载 基本介绍 编辑 内容简介 <算法竞赛入门经典:训练指南>题目多选自近年来ACM/ICPC区域赛和总决赛真题,内容全面,信息量大,覆盖了常见算法竞赛中的大多数细分知识点. ...
- 字符串匹配KMP算法的讲解C++
转自http://blog.csdn.net/starstar1992/article/details/54913261 也可以参考http://blog.csdn.net/liu940204/art ...
- ICPC程序设计题解书籍系列之九:罗勇军《算法竞赛入门到进阶》
罗书<算法竞赛入门到进阶>题目一览 第1章 算法竞赛概述 HDU1000 HDU1089-HDU1096 A+B for Input-Output Practice (I)-(VIII)( ...
- 算法竞赛入门经典——训练指南
<算法竞赛入门经典--训练指南> 基本信息 作者: 刘汝佳 陈锋 [作译者介绍] 丛书名: 算法艺术与信息学竞赛 出版社:清华大学出版社 ISBN:9787302291077 上架时间:2 ...
最新文章
- 超赞的贪吃蛇、吃豆人和数字华容道等童年小游戏1行Python代码就能玩
- 关于计算机视觉(随谈)
- 心电图多少为正常范围_研究:心跳超过70次/分,至少减寿3年!正常心率范围是多少?...
- Java Swing编程之仿js树状折叠菜单
- opengl开启垂直同步_玩游戏卡顿?只要简单2步,开启电脑最大性能,速度提升10倍!...
- Oracle-并行多线程和视图view的应用
- 怎样设置有道词典屏幕取词后自动翻译?
- 常见绿盟扫描主机漏洞及修复方案
- LilyPond教程(2)——开始你的第一份乐谱
- Javascript(八)javascript页面重定向
- 深入分析JavaWeb技术内幕系列之---DNS域名解析过程
- android wear 应用推荐,2015年Android Wear十大必装应用
- [蛋蛋无厘头日记]收到礼物喵~o(∩_∩)o
- 栈的push、pop序列-判断序列是否是栈的pop顺序
- 领导说“辛苦了”,千万别回“应该的”, 这是我听过最扎心的答案了!
- 百度18年兴衰背后:一部互联网流量变迁史
- 三极管开关电路参数设计与参数介绍
- mysql启动原理_MySQL 启动原理剖析
- 关于用户 'SA' 登录失败
- js字符串怎么转python对象_python对象与json相互转换的方法 python中怎么把json对象转成字符串...
热门文章
- postfilter中文什么意思_使用过滤器解决(Post/Get)中文乱码问题
- mssql2000 mysql_把MSSQL2005转换成MSSQL2000_MySQL
- 通信服务器系统安装,pxe网络安装操作系统
- php windowcrlf和unix,文件格式unix与dos转换,CRLF与LF的区别查看
- mysql applicationcontext.xml_配置applicationcontext.xml文件
- 自定义拦截器,拦截到了某个请求就返回给前端一个JSON串
- pyqt5使用label显示图片
- AnkhSVN的使用
- 怎样写一个具有异步交互的React组件的单元测试
- Vue编写动态组件实践(render函数的使用心得)