关于KMP的理解

关于KMP算法的一些理解 (next数组的代码理解) next [ ] 的代码理解 阅读详情

1、推荐阮一峰的博客,通俗易懂。(直接点进去看)

2、理解next数组

3、理解前缀和后缀

代码模板:

#include <stdio.h>
#include <string.h>
char a[1000000],b[1000000];//a是文本串,b是模式串 
int next[1000000];//期待的next数组 
int main()
{
	int i,j,k;
    gets(a+1);
	gets(b+1);//输入 
    int L1=strlen(a+1); //计算长度 
	int L2=strlen(b+1);
	//int next[1000000];
    next[0]=-1;//首位赋值-1 
    for(i=1;i<=L2;i++)//遍历一遍 
    {
	    k=next[i-1];//k初值是-1 ,第二次是0, 
        while(k!=-1&&b[k+1]!=b[i]) //当k不是-1并且 b[1]!=b[2]此处判断k是否为-1的原因在于,如果回跳到第一个字符就不用再回跳了
		    k=next[k];//若 b[1]!=b[2],k=next[0]=-1, 通过自己匹配自己来得出每一个点的next值
        next[i]=k+1;//next[1]=0, next[2]= 
    }
    for(i=0;i<=L1;i++)
    {
    	j=0;//j可以看做表示当前已经匹配完的模式串的最后一位的位置,也可以理解为j表示模式串匹配到第几位了
        if(j==L2) printf("%d\n",i-L2+1);
        while(j&&a[i+1]!=b[j+1]) j=next[j];//如果失配 ,那么就不断向回跳,直到可以继续匹配 
        if(a[i+1]==b[j+1]) j++;//如果匹配成功,那么对应的模式串位置++ 
    }
    return 0;
}

时间复杂度:Θ(m+n)

每次位置指针i++时,失配指针jj至多增加一次,所以jj至多增加len次,从而至多减少len次,所以就是\Theta(len_N + len_M) ==Θ(N+M)的

TLV61070ADBVR:超低输入电压升压芯片的工程实践指南 同步升压DC-DC转换器是嵌入式系统电源管理的核心组件,其性能边界常由启动电压、轻载效率与静态电流共同定义。当电池供电设备进入毫瓦级功耗阶段,传统方案因冗余设计反而加剧能耗,而具备0.5V超低启动能力与25μA超低静态电流的同步升压芯片,成为延长纽扣电池或碱性电池寿命的关键技术杠杆。这类器件通过集成优化的MOSFET布局、自适应断续模式(DCM)及严苛的PCB热与噪声控制,实现在极低压差下的高效率能量转换,广泛应用于蓝牙耳塞、智能门锁、工业传感器等对续航与可靠性要求严苛的场景。TLV61070ADBVR正是 阅读详情

相关推荐

Windows安装Pytorch3d

pytorch和pytorch3d版本对应关系如下:https://github.com/facebookresearch/pytorch3d/releasescuda和NVIDIA CUB版本对应关系如下:https://github.com/NVIDIA/cub/releases?page=1本人配置如下:GPU:1050TiCUDA:11.1python:3.8。

Snakewood的博客 4287

通俗理解KMP算法

前言      因为最近在刷剑指,看到有大神用自动机,然后就研究了下,进而看了看KMP算法,但是很多资料感觉太啰嗦,看起来着实有点费劲,所以,结合自己的理解,想写一篇简易通俗的KMP。      ☆☆☆ 算法目录导航页,包含基础算法、高级算法、机器学习算法等☆☆☆      1.KMP的定义     KMP其实就是一种改进的字符串匹配(查找)算法,为什么叫KMP呢,是因为其发现者Knuth-M...

守得云开见月明 965

从涡流求解器到瞬态场:Maxwell 3D里无线充电仿真,选对求解器能省一半计算时间

本文深入探讨了Maxwell 3D在无线充电仿真中涡流求解器与瞬态求解器的选择策略,帮助工程师优化计算效率与精度。通过对比分析两种求解器的适用场景、性能差异及实战技巧,揭示如何根据频率特性、材料非线性和动态过程需求做出精准选择,可节省高达50%的计算时间。特别针对3D线圈模型的无线充电系统设计提供了专业建议。

weixin_26861329的博客 233

对于KMP的理解,hdu 1711

