bm坏字符 , Horspool算法 以及Sunday算法的不同

一.bm中的坏字符规则思想

(1)模式串与主串从后向前匹配

(2)发现坏字符后,如果坏字符不存在于模式串中:将模式串的头字符与坏字符后一位对齐

(3) 发现坏字符后,如果坏字符不存在于模式串中:将模式串中坏字符最后一次出现的位置与坏字符对齐

二. Horspool算法思想

在Horspool算法中有一个关注字符,当出现不匹配的时候根据关注字符的情况对模式串进行移动

(1)关注字符为模式串最后一个字符与主串对应的字符,模式串与主串从后向前匹配

(2)当出现坏字符时,若关注字符不存在于模式串中: 将模式串的头字符与关注字符后一位对齐

(3) 当出现坏字符时,若关注字符存在于模式串中: 将模式串中关注字符最后一次出现的位置与坏字符对齐

三.Sunday算法思想

Sunday算法与Horspool算法思想极为相像,总的来说有两点不同

(1) 模式串与主串从前向后匹配

(2) 关注字符为模式串最后一个字符与主串对应的字符的后一个字符

bm坏字符 , Horspool算法 以及Sunday算法的不同的更多相关文章

  1. 文本比较算法三——SUNDAY 算法

    SUNDAY 算法描述: 字符串查找算法中,最著名的两个是KMP算法(Knuth-Morris-Pratt)和BM算法(Boyer-Moore).两个算法在最坏情况下均具有线性的查找时间.但是在实用上 ...

  2. ACM -- 算法小结(五)字符串算法之Sunday算法

    1. Sunday算法是Daniel M.Sunday于1990年提出的一种比BM算法搜索速度更快的算法. 2. Sunday算法其实思想跟BM算法很相似,只不过Sunday算法是从前往后匹配, 在匹 ...

  3. 通用高效字符串匹配--Sunday算法

    字符串匹配(查找)算法是一类重要的字符串算法(String Algorithm).有两个字符串, 长度为m的haystack(查找串)和长度为n的needle(模式串), 它们构造自同一个有限的字母表 ...

  4. 数据结构 Sunday算法

    Sunday算法是Daniel M.Sunday于1990年提出的字符串模式匹配算法.相对比较KMP和BM算法而言,简单了许多. Sunday算法的思想类似于BM算法中的坏字符思想,有点像其删减版.差 ...

  5. Sunday算法浅谈

    一.Sunday算法简介 Sunday算法在我看来比起Kmp和bm都更加容易理解,代码实现也更加简洁.Sunday算法由Daniel M.Sunday在1990年提出,它的思想跟BM算法很相似只不过S ...

  6. 实践中更高效、实现起来相对简单的基于末尾坏字符原则的BM算法实现

    之前网上看的若干算法,无非两个原则:坏字符原则.好后缀原则.按照算法所述实现了一个版本,但发现其效率还不如本文所述的实现方式.个人分析效率较低的原因可能是因为不断地向前找坏字符或者好后缀来确定跳跃距离 ...

  7. BF、KMP、BM、Sunday算法讲解

    BF.KMP.BM.Sunday算法讲解 字串的定位操作通常称作串的模式匹配,是各种串处理系统中最重要的操作之一. 事实上也就是从一个母串中查找一模板串,判定是否存在. 现给出四种匹配算法包括BF(即 ...

  8. 字符串匹配的sunday算法

    sunday算法核心思想:启发式移动搜索步长! SUNDAY 算法描述: 字符串查找算法中,最著名的两个是KMP算法(Knuth-Morris-Pratt)和BM算法(Boyer-Moore).这里介 ...

  9. 字符串匹配 - sunday算法

    常见的字符串匹配算法有BF.KMP(教科书中非常经典的).BM.Sunday算法 这里主要想介绍下性能比较好并且实现比较简单的Sunday算法 . 基本原理: 从前往后匹配,如果遇到不匹配情况判断母串 ...

随机推荐

  1. 顶级Kagglers的心得和技巧

    这是一篇笔记,课程来自Coursera上的How to Win a Data Science Competition: Learn from Top Kagglers 本篇可以算是顶级Kaggler大 ...

  2. CodeForces 1144D

    原题https://vjudge.net/problem/CodeForces-1144D /*求序列就经过几次step变成同一个数, 其实能发现一个数经过step1或者step2变成相邻的数, 所以 ...

  3. 参考 ZTree 加载大数据量。加载慢问题解析

    参考 ZTree 加载大数据量. 1.一次性加载大数据量加载说明 1).zTree v3.x 针对大数据量一次性加载进行了更深入的优化,实现了延迟加载功能,即不展开的节点不创建子节点的 DOM. 2) ...

  4. MS SQL Server 2014,sa登录失败问题

    1.用Windows身份验证登录 2.服务器属性-安全性  3.进入服务,重启所有SQL服务

  5. Dockerfile深度剖析

    Dockerfile主要是用来定制镜像   Dockerfile指令集 FROM ###指定基础镜像第一条指令.scratch是虚拟的镜像,表示一个空白的镜像. FROM centos:7.5 MAI ...

  6. Python - isinstance()更深刻的理解

    起因经过 今天翻collections.abc的文档时,我知道list的实例在逻辑上(因为duck typing 鸭子类型)是Container和不能hash的(因为list可变),就试下面的代码是否 ...

  7. PLL

    PLL(Phase Locked Loop): 为锁相回路或锁相环,用来统一整合时脉讯号,使内存能正确的存取资料.PLL用于振荡器中的反馈技术. 许多电子设备要正常工作,通常需要外部的输入信号与内部的 ...

  8. 抽象语法树 Abstract syntax tree

    什么是抽象语法树? 在计算机科学中,抽象语法和抽象语法树其实是源代码的抽象语法结构的树状表现形式 在线编辑器 我们常用的浏览器就是通过将js代码转化为抽象语法树来进行下一步的分析等其他操作.所以将js ...

  9. vue updated

    updated方法的触发条件———— 当data中定义的数据有变化时就会加载updated方法

  10. django入门(二)MTV开发模式

    MTV开发模式,顾名思义,M是models,T是templates,V是view. 之前的教程没有牵扯到html,然后今天将告诉你如何转到自己做的静态页面 首先还是先创建一个app,python ma ...