串模式匹配算法-我的理解

串的模式匹配小结 ==第一次学数据结构,大家相互交流,欢迎批评指正。谢谢~ 阅读详情

         我今天才真正的看懂了,串模式匹配算法KMP,我以前学过但是没有深入的理解。今天我让自己理解了,

其实说到底要特别注意KMP算法和其中的NEXT值的求法是一个递推的过程,首先来看看最简单的匹配算法的形式。

int  index(HString  s, HString  T, int pos)

{

      int i=pos; int j=1;

    while(i<=s.length()&&j<T.length())

{              if(s.ch[i]==T.ch[j])

                           ++i;  ++j;

               else{

                           j=i-j+2;//    这是当指针i与j的字符串不配时要退回从模式串的第一个数又开始一次的匹配。

     }

               return i-T.length();

}

从这个简单的匹配来看,很容易理解。只要记得当指针所指的模式串与原串不匹配时要记得退回指针一个个的

匹配。这样从算法的分析来看这个算法的o(T)的最坏时间到了M*N的级别。所以要想到的问题怎么使这个原串的的指针不在退回去,直接往前移。这个时候算法大师想出了一种采用标记模式串的方式来解决指针回嗍的问题。也就是NEXT函数的问题。

     其实KMP算法着重就在于理解这个next函数值使怎么样标记的。首先我们来next。其实它就是一个标记器。所以它用数组来表示。首先我们来看这个函数。

 void  GetNext(HString S,HString T,int next[])

{

    next[1]=0;// 这个是规定。主要的作用要理解它是做什么的。

   int i=1,j=0;

  while(i<=S.length()&&j<=T.length())

{

      if(j==0||S.ch[i]==T.ch[j])

         {         ++i; ++j,   next[i]=j;  }   这一句就是做标记了,

     else   j=next[j];//那为什么不等的时候要j的值要回到next[j]去呢?

}

}

   我前面说了要理解这个还要理解它是一个递推的过程。next[1]=0就是给它构造的原始的值。以至能构成递推的形式来标记next[i]的值。

    首先来看是怎么递推的。

 例。

   123456789   i的位置。

   ababcabac    //模式串。这里的指针标记是i;

     ababcabac //模式串。设这是的指针标记是j

 我们用模式串跟自己来比。从函数来看由于开始j=0。然后++i,+j;所以从i=2.j=1开始。因为第一个不用比了肯定是一样的。

  则有。

   

  

基于字符串模式匹配算法的病毒感染检测问题 实验四(源代码+实验报告) 《数据结构(C语言版 第2版)》严蔚敏 实验四 基于字符串模式匹配算法的病毒感染检测问题,含实验报告 立即下载

相关推荐

字符串模式匹配实验报告

C语言版本的字符串模式匹配,主要适用于学数据结构的孩纸,数据结构实验报告

数据结构-串-模式匹配算法(KMP算法)

KMP 算法的时间复杂度为 O(m+n),其中 m 是模式串的长度,n 是主串的长度。KMP 算法的空间复杂度为 O(m)。不论在最好、最坏还是平均情况下,KMP 算法的效率都优于简单的暴力匹配算法,特别是在处理长字符串时。int j = 0;:用于遍历模式串S的当前位置。:初始化next数组的第一个元素为-1,表示模式串的第一个字符之前没有任何字符(即没有前后缀)。int k = -1;:作为辅助变量,用于在next数组中回溯。初始化为-1,与next[0]

yandadzf的博客 2487

PostgreSQL 在 Windows操作系统 无管理员权限情况下的部署详解

但是因为使用默认5432端口,我们修改了端口,所以连接报错,需要修改local连接信息,右键-属性修改相应信息即可,方式同上。(也别太任意吧,个人习惯工具放在不包含中文及特殊字符的目录,另外目录名尽量简短,避免不必要的麻烦)图中我解压到了自己的tools\postgresql18。1)如果想修改默认的5432端口,找到初始化目录中的(上面的tools\postgresql18\。此处替换成你的实际目录\tools\postgresql18\pgsql\pgAdmin 4\runtime。

dong_zhi2328的博客 1117

八大排序算法

一.选择排序 选择排序的逻辑非常简单,就是循环遍历所有还未排序的数据,然后每轮循环取出最大或最小的数据置于已排序序列的末位,非常稳定,因为它不会申请额外空间,所以空间复杂度为O(1)。算法逻辑上只用两层循环,所以时间复杂度为O(n^2). 代码实现 ...

bujxue的博客 958

CentOS 7下Multipath多路径存储的实战配置与性能优化

本文详细介绍了在CentOS 7系统中配置与优化Multipath多路径存储的完整实战流程。从安装部署、核心配置文件解读,到性能调优与生产环境避坑指南,全面解析如何利用Device Mapper Multipath构建高可用、负载均衡的存储链路,提升存储系统可靠性与I/O性能。

weixin_29278805的博客 320

ENVI学习总结(十二)——基于改进的 CASA 模型反演 NPP

基于改进的 CASA 模型反演 NPP 数据为地理空间数据云提供的 TM 影像,其具体信息如图 1 所示。该实验中所使用的 TM 数据已进行过 QUAC 快速大气校正,来消除大气和光照等因素对地物反射的影响。Landsat 主题成像仪(TM)是 Landsat4 和 Landsat5 携带的传感器,每 16 天扫描同一地区,即 16 天覆盖全球一次。 TM 影像包含 7 个波段,波段 1-5 ...

Arcgiser的博客 3万+

KMP算法(研究总结,字符串)

KMP算法(研究总结,字符串) 前段时间学习KMP算法,感觉有些复杂,不过好歹是弄懂啦,简单地记录一下,方便以后自己回忆。 引入 首先我们来看一个例子,现在有两个字符串A和B,问你在A中是否有B,有几个?为了方便叙述,我们先给定两个字符串的值 A="abcaabababaa" B="abab" 那么普通的匹配是怎么操作的呢? 当然就是一位一位地比啦。(下面用蓝色表示已经匹配,黑色表示匹配...

dipinzhu4111的博客 5242

大数据之数据抽取架构演变过程

而当时我们搭建的Flink集群是基于YARN进行资源管理和调度的,因为YARN中不仅仅包含着FLInk的资源,也有hive,zoozie,hdfs等等的资源,这样容易造成yarn资源的过度使用,容易引起整个底座的cpu以及内存的使用问题,经过排查,主要是由于FLink的使用资源引起的,所以后续就把Flink从整个集群中剥离出来,进行资源的隔离,最后Flink采用了StandAlone HA部署(但是这个目前还是存在问题,后续根据项目进行优化)'topic' = '表名',二、数据抽取架构的演变。

天道酬勤 867

KMP算法 串的模式匹配算法优秀总结

转载大神的博客受益匪浅 这几天学习kmp算法,解决字符串的匹配问题,开始的时候都是用到BF算法,(BF(Brute Force)算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符;若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果。BF算法是一种蛮力算法。)虽然

72 73 76 89 82 84 89 81 5095

微信小程序 - 最新将页面可分享到朋友圈功能,小程序实现分享到朋友圈功能,开启分享给好友及分享朋友圈功能(微信小程序怎么分享到朋友圈?详细流程及示例代码教程)

没有设置过分享朋友圈功能的小程序,分享朋友圈按钮是灰色且无法点击。小程序 vue2 | vue3 版本语法都能使用,跟着教程复制代码运行即可。如下图所示,将页面开启分享后便可由用户转发出去。

🏆 前端领域优质创作者 2417

Autosar软件组件分析及ARXML文件分析

Autosar软件组件分析及ARXML文件分析

专注汽车软件开发、AutoSAR、车载以太网、SOA、EE架构。 3601

深入理解KMP的串模式匹配算法

文章目录零、tips:一、问题描述:二、KMP算法的核心思想:三、什么是next表?怎么构造一个KMP算法的next表?1. 什么是next表?构造next表的重要依据:2. 如何将以上的思路具体到怎么构造一个KMP算法的next表呢?四、实际的代码实现隐藏了什么问题?1. 模式串并不是真的移动,next表的值又要怎么表示呢?答:next表记录的是模式串的下标向前移动的数值(这个值恰好等于模式串的匹配成功部分的相同前后缀的最大值)。2. 知道了next表的值代表的是什么了?那怎么构造一个next表简明的构造

weixin_43338173的博客 329

RAG系统中Reranker模型选型实战

本文详细介绍了RAG系统中Reranker模型选型实战,希望能对学习RAG的同学们有所帮助。 文章目录 1. 前言 2. 思路解析 3. 测评数据集构建 3.1 步骤一 3.2 步骤二 3.3 数据示例 3.4 总结 4. 实战代码 4.1 本地模型 4.2 使用第三方的Reranker模型API

herosunly的博客 17万+

KMP算法串模式匹配Next数组的简单理解

通过不断的归纳,我发现,当第j位不匹配时,如果前j-1的最长前后缀为0,则移动到第1位,如果最长前后缀(小于本身)为k,则移动到第k+1位。本文是基于归纳假设的,经验证与课本一直,没有给出证明,只是为了帮助理解,如果有错误,敬请指正,有些书本上数组是从0号开始的,本文是从1开始的,并初始化next[1]=0。我们可以由Next数组的本质来看。那么我们可以看匹配的情况,匹配的字符为ab,那我们怎么移动这个字符呢,我们现在只能移动模式串。于是,next[3]=1,即移动到第一位,那j=4呢,同理,

2301_79339736的博客 463

国网DLT698.45协议——采集系统、数据交换(三)

物理层规定了通信单元或其他终端设备与多功能电表的通信接口,接口的物理与电气特性。常见的物理层传输方式有对于RS485、红外、载波通信等通信信道。将数据包装成可传输的帧格式。1、根据通信配置参数完成端口的初始化配置,通信状态初始化为准备接收状态,初始化相关计数器及缓冲区指针。2、链路层及控制子模块负责通信数据的收发控制,各类超时问题的处理。无通信数据接收时,定时初始化通信端口。3、完成协议帧的解析及应答。

一个bug是bug,多个bug能work 8050

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

算法 字符串匹配算法

子串的定位操作通常称为串的模式匹配。1. 朴素的模式匹配算法Native String Matching Algorithm朴素的模式匹配算法又称为暴力匹配算法(Brute Force Algorithm),采用遍历的方式进行匹配,滑动窗口总是1,会产生很多重复的比较,容易理解,但效率低。 算法思想 从目标串的的第一个字符起与模式串的第一个字符比较,若相等,则继续对字符进行后续的比较,否则目标串从

baiiu 1350

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

算法:Sunday匹配

模式串:子串的定位运算又称为串的模式匹配,是一种求子串第一个字符在主串中序号的运算。被匹配的主串称为目标串,子串称为模式串 EX1 第一步:把目标串和模式串对齐 第二步:从头部开始比较,一旦发现不匹配,直接找到主串中位于模式串后面的第一个字符,即s(因为,无论模式串移动多少步,模式串后的第一个字符都要参与下一次比较,也就是s) 第三步:找到了模式串后的第一个字符s,需要查看模式串中是否包含...

soulmate______的博客 416

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

KMP字符串匹配算法 通俗理解

我们从一个普通的串的模式匹配算法开始讲起,这样你才能更深入的了解KMP算法及其优点。 咱们先来看看普通的串的模式匹配算法是怎么进行比较的 主串 (S) a b a b c a b c a c b a b 子串 (T)a b c a c       (子串又被称为模式串

浮白 674

模式匹配KMP算法

前些日子在为目前该学习什么而苦恼,就问了一下已经从事多年软件开发的表哥,他说一个程序员要走的远,就要学好数据结构和算法,于是我就重新开始学习数据结构和算法了 拿起以前上过的数据结构看,看到第四章串的模式匹配时,颇感兴趣,就写了一下程序,实践了一下。感觉还蛮爽,于是就把以下几个重要的函数放在此处,以便后面查看和园友学习。 typedef char SString[MAX_STR_LEN + 1]

幽林孤狼 415

BF算法

子串的定位运算通常称为串的模式匹配或串匹配。串的模式匹配设有两个字符串S和T,设S为主串,也称正文串;设T为子串,也称为模式。在主串S中查找与模式T相匹配的子串,如果匹配成功,确定相匹配的子串中的第一个字符在主串S中出现的位置。 著名的模式匹配算法有BF算法和KMP算法,先介绍BF算法。 BF算法是最简单直观的模式匹配算法,模式匹配不一定从主串的第一个位置开始,可以指定主串中查找的起始位置 p...

ker的博客 1540

数据结构之串:串的模式匹配

串:串的模式匹配模式匹配的定义:实现代码: 模式匹配的定义: 实现代码: int Index(SString S,SString T,int pos){ int i = pos,j = 1; while(i <= S.length && j <= T.length){ if(S.ch[i] == T.ch[j]){ i ++; j ++; } ...

千寻瀑 359

KMP算法

大多数据结构课本中,串涉及的内容即串的模式匹配,需要掌握的是朴素算法、KMP算法及next值的求法。 本文的逻辑顺序为 1、最基本的朴素算法 2、优化的KMP算法 3、应算法需要定义的next值 4、手动写出较短串的next值的方法 5、最难理解的、足足有5行的代码的求next值的算法 所有铺垫为了最后的第5点,我觉得以这个逻辑下来,由果索因还是相对好理解的,下面写的很通俗,略显不专业… 一、...

weixin_41770606的博客 443

串的模式匹配

串的模式匹配 1.串的模式匹配---BF算法 typedef struct {   char data[MaxSize];//存放串字符   int length;        //存放串长         }SqString;           //顺序串类型   int index(SqString s,SqString t) {   int i=0,j=0

Briup-z.changhai 902

数据结构-BF算法和KMP算法

导言 BF算法和KMP算法是串的模式匹配算法。串通常说的是字符串,模式匹配简单说就是在串s1中查找串s2,为理解,把串s1叫做主串,把串s2叫做子串,也叫模式串。 一、串的定义及一些基本操作 串是仅由字符构成的有限序列,是一种特殊的线性表。 1.1 串的几个基本概念: 1. 空串:长度为零的串,空串中不包含任何字符,S='' 2. 空格串:串的元素都是空格,空格串的长度≥1;空格也属于字符,计算串的长度是也要计算在内,比如S=' ',串S由2个空格组成的字符序列,长度=2; 3. 子串:串中.

sinat_41752325的博客 1003

串

netval next的值是几 就和第几个进行比较。

qq_54405966的博客 331

简单字符串模式匹配算法的C++实现

/* * simpleIndex.cpp * Author: Qiang Xiao * Time: 2015-07-13 */ #include<iostream> #include<string> using namespace std; int simpleIndex(const string&, const string...

weixin_34232363的博客 275
上一篇: 我一定要学好算法
下一篇: 用无序链表实现字典ADT(C++描述)
Garyhou
博客等级 码龄20年 41粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值