1、BDM算法使用后缀自动机搜索子串。后缀自动机决定字符串U是否为模式串P的子串图示如下:
1)可以在O(|U|)时间内确定个字符串U是否为字符P的子串,U是P的子串,当且仅当P的后缀自动机中存在一条要从初始状态开始的标号为U的路径,注意该路径不一定要到达终止状态。从上图可看出,CB也是CBA的子串。
2)可以识别模式串的所有后缀。从初始状态到某个终止状态的路径上字符组成的字符串是模式串P的一个后缀。
3)模式串P的对应的后缀自动机可以O(m)完成。
2、在文本T=T1 T2 T3。。。。。Tn中搜索模式串P=P1 P2。。。Pm
1)首先构建起模式串P的反转P(rv)=Pm P(m-1)....P1对应的后缀自动机,反转的目的是为了得出P的前缀自动机。
2)算法使用后缀自动机在搜索窗口中从后向前搜索模式串的子串。搜索过程如果到达了终止状态,并且对应的不是整个模式中,则它在窗口中的位置存在变量last中,此时,可以说找到了当前识别的P的最长前缀,因为是P的反转的最长后缀。该缀从last开始到窗口尾处结束
3、搜索过程以下2种可能的方式结束:
1)在识别一个子串时失败了,即读入一个字符σ,在P的反缀自动机的当前状态没有σ转移,这时将窗口向右移动,使得它的起始位置与last对齐
2)抵达了窗口的起始位置,意味着整个模式串P被成功匹配,报告一个成功匹配,并像1)一样移动窗口。

字符串匹配-BDM算法相关推荐

  1. kmp算法详解php,php中字符串匹配KMP算法实现例子

    KMP算法是一个比较高级的算法了,加了改进了,下面我们来在php中实现KMP算法,希望例子对各位同学会带来帮助哦. kmp算法是一种改进的字符串匹配算法,由D.E.Knuth与V.R.Pratt和J. ...

  2. 字符串匹配——BMH算法

    字符串匹配--BMH算法 给定主串T和模式串P,返回P在T中首次出现的位置,如果P不存在于T中,返回-1. 这样的问题就是字符串匹配问题,这里给出BMH算法的思想. 设主串T的长度为n,模式串P的长度 ...

  3. 字符串匹配——RabinKarp算法

    字符串匹配--RabinKarp算法 给定主串T和模式串P,返回P在T中首次出现的位置,如果P不存在于T中,返回-1. 这样的问题就是字符串匹配问题,这里给出RabinKarp算法的思想. 设主串T的 ...

  4. 【超详细图解】字符串匹配Boyer-Moore算法:文本编辑器中的查找功能是如何实现的?

    关于字符串匹配算法有很多,之前我有讲过一篇 KMP 匹配算法:图解字符串匹配 KMP 算法,不懂 kmp 的建议看下,写的还不错,这个算法虽然很牛逼,但在实际中用的并不是特别多.至于选择哪一种字符串匹 ...

  5. 两个字符串匹配度算法

    在工作过程中,需要用到两个字符串匹配度算法,网上参考一些资料,写了一个匹配度算法类,项目中用到了而且效果很不错,今天给大家分享. 可以直接复制到你的项目中,就一个调用函数,非常简单. public c ...

  6. C++实现字符串匹配KMP算法

    文章目录 1. 概述 2. 代码实现 3. 代码测试 1. 概述 Kmp算法的介绍及思想参阅下面两篇文章: 字符串匹配KMP算法 算法)通俗易懂的字符串匹配KMP算法及求next值算法 2. 代码实现 ...

  7. 字符串匹配 KMP算法

    问题描述:字符串匹配即查找待匹配字符串(模式串)p在主串s中的位置.一般处理这种问题往往采用简单粗暴的方法--暴力匹配法.所谓暴力匹配法,就是对主串s的每一个字符与要匹配的字符串p的每个字符进行逐一匹 ...

  8. 字符串匹配——KMP算法

    字符串匹配--KMP算法 ​ 字符串匹配是计算机编程中最常使用到的基础算法之一.字符串匹配相关的算法很多,Knuth-Morris-Pratt(KMP)算法是最常用的之一.最近在学习KMP算法,学习了 ...

  9. 字符串匹配——Sunday算法

    字符串匹配--Sunday算法 基本思想及举例 Sunday算法由Daniel M.Sunday在1990年提出,它的思想跟BM算法很相似:1 只不过Sunday算法是从前往后匹配,在匹配失败时关注的 ...

最新文章

  1. 【官网搭建】在网站首页底部添加备案号链接至工信部首页及版权所有。
  2. 7.1 pdo 宝塔面板php_宝塔面板配置阿里云服务器步骤和教程
  3. 最少拦截系统(dp)
  4. 如何查看mysql连接相关参数
  5. bulk_create 批量插入数据
  6. Spring boot配置文件随机数
  7. 深入浅出理解索引结构
  8. 操作系统hpf算法事例_操作系统中常见算法汇总
  9. linux gd结构体,U-Boot中gd的定义和使用
  10. 内容 超链接_Word高效办公:自动创建带超链接的内容目录和图表目录
  11. 鸿蒙系统下载地址_华为鸿蒙系统下载
  12. Redis实用教程-----------菜鸟快速入门
  13. t3财务软件服务器停止运行,用友T3标准版已停止工作应该怎么办
  14. java 场景面试题_Java面试场景整理收录
  15. 根据浏览器的默认语言来切换中英文页面
  16. 让 Tapd 的源码关联功能支持 Gitee 平台
  17. OCO-2卫星数据批量化下载教程
  18. HTML5期末大作业:动漫网站设计——迪斯尼公主(6个页面) HTML+CSS+JavaScript 动漫网页HTML代码 学生网页课程设计期末作业下载 动漫大学生网页设计制作成
  19. React中createRef()和useRef()的使用方法
  20. 更改 IE 收藏夹 位置

热门文章

  1. 永恒之塔linux服务端,最新永恒之塔单机版7.8 德国最新服务端,内附大量图片教程...
  2. php 扩展开发的好处,关于PHP扩展开发(收藏)
  3. 特斯拉供应链全景图详细分析!
  4. 2014年计算机上机试题,2014计算机二级上机试题及答案.doc
  5. 【CSS3】设置超链接样式
  6. C++哈希表最详细解决
  7. Strom本地环境搭建
  8. flume-Kafka-Strom架构的搭建及使用
  9. 安装Adobe Photoshop 2014 出现的界面字体太小问题的解决
  10. web worker 的使用方法和实际场景