模式匹配之Kmp/BM专题

模式匹配基本概念
在一个较长的n个字符串(称为文本)中,寻找一个给定的m个字符的串(称为模式)。

蛮力算法:简单地从左到右比较模式和文本中每一对相应的字符,如果一旦不匹配,把模式向右移一格,再进行下一轮尝试.(详见《算法设计与分析基础》p80)

Horspool算法:在蛮力法模式匹配算法中,如果遇到了一对不匹配字符,我们需要把模式右移。如果不存在错过文本中一个匹配子串的风险,我们希望移动的幅度尽可能地大。假设文本中对齐模式最后一个字符的元素是字符c,Horspool算法根据c的不同情况来确定移动的距离。Horspool算法是Boyer-Moore算法的简化版本(详见《算法设计与分析基础》p195)

Boyer-Moore算法:蛮力法模式匹配算法中最快的一个,传说中notepad中查找用的就是BM算法。《算法设计计与分析基础》( p197)讲的非常易懂,直接看一遍可以秒过!

KMP算法:BM用的是坏符号移动和好后缀移动,匹配是从右到左,而KMP用的是前缀函数移动,匹配是从左到右。KMP尽管没有BM快,但重要的是算法思想,其前缀函数移动正是多模式匹配的AC自动机算法的基础。学习过程:先看《算法导论》( p560),然后可以看Matrix67的《KMP算法详解》,大牛用另外一种思路来解释KMP算法,但实质和算导是一样的,看看代码就知道了,最后看阮一峰的《字符串匹配的KMP算法》,文章用图示化的方法细述了KMP算法,一目了然。

KMP
基本概念:
KMP是模式匹配算法中最重要的一种,预备知识要了解模式匹配基本概念、蛮力算法(详见《算法设计与分析基础》p80)、Horspool算法(详见《算法设计与分析基础》p195)和Boyer-Moore算法(详见《算法设计与分析基础》p197)
Boyer-Moore算法学习 http://blog.youkuaiyun.com/sealyao/article/details/4568167
Matrix67 《KMP算法详解》 http://www.matrix67.com/blog/archives/115

应用拓展:

习题:
【bzoj1009】[HNOI2008]GT考试
【wikioi1204】寻找子串位置(KMP)
【cf471D】MUH and Cube Walls

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值