今天刚接触到KMP,很是棘手,于是百度了一篇广受关注的文章,看了许久,倒是明白一丁点走的过程,不过不太明白为什么会这样走,于是就想找到试题来实践一下,提到是找到了,很简单的题,不过对我来说还是有一定难度的,毕竟连理论还没看懂,于是便按理论上来写,很久了也没见运行正确过,于是有百度了一篇代码,看了之后很是震惊,原来我只写了开始,于是看了他的代码,虽然暂时不太懂为什么这样走,不过我还是相信慢...

116

用Python+OpenCV给斗地主做个‘外挂’:手把手教你写个桌面记牌器(附源码)

本文详细介绍了如何使用Python和OpenCV开发一个智能斗地主记牌器,包括环境搭建、图像采集与预处理、扑克牌识别技术及PyQt5界面设计。通过实战案例,帮助开发者掌握图像处理与界面开发的结合应用,提升游戏辅助工具的编写能力。

weixin_29079643的博客 547

Open-Sora代码详细解读(1):解读DiT结构

目前开源的DiT视频生成模型不是很多,Open-Sora是开发者生态最好的一个,涵盖了DiT、时空DiT、3D VAE、Rectified Flow、因果卷积等Diffusion视频生成的经典知识点。本篇博客从Open-Sora的代码出发,深入解读背后的原理。

沉迷单车的追风少年 2266

【KMP】个人理解总结

KMP总结 这几天复习kmp算法,发现自己看别人的讲解又看糊涂了,所以还是需要将别人的思想理解之后,自己再输出一边。 KMP的来源 KMP的出现是为了优化朴素模式匹配算法,那么朴素模式匹配算法是什么?又存在什么缺点呢? 朴素模式匹配算法 ,就是将主串中与模式串长度相同的子串提取出来,挨个和模式串对比,当子串与模式串某个对应字符不匹配时,就立即放弃当前子串,检索下一个子串。 /* 字符串下标始于0 ...

Floraqiu的博客 394

LSTM+Transformer混合模型时间序列预测实战教学

LSTM+Transformer混合模型时间序列预测实战教学 毕业设计

8220

关于我对kmp算法的理解

2

m0_52510907的博客 242

NVIDIA Isaac GR00T N1 人形机器人强化学习入门教程(二)详细步骤

LeRobot 格式 1.1 加载数据集 要加载数据集,我们需要定义以下 3 项内容: 在数据中显示图像帧 我们还可以对 LeRobotSingleDataset 类中的数据进行一系列转换。下面展示了如何对数据进行转换。 现在看看应用转换后的数据有何不同。 例如,对状态和操作进行规范化和串联,对视频图像进行裁剪、调整大小和颜色抖动。 二、GR00T 推断 本教程介绍如何使用 GR00

2506_90492529的博客 3014

2026AI漫剧放心大胆做!小白也能轻松出片(附保姆级教程)

要是在2025,我大概率会劝他再等等,毕竟那时工具还没这么顺手。但到了2026年的今天,我的回答得很干脆:放心去做,绝对没问题。这一年多来,AI漫剧这块的变化真可谓翻天覆地。过去你想拍个像样的短片,哪怕再简陋,也得凑齐拍摄设备、找场地、找演员,后期剪辑更是折磨。但现在,时代变了,AI已经把创作的门槛踏平了。你不需要请演员,也不用操心灯光布景,更不用为剪辑特效烧钱。一个人,一台电脑,花几天时间就能做一部完整的AI漫剧。你只要有有想表达的故事,突发的灵感,剩下的,都能直接交给AI落地。

欢迎来到鸾姝淡月博客,专为程序员和编程爱好者打造的技术博客。我们分享编程语言趋势、开发工具、编程哲学、职业发展等,助你掌握新技术,优化技能,激发编程热情。 568

KMP算法的理解和实现

本文介绍了KMP算法的实现原理与代码实现。KMP算法通过预处理子串生成next数组,将时间复杂度从暴力匹配的O(mn)优化到O(m+n)。核心思想是利用最长公共前后缀信息,在失配时根据next数组调整子串指针而非回退主串指针。文章详细讲解了next数组的构建方法,并通过代码示例展示了KMP搜索函数的具体实现,包括失配时的指针调整策略。该算法通过避免不必要的回溯显著提高了字符串匹配效率。

m0_51150296的博客 1642

五十天精通硬件设计第6天-放大器知识及选型

运算放大器(Operational Amplifier,简称运放)是一种高增益的直流耦合差分放大器,广泛应用于信号处理、滤波、比较、积分、微分等电路中。

whm128的博客 597

简单理解KMP算法

KMP算法是迄今为止最为高效的字符串匹配算法。当然,在KMP算法出现之前,有关字符串的匹配问题当然经过了一个漫长的探索过程。从一开始最简单的朴素字符串匹配算法,到Rabin-Karp算法,再到有限自动机算法等等,可以说任何一个伟大算法的诞生都不可能是一朝一夕之功,在它之前一定有大量的理论及实验的基础。所以,想要彻底理解KMP算法最好是从头开始,对整个字符串的匹配问题有个完整的了解。但是,我在这篇博文

guoziqing506的博客 1610

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

KMP算法学习与理解

研读《大话数据结构》一书中,关于KMP算法的自我理解与代码实现。

jansonKOU的博客 1720

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

对KMP中next数组的理解

KMP算法 void get_next(String T, int *next) { int i = 1, j = 0; next[1] = 0; while ( i < T[0] ) /*T[0]中存储的是字符串的长度*/ { if (j == 0 || T[i] == T[j]) { ++ i; ++ j; next[i] = j; } else { j = next[j]; } } } 摘自《大话数据结构》 算法难点就在于对这个n

