您的位置:首页 > 其它

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算法是用来处理从源串(文本串)中查找目的串(模式串)的一个相对高效的算法,然而并不是最高效的算法,比之高效的还有 


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”



中间貌似出现了些错误。所以留个位置下次补上

现在最重要的东西都已经弄出来了,之后就是怎么根据这个表移位置了。

相信通过开头两篇博客的介绍再加上我的瞎逼逼你已经懵逼了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: