美文网首页
字符串匹配算法总结

字符串匹配算法总结

作者: 突击手平头哥 | 来源:发表于2019-11-09 16:03 被阅读0次

字符串匹配算法总结

所有代码集合

在一个主串中匹配模式串

BF算法

  最简单的使用strcmp逐个匹配的算法, 通常情况下我们使用这个就可以了; 假设主串长度为m, 模式串为长度为n, 时间复杂度为O(m * k * n)(我们需要匹配m次, 每次的耗时和n有关)

RK算法

  和BF算法相同的逐个匹配, 优点是使用HASH的方式进行逐个比较; 且如笔者写的示例, 我们可以使用的HASH算法中HASH(N)是和HASH(N-1)有关的.时间复杂度为O(m * s), 这个s在通常情况下是k*n应当要小的。

  不过考虑到HASH冲突的情况, 效率未必会高很多.

BF算法

  使用坏字符好后缀规则, 一次尽可能多的移动位数; 时间复杂的为O(M * N), 这里的M应当是小于主串的长度的.

  需要注意的是, 如果模式串太短的话, 意义不大; 而且需要额外的空间存储一些辅助的结构体, 同时建立辅助结构体是需要是假的呢.

坏字符规则: 如果在匹配中遇到了第一个坏字符(不匹配的字符), 那么向后移动时: 需要在模式串中找到一个和该坏字符相同的字符移动到对应位置, 否则必不会成功的。

好后缀规则: 如果在从后往前匹配时, 遇到第一个坏字符之前已经匹配了一段后缀子串; 那么我们进行移动时, 就必须考虑和这个后缀子串的匹配情况.

KMP算法

   这里和BF算法相同的是利用好前缀规则, 尽可能移动多的位数; 假设从前往后匹配时: 我们已经匹配了一部分的前缀子串, 那么当我们往后移动时, 必须要找到该前缀子串的后缀子串与该前缀子串的前缀子串的匹配情况.

ps: 这里仅仅是做一个简单的说明总结, 详细的可以看我的BLOG, 如果仅仅看这里应当是很难看懂这些规则的!!!

一个字符串匹配多个模式串

Trie树

  Trie树注重的是模式串的前缀匹配问题, 比如输入一个单词的前半部分我们能够知道到和这前半部分匹配的单词(主串可能等于或者短于模式串).
简单实现, 如果我们考虑更多的字符/汉字等等, 对空间的消耗是非常大的(实际工作中使用的话, 可能要优化子节点的保存方式)。

AC自动机

  AC自动机, 负责的问题是一个字符串匹配多个模式串的问题, 比如在一个长字符串中匹配屏蔽的单词.简单实现.

总结

  • 利用HASH的方式可以极大的减少, 比较/寻址的消耗
  • 将一些需要的数据提前算好, 避免在循环中不断计算
  • 根据使用情况决定采取哪种算法, 需要考虑 时间复杂度/空间复杂度, 除此之外 代码复杂度也是需要考虑的问题.

相关文章

  • KMP字符串匹配算法

    KMP字符串匹配算法 先总结一下之前的几种字符串匹配算法 1 BF算法, 最简单的字符串匹配算法, 可以直接使用s...

  • 字符串匹配算法总结

    字符串匹配算法总结 所有代码集合 在一个主串中匹配模式串 BF算法   最简单的使用strcmp逐个匹配的算法, ...

  • 字符串匹配

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

  • KMP算法文章合集

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

  • 一些有关算法的

    字符串模式匹配算法 字符串的KMP算法详解部分匹配表(即)向右移一位就可以得到next数组。字符串模式匹配算法 R...

  • 字符串匹配算法

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

  • 字符串匹配算法

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

  • 2022-01-25

    1.字符串匹配BM算法 在文本中查找字符串匹配算法,坏字符串规则和好后缀规则坏字符串规则: 从后往前匹配,第一个不...

  • 20-字符串匹配

    字符串匹配 这章节,我们会讲到几大典型的字符串匹配算法 BF算法 BF算法是最最符合正常人逻辑思维的一种匹配模式,...

  • leetcode字符串匹配算法之KMP算法

    本篇介绍一种高效的字符串匹配算法——KMP算法。 KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J....

网友评论

      本文标题:字符串匹配算法总结

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