在写这篇之前,我一定要说,我讨厌KMP算法!!!所以我是不会讲解KMP算法的!!!

好了,开始。

1 Horspool算法

Horspool 算法的思想很简单的。创新之处是模式串是从右向左进行比较。

匹配串:abcbc sdxzcxx

模式串:cbcac

第一步:从右向左进行匹配,c-c ,第二个b-a 不匹配。

第二步:模式串从不匹配的那个字符开始,从右向左寻找匹配串中不匹配的字符b 的位置。

匹配串:abcbcsd xzcxx

模式串:    cbcac

第三步:将模式串中的b与匹配串中的b对应。

第四步:从右向左进行匹配。d-c 不匹配,且模式串中无d,移动一个模式串长度。

匹配串:abcbcsdxzcxx

模式串:             cbcac

2 Sunday算法

Sunday 的算法思想和Horspool 有些相似。当出现不匹配的时候,不是去找匹配串中不匹配的字符在模式串的位置,而是直接找最右边对齐的右一位的那个字符在模式串的位置。

第一步:b-a 不匹配,我们就看匹配串中的z 在模式串的位置。

匹配串:abcbc zdxzc

模式串:zbcac

第二步:

匹配串:abcbczdxzc

模式串:         zbcac

第三步:如果模式串中的没有那个字符则跳过该字符串。e 不在模式串中出现

匹配串:abcbc edxzcs

模式串:zbcac

那么:

匹配串:abcbcedxzcs

模式串:      zbcac

3 RK算法

把文本每m个字符构成的字符段作为一个字段,和模式进行匹配检查。如果能对一个长度为m的字符串赋以一个Hash函数。那么显然只有那些与模式具有相同hash函数值的文本中的字符串才有可能与模式匹配,没有必要去考虑文本中所有长度为m的字段,因而大大提高了串匹配的速度。

将字符串的每一个字符看做一个数,那么这个字符串的就是一个数字数组,通过积分向量可以快速任意一个长度子字符串的向量和,可以把字符串的对应的字符数组的元素和看做这个字符串整体特征。

匹配串:aabsee sds

模式串 :    ees
   see向量和 == ees向量和,就对see和ees做逐个字符的比较,发现不匹配继续往下走。

匹配串:aabeessds

模式串 :    ees

ees向量和 == ees向量和 ,就对ees和ees做逐个字符的比较,发现匹配OK。

几个高效的字符串匹配算法相关推荐

  1. 使用Java实现高效的字符串匹配算法

    摘要:字符串匹配是计算机领域中的一个重要问题,有着广泛的应用场景.在本篇博客文章中,我们将介绍几种高效的字符串匹配算法,并给出使用Java语言实现的代码示例,希望能对读者理解和应用这些算法有所帮助. ...

  2. Sunday算法---简单高效的字符串匹配算法

    说到字符串匹配算法,估计大伙立马就想到了KMP算法,谁让KMP这么经典呢,各种算法教材里必然有KMP啊.但是KMP算法太复杂了,求next崩溃到cry.难道就没有比KMP更简单更高效的算法,no,有的 ...

  3. 数据结构与算法分析(十六)--- 如何设计更高效的字符串匹配算法?(BF + RK + KMP + BMH)

    文章目录 一.Brute Force 匹配算法 二.Rabin–Karp 匹配算法 三.Knuth–Morris–Pratt 匹配算法 四.Boyer-Moore-Horspool 匹配算法 五.字符 ...

  4. 字符串匹配算法(二):BM(BoyerMoore)算法、坏字符规则,好后缀规则

    文章目录 BM算法 坏字符规则 好后缀规则 完整代码 BM算法 BM算法的全程叫做Boyer-Moore,是工程上最常用且最高效的字符串匹配算法,有实验统计,它的性能是著名的KMP 算法的 3 到 4 ...

  5. KMP字符串匹配算法理解(转)

    一.引言 主串(被扫描的串):S='s0s1...sn-1',i 为主串下标指针,指示每回合匹配过程中主串的当前被比较字符: 模式串(需要在主串中寻找的串):P='p0p1...pm-1',j 为模式 ...

  6. 一看就懂的字符串匹配算法 之 BM算法

    先来一个导读,关于BM算法开始有了难度,大家一定要静下心,咬着呀也得给我读下去,这样你才能有收获. 我们在文本编辑器中,我们经常用到查找及替换功能.比如说,在Word文件中,通过查找及替换功能,可以把 ...

  7. c++ 字符串匹配算法sunday算法

    sunday 算法是一种很高效的字符串匹配算法, 其实现也较kmp算法简单很多 class Sunday {public:const string& needle;int mp[300];Su ...

  8. 数据结构与算法--字符串匹配算法

    目录 概要 单模式与多模式的区别 单模式匹配算法 BF算法 概念 代码实现 时间复杂度 应用 RK算法 概念 代码实现 时间复杂度 应用 BM算法 概念 算法原理 代码实现 时间复杂度 应用 多模式匹 ...

  9. 字符串匹配算法 -- BM(Boyer-Moore) 和 KMP(Knuth-Morris-Pratt)详细设计及实现

    文章目录 1. 算法背景 2. BM(Boyer-Moore)算法 2.1 坏字符规则(bad character rule) 2.2 好后缀规则(good suffix shift) 2.3 复杂度 ...

最新文章

  1. 一个低级错误引发Netty编码解码中文异常
  2. 让Windows 2000/XP系统自动登陆
  3. python二级考time库吗_学python第十七节:time库的学习
  4. linux lynx 源码,Linux移植浏览器 Lynx字符浏览器移植
  5. Sql Server 在数据库中所有表所有栏位 找出匹配某个值的脚本(转)
  6. 一个会定时完成的任务(二)
  7. python3 生成器
  8. Solr的学习使用之(三)IKAnalyzer中文分词器的配置
  9. linux wireshark 安装教程,Linux下安装和运行Wireshark
  10. qt 控件坐标系_Qt中,如何找准控件坐标
  11. zipparameters 使用_zip4j的简单运用
  12. python爬取网站大数据_[Python]爬虫抓取大数据职位数据
  13. MongoDB可视化管理工具-Robo 3T
  14. 电视html转vga没有声音,解决传统VGA接口无声音输出的设备的制作方法
  15. 零信任嵌入式安全沙箱技术,企业应用软件的技术底座
  16. fastcgi php 进程用户 lighttpd,说说lighttpd的fastcgi
  17. AID自定义桌面图标
  18. 史上最全的自动驾驶研究报告(下)
  19. 自制操作系统 1 准备工作
  20. 入门级深度学习服务器配置方案

热门文章

  1. 技术的真相 | 提高照片清晰度的黑魔法竟然是..
  2. 完美解决 开机无法启动 提示0xc000000e
  3. 复制文件或文件夹时出错,未指定的错误
  4. 浅谈服务器引擎Matchvs联网对战服务的几点优势
  5. 详解机器学习中常见的距离与Python实现
  6. html_div显示与隐藏相关内容
  7. 【AD20学习笔记】PCB的DRC检查、拼板设计
  8. 【留学避坑指南】全程国内网课学习不能认证学历?
  9. 网络获取北京时间和系统时间
  10. 菜鸟学算法-狄克斯特拉算法