Zwn_223的博客 279

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

如何更好地理解和掌握 KMP 算法

链接:如何更好地理解和掌握 KMP 算法

hayhead的博客 172

KMP算法的简易理解

小白图文解析KMP算法。

qq_36286427的博客 372

kmp理解

从头到尾彻底理解KMP 作者:July 时间:最初写于2011年12月,2014年7月21日晚10点 全部删除重写成此文,随后的半个多月不断反复改进。 ~~~~~~~~~~ 其实我觉得kmp最难理解的是next数组的理解,其他都还好啦,这边文章对next数组的获取讲的很好啦 ~~~~~~ 1. 引言     本KMP原文最初写于2年多前的2011年

EnderSnowBaby 1067

KMP算法的理解

KMPKMP的理解前缀 和后缀的理解next算法的理解如何求next数组方法1:方法2:KMP算法的理解 KMP的理解 前缀 和后缀的理解 主串: a b a b c a b c a c b a b 子串: a b c a c KMP :利用比较过的信息,使子串不需要回溯,仅将字串向后滑动到一个合适的位置,并从这个位置开始与主串进行比较。 下面开始进行KMP匹配 第一次匹配: a b a b c a b c a c b a b a b c 是不

qq_40837795的博客 2338

从头到尾彻底理解KMP

July博客:从头到尾彻底理解KMP

Lavi的专栏 376

KMP 算法(1):如何理解 KMP

转自:点击打开链接 KMP 算法(1):如何理解 KMP 2017 年 03 月 05 日• 阅读: 6733•技术 系列文章目录 KMP 算法(1):如何理解 KMPKMP 算法(2):其细微之处 一:背景展开目录 给定一个主字符串(以 S 代替)和模式串(以 P 代替),要求找出 P 在 S 中出现的位置,即串的模式匹配问题。今天来介绍解决这一问题的常用算法之一,...

aaf76097的博客 151

个人理解的kmp算法

kmp还是挺难上手的,看书加看博客,看了有五六篇才理解,看了大概四个小时。。 #include <iostream> #include <string.h> #include <stdio.h> using namespace std; //next数组本质是模式串中的前缀和后缀的相等数 int next[555]; //得到next数组的过程也是模式串自身匹配的过程 void GetNext(char *p) { int plen=strlen(p);

zhoucheng_123的博客 168

关于KMP算法,我是这样理解的

一、问题的提出 假设有一个文本串S、和一个模式串P、若想要查找P在S中第一次出现的位置,有什么方法? 二、暴力匹配算法 暴力匹配算法可能是解决此类问题最直观的思路,容易想到,但是其效率不高,时间复杂度为O(m*n),因此会想去寻找更优化的方法。 思路 如果当前字符匹配成功,那么指向S的下标i和指向P的下标j都进行加一操作,匹配下一个字符 如果当前字符匹配不成功,那么指向S的下标i回溯(i = i - ( j - 1 ))指向P的下标j被置为0 三、KMP算法 1.暴力匹配算法不好的地方在于,假如匹配到模式

UE引擎开发工程师 562

KMP算法理解分析

KMP算法

Mibbp的博客 350
上一篇: 用队列按层序输出二叉树
下一篇: 数据结构小结
【你不认识我】
博客等级 码龄9年 38粉丝 133原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值