美文网首页程序员
字符串匹配算法--BF算法与RK算法

字符串匹配算法--BF算法与RK算法

作者: 二毛_220d | 来源:发表于2019-10-20 15:37 被阅读0次

BF算法

BF算法中的BF是brute force的缩写,中文叫做暴力匹配算法,也加朴素匹配算法。算法特点:“暴力” 、简单、好懂、性能不佳。
引入两个概念:主串与模式串。
比方说:我们在字符串A中查找字符串B,那么字符串A就是主串,字符串B就是模式串。
我们把主串的长度记作n,模式串的长度记作m。因为我们是在主串中查找模式串,所以n>m。
BF算法的思想:我们在主串中,检查起始位置分别是0、1、2、3、...n-m且长度为m的n-m+1个子串,看有没有跟模式串匹配的。
图例:


BF算法图例

这种算法的最坏时间复杂度为O(n*m)。

尽管理论上,BF算法的时间复杂度很高,是O(n*m)。 但在实际开发中它是一个比较常用的字符串匹配算法。为什么这么说呢?原因有两点。

  • 第一:实际的软件开发中,大部分情况下,模式串与主串的长度都不会太长。
  • 第二:BF算法的思想简单,代码实现也非常简单。简单意味着不容易出错,如果有bug也容易暴露和修复。

RK算法

RK算法的全称叫Rabin-Karp算法,是由它的两位发明者Rabin与Karp的名字来命名。
RK算法的思想是这样的:我们通过哈希算法对主串中的n-m+1个子串分别求哈希值,然后逐个与模式串的哈希值比较大小。如果某个子串的哈希值与模式串相等,那就说明对应的子串与模式串匹配了(这里不考虑哈希冲突)。有哈希冲突怎么办,解决方法也很简单(当我们发现子串的哈希值与模式串相等时,再对比一下子串与模式串就可以了)。哈希值是数值,数值之间的比较是比较快速的。


RK算法图例

相关文章

  • 字符串匹配算法

    以下为学习 《数据结构与算法之美 -- 字符串匹配》 的记录。 BF算法 即暴力匹配算法,循环遍历匹配。 RK算法...

  • 字符串匹配算法

    场景:字符串A为主串,字符串B为模式串,比较字符串B是否能够在字符串A中进行匹配? 匹配算法:BF算法和RK算法。...

  • 字符串匹配算法总结

    面写过一篇字符串匹配算法,总共涉及BF算法,RK算法,BM算法,还有一种算法是KMP算法。这几种算法思想和代码我都...

  • 学习BM算法的姿势

    BM算法简介 BM是字符串搜索算法。 字符串搜索单模式下有BF、RK、BM、KMP算法,其中BF是暴力搜索,RK是...

  • 数据结构与算法学习-BF算法和RK算法

    今天学习字符串匹配问题的算法题目的BF算法和RK算法。题目:有一个主串S = {a, b, c, a, c, a,...

  • KMP算法文章合集

    字符串的查找:朴素查找算法和KMP算法 暴力匹配算法与KMP算法(串的匹配) 字符串查找算法BF和KMP 字符串匹...

  • 字符串匹配

    BF算法 暴力匹配算法O(n*m) RK算法 O(n) BM算法 坏字符规则好后缀规则O(m)

  • 字符串匹配

    BF 算法和 RK 算法BM 算法和 KMP 算法

  • 记录数据结构与算法的学习之路 -----005.BF算法与RK算

    1.BF算法 1.1 定义 BF算法,即暴风算法,也有人称为朴素算法、暴力算法。BF算法是一种做字符串匹配的算法。...

  • 字符串匹配

    indexOf 底层就是使用字符串匹配算法 字符串匹配算法很多 BF( Brute Force)算法 暴力匹配算...

网友评论

    本文标题:字符串匹配算法--BF算法与RK算法

    本文链接:https://www.haomeiwen.com/subject/doxamctx.html