模式匹配算法之超级通俗易懂的KMP

模式匹配算法之KMP

1.何为模式匹配

简单的说就是字符串匹配,模式指的就是字符串,模式匹配说的就是在一串字符串(通常我们称之为主串)中去找另一串字符串(通常我们称之为模式串)。最常见到的例子就是很多文本工具都有的搜索和查找功能(在文本中查找某一个字符),再通俗的举个例子就是在abababcababab这个字符串中去看ababab这个字符串是否存在,前者abababcababab我们称为主串,而后者ababab我们称之为模式串,所以名称都是用来唬人的。

2.何为KMP
2.1.引言

上边描述完模式匹配的定义,估计有的小伙伴,特别是没有接触过C/C++语言的小伙伴会犯迷糊,心里可能会想,像在一些高级语言比如C#中,匹配字符串的功能非常之简单,string类型就已经实现了对字符的各种操作,别说是一个匹配功能了,就算是插入,删除等操作都不在话下。不错,高级语言中确实是实现了这些功能,但是,其底层是如何实现的呢?说到这,此时此刻,一团迷雾是不是笼上了你的心头?那么如何驱散这团迷雾呢,我们接着来…

2.2.BF算法
2.2.1.概念

描述到这,肯定有小伙伴会自告奋勇地说,在一串字符串中匹配另一串字符串,实现这个功能有何难?依次匹配不就好了,比如要在ccccab中匹配a,一个循环依次对比,有相等就匹配成功,有何难的,如果是匹配cca,就如下图:

KMP-2.2.BF算法

主串开始从第1个字符串和模式串进行对齐,然后一一对比,一旦出现失配的情况,主串再从第2个字符开始和模式串进行对齐,然后再一一比对,再出现失配的情况,主串再从第3个字符开始和模式串进行对齐,然后再次一一比对,直到匹配成功。

没错,这是最直接也是最容易想到的办法,一旦出现失配的情况,主串依次对齐模式串,然后一路比对下去,通常我们称之为暴力匹配算法,英文名叫做:Brute Force,简称BF算法。

2.2.2.暴力的来源

上边阐述了什么是BF算法,可是并没有对【为何取名为暴力,暴力又体现在哪里】进行说明,不知道有没有对此疑惑的读者。至于为什么要指出这点呢?其实是为了透过现象看本质,让读者可以更好地看清暴力算法的原始面貌,有哪些不足之处,然后,我们去蹂躏它,踩碎它,最终拨云见日。

俗话说,”能动手还动什么口

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值