Knuth-Morris-Pratt 字符串查找算法
2016-03-31 16:25
260 查看
听说室友最近在搞这个,所以我也搞了一下。。
大概就是翻了翻别人的博客看了看,自己打了打,感觉不是很难但是不知道为什么感觉看的博客的思路很啰嗦。
我自学的时候看了两篇博客,这两个博主都很厉害,建议先按顺序看看这两篇博客(如果看懂了的话就不要再看我下面写的了,不懂next数组的话我倒是提供了另一种好理解的替代办法):
一:
kb.cnblogs.com/page/176818
二:
http://blog.csdn.net/v_july_v/article/details/7041827
/*下面这段有摘抄,出自:http://blog.csdn.net/hereiskxm/article/details/8065751 */
KMP算法是用来处理从源串(文本串)中查找目的串(模式串)的一个相对高效的算法,然而并不是最高效的算法,比之高效的还有
/*摘抄完毕*/
我对KMP算法的理解是,基于对目的串(模式串)前缀后缀的研究,改进暴力匹配得一种方法。
我并没有打出NEXT数组因为NEXT数组我虽然知道是个什么意思,用起来也挺直观但是不好理解。(毕竟我也才学会不久。。)
以下是我实现的“KMP”
中间貌似出现了些错误。所以留个位置下次补上
现在最重要的东西都已经弄出来了,之后就是怎么根据这个表移位置了。
相信通过开头两篇博客的介绍再加上我的瞎逼逼你已经懵逼了。
大概就是翻了翻别人的博客看了看,自己打了打,感觉不是很难但是不知道为什么感觉看的博客的思路很啰嗦。
我自学的时候看了两篇博客,这两个博主都很厉害,建议先按顺序看看这两篇博客(如果看懂了的话就不要再看我下面写的了,不懂next数组的话我倒是提供了另一种好理解的替代办法):
一:
kb.cnblogs.com/page/176818
二:
http://blog.csdn.net/v_july_v/article/details/7041827
/*下面这段有摘抄,出自:http://blog.csdn.net/hereiskxm/article/details/8065751 */
KMP算法是用来处理从源串(文本串)中查找目的串(模式串)的一个相对高效的算法,然而并不是最高效的算法,比之高效的还有
Boyer-Moore(理论上复杂度和KMP差不多,但是实践起来比KMP快了数倍,但是特别复杂)。然后还有一个Sunday算法(据说也比BM算法快了很多)。然后还有RK算法、字符串匹配自动机
后缀树算法(分在线和非在线两种)等 见如下文章。不能说那个比那个更好,各个算法都有自己的优势及最佳应用场合。参考:
http://blog.csdn.net/yifan403/archive/2009/06/16/4272793.aspx
另外,关于多模式字符串匹配 有AC算法(字符串匹配自动机思想) WM算法(BM在多模式的推广应用)
参考:
http://blog.csdn.net/ijuliet/category/498465.aspx 该女子的blog有很多好文章。
/*摘抄完毕*/我对KMP算法的理解是,基于对目的串(模式串)前缀后缀的研究,改进暴力匹配得一种方法。
我并没有打出NEXT数组因为NEXT数组我虽然知道是个什么意思,用起来也挺直观但是不好理解。(毕竟我也才学会不久。。)
以下是我实现的“KMP”
中间貌似出现了些错误。所以留个位置下次补上
现在最重要的东西都已经弄出来了,之后就是怎么根据这个表移位置了。
相信通过开头两篇博客的介绍再加上我的瞎逼逼你已经懵逼了。
相关文章推荐
- hdu 1521(指数型母函数)
- 面试题集锦1
- Java - Collection
- ios md5加密大小写
- sql2008数据备份和还原,数据表导出导入
- Android EditText清除光标
- dsp28335的AD采样(单次模式、连续模式、DMA传输)
- CF-Sereja and Algorithm
- 保存Activity的临时数据
- Linux 系统常用命令汇总(一) 文件和目录操作
- 雅思考试经验分享,G类移民不可错过!
- 127报错解决方法
- 【有毒的设计模式】代理模式
- 汇编中除法的问题
- 自己写个简易版的CURD
- Python:使用property装饰器将方法转为属性
- 一台电脑如何管理多个SSH KEY
- 第一周学习笔记
- objective-c类别和类扩展学习笔记
- nyoj 118 修路方案(最小生成树删边求多个最小生成树)