• ⼀、模式匹配的概念
    模式匹配是数据结构中字符串的⼀种基本运算,给定⼀个⼦串,要求在某个字符串中找出该字串相同的所有⼦串,这就是模式匹配。其中原
    字符串成为⽬标串,给定的⼦串为模式串。
  • ⼆、常⽤的模式匹配算法 1、朴素的模式匹配算法(也称简单匹配算法,Brute-Force简称BF算法) A.算法思想:
    核⼼是穷举法。从⽬标串的的第⼀个字符起与模式串的第⼀个字符⽐较,若相等,则继续对字符进⾏后续的⽐较,否则⽬标串从第⼆个字符
    起与模式串的第⼀个字符重新⽐较,直⾄模式串中的每个字符依次和⽬标串中的⼀个连续的字符序列相等为⽌,此时称为匹配成功,否则匹 配失败。
  • 2、KMP匹配算法
    Knuth-Morris-Pratt算法(简称KMP),是由D.E.Knuth、J.H.Morris和V.R.Pratt共同提出的⼀个改进算法,消除了朴素的模式匹配算法
    中回溯问题,完成串的模式匹配。
    A.算法思想:
  • 设⽬标串为s,模式串为t, i、j 分别为指⽰s和t的指针,i、j的初值均为0。 若有 si =
    tj,则i和j分别增1;否则,i不变,j退回⾄j=next[j]的位置 (
    也可理解为串s不动,模式串t向右移动到si与tnext[j]对齐 ); ⽐较si和tj。若相等则指针各增1;否则 j
    再退回到下⼀个j=next[j]的位置(即模式串继续向右移动 ),再⽐较 si和tj。

依次类推,直到下列两种情况之⼀:

  • 1)j退回到某个j=next[j]时有 si = tj,则指针各增1,继续匹配;
  • 2)j退回⾄ j=-1,此时令指针各增l,即下⼀次⽐较 si+1和 t0

数据结构---模式匹配算法相关推荐

  1. [数据结构]模式匹配算法--KMP算法详解

    目录 一. 模式匹配 二. 模式匹配算法 1. 朴素模式匹配算法 2. KMP算法 1). KMP算法的优势 2). KMP算法的原理 3). next数组的构造 4). 利用next数组匹配的过程 ...

  2. 数据结构笔记(十四)-- 串的模式匹配算法

    串的模式匹配算法 一.普通模式匹配算法 1.算法解析 普通模式匹配算法,其实现过程没有任何技巧,就是简单粗暴地拿一个串同另一个串中的字符一一比对,得到最终结果. 例如,使用普通模式匹配算法判断串 T( ...

  3. 【数据结构】字符串 模式匹配算法的理解与实现 Brute Force算法(BF算法)与KMP算法 (C与C++分别实现)

    #笔记整理 若不了解串的定义,可至: 串(string)的定义与表示 查看 串的模式匹配算法 求子串位置的定位函数 Index(S, P, pos) 求子串的定位操作通常称作串的模式匹配(其中子串P称 ...

  4. 【2023王道数据结构】【字符串匹配算法】字符串的KMP(next数组)模式匹配算法C、C++完整实现(可直接运行)

    ~~~笔锋至此又怎能平淡而终,故事开始便不承认普通✌✌✌ ✌ 题目及题解持续更新中 [2023王道数据结构目录]课后算法设计题C.C++代码实现完整版大全 题目: 字符串的KMP(next)模式匹配算 ...

  5. 数据结构(C语言版)严蔚敏(字符串的模式匹配算法--KMP算法)

    数据结构(C语言版)严蔚敏(字符串的模式匹配算法–KMP算法) 1.暴力匹配算法 // 暴力匹配算法 int Index2(SString S,SString T) {// S是主串,T是子串int ...

  6. 数据结构——基于字符串模式匹配算法的病毒感染检测

    实验四 基于字符串模式匹配算法的病毒感染检测 [实验目的] 1.掌握字符串的顺序存储表示方法. 2.掌握字符串模式匹配BF算法和KMP算法的实现. [实验内容] 问题描述 医学研究者最近发现了某些新病 ...

  7. (王道408考研数据结构)第四章串-第二节:串的模式匹配算法(朴素和KMP)

    串的匹配是一个非常重要的话题,我们在Word中经常使用的搜索功能所反映的就是串的匹配问题,相应的算法也是层出不穷,各有优缺点,本节主要涉及两种算法:朴素算法和KMP算法 在讲解之前,有几个术语需要掌握 ...

  8. java中KMP模式,Java数据结构-串及其应用-KMP模式匹配算法

    串(string)是由零个或多个宇符组成的有限序列,又名叫字符串. 定义的解释: ??串中的字符数目n称为串的长度,定义中谈到"有限"是指长度n是一个有限的数值. ??零个字符的串 ...

  9. 数据结构:KMP算法 串的模式匹配算法(全网最详细)

    目录 KMP模式匹配算法 简述 KMP模式匹配算法原理 如果人眼来优化的话,怎样处理         接下来我们自己来发现j的移动规律: 这一段公式证明了我们为什么可以直接将j移动到k而无须再比较前面 ...

最新文章

  1. python画指数函数图像_python实现画出e指数函数的图像
  2. [Bootstrap-插件使用]Jcrop+fileinput组合实现头像上传功能
  3. poll接口《来自Linux驱动程序开发实例》
  4. WdatePicker日期控件使用与值获取,以及选择日期完毕触发事件
  5. 疑似一加7 Pro 5G版通过3C认证:配备30W快充头
  6. Mac下安装MySQL 5.7.28并且修改root密码
  7. ubuntu14.04 解决屏幕亮度无法调节的问题
  8. 吃不惯的川味麻辣×××
  9. 【Python网络爬虫实战篇】关于在青果教务网络管理系统爬取学生成绩的分析及代码展示——以郑州轻工业大学(zzuli)教务网络管理系统为例
  10. 新手接触使用Hashcat 破解Office加密文档
  11. Android 梯形TextView
  12. JavaScript 【99乘法表】【案例】
  13. 【情暖寒冬 让爱同行】中创算力开展“寒冬送温暖”公益活动
  14. 1-9DCL语言与提权逻辑
  15. 影视后期制作画面、声音、效果如何平衡?
  16. 织梦教程:ms在channel标签中调用typeid无效解决办法
  17. PLSQL-Developer工具
  18. 个性化推荐十大挑战[科普+完整版本]-来自周涛科学网博客
  19. 江苏科技大学计算机科学与工程,江苏科技大学
  20. fedora Linux 配置阿里云开源镜像站

热门文章

  1. 简述时钟周期、机器周期、指令周期的概念及三者之间的关系
  2. Quill.js 专题
  3. 太强了!GitHub开源了1000本技术类的电子书,直接刷爆朋友圈!
  4. 群晖NAS配置阿里云盘同步
  5. yml读取下划线丢失问题
  6. 查看mysql5.7初始密码_MySQL5.7初始密码查看及重置
  7. 数据结构基础-周末舞会-----详细题解
  8. 周末舞会(队列实现)
  9. Photoshop插件-锐化-局部选区锐化-脚本开发-PS插件
  10. 电脑桌面云便签怎么生成便签二维码和其他人共享便签内容?