Knuth-Morris-Pratt 字符串查找算法

  听说室友最近在搞这个,所以我也搞了一下。。

  大概就是翻了翻别人的博客看了看,自己打了打,感觉不是很难但是不知道为什么感觉看的博客的思路很啰嗦。

我自学的时候看了两篇博客,这两个博主都很厉害,建议先按顺序看看这两篇博客(如果看懂了的话就不要再看我下面写的了,不懂next数组的话我倒是提供了另一种好理解的替代办法):

一:    

kb.cnblogs.com/page/176818

二:


/*下面这段有摘抄,出自: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”

 

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


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

相信通过开头两篇博客的介绍再加上我的瞎逼逼你已经懵逼了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值