终极KMP

PD3.0详解 协议的时序timer和counter计数 前面介绍了关于PD协议的交互,还有协议层数据各个字段的含义,但是一直没有系统的说关于协议的时序,还有部分counter,就是协议允许发送的次数,或者一些其他计数。 大师匈今天说一下关于这方面的东西,这些东西都是非常关键的东西,但是相对来说PD标准内对时序的要求还是比较宽泛,非常容易能够实现这样的要求。 Timer 1、CRCReceiveTimer 0.9~1.1ms 表示每次通信收到goodcrc的时间,必须在这个时间内收到goodcrc, 我们要注意不是在0.9~1.1ms内,而是第三方可以在这个范 阅读详情

终极KMP

终极的KMP,这次我要彻底的理解KMP
KMP真的是学习tg中的一个瓶颈
KMP的所有博客,无论是百度的,洛谷的,我都不会,肯定是我太垃圾了,不过没关系,我这次要来个终极笔记,彻底弄明白
是个狗都知道,KMP的算法就是利用失配next数组来达到这么个算法
KMP到底是用来干什么的,作为菜鸡的我,很想用一句话来总结每一个算法的作用及应用
KMP,是做字符串的匹配问题的

文本串,a a b a a b a a f
模式串,a a b a a f
我们要求的是文本串中是否出现了模式串
这是一个KMP最经典的问题
暴力的做法,我在普通KMP中也已经说明了,两层循环朴素比较,知道比较完成
这种做法无论是什么垃圾题都不会水过
如果用KMP,比如我们匹配到了f,那么我们不会从头比较,而是从匹配过的
b a a f从失配的地方开始
那么我们为什么从b开始
这就是KMP的瓶颈和核心了
因为我们从最长前后缀的下一个开始
什么意思,能不能说人话
我们看
a a b a a b a a f
a a b a a f
我们在f这里失配了,那么我们从f前面找一个既是前缀又是后缀的串,并且是最长的,找到了aa,因为要从这个串的后面比较,所以从b开始(这句话是在日照cwk给我讲的,现在明白了)
这个东西叫做前缀表

前缀表next

这是kmp的精髓
是kmp的核心
也是kmp最难理解的部分
前缀,包含首字母,不包含尾字母的所有字串
后缀,包含尾字母,不包含首字母的所有字串
这里强调我们求的是最长的相等前缀和后缀
前缀表的内部存储:
a 0
aa 1
aab 0
aaba 1
aabaa 2
aabaaf 0
这就是前缀表
我们如何利用前缀表进行匹配?
?????
如果我们在f这个位置失配了,那么就得从aabaa找最长前缀后缀,那么就是前缀表的2,那么我们从最长前缀后缀的下一个,那么就是从a[3]开始
继续匹配
他好像真的想把我讲懂
我真的懂了!!
前缀表,就是next数组,或者说kmp数组
那么怎么求next数组,只需要自己对自己匹配就完了!

#include<iostream>//手动模拟程序,人脑DEV 
#include<cstdio>
#include<algorithm>
#include<string>
#include<cstring>
#include<cmath>
#define maxn 1000010
using namespace std;
int kmp[maxn];
int la,lb;
int j;
char a[maxn],b[maxn];
int main()
{
    cin>>a+1;//aabaabaaf
    cin>>b+1;//aabaaff
    la=strlen(a+1);//9
    lb=strlen(b+1);//7
    for(int i=2;i<=lb;i++)//忽略第一位 
    {
        while(j&&b[i]!=b[j+1]) j=kmp[j];//0 0 0 0
        if(b[j+1]==b[i]) j++;//0 0 1 2    寻找相同的前缀后缀 
        kmp[i]=j;//0 0 1 2
    }
    j=0;
    for(int i=1;i<=la;i++)
    {
        while(j>0&&b[j+1]!=a[i]) 
            j=kmp[j];
        if(b[j+1]==a[i])
            j++;
        if(j==lb) 
        {
            cout<<i-lb+1<<endl;
            j=kmp[j];//回跳
        }
    }
    for(int i=1;i<=lb;i++)
    {
        cout<<kmp[i]<<" ";//模式串输出
    }
    return 0;
} 
Codex入门24-效率倍增秘籍(终极总结:10个让你开发速度翻倍的Codex高级技巧) 专栏收官之作!经过前23篇的系统学习,你已经掌握了 Codex CLI 的核心用法。本文浓缩10个实战验证的高级技巧:管道化提示词将复杂任务拆成递进指令链,模板化 SKILL.md 打造个人技能库,Shell 别名让操作快如闪电,多模型切换省钱又高效……这不是理论课,每个技巧都配有可直接运行的代码。掌握全部10招,构建你的 AI 开发工作流闭环,让开发速度真正翻倍! 阅读详情

相关推荐

使用TensorFlow搭建FNN(全连接神经网络)的基本步骤

提示:转载请注明出处,若本文无意侵犯到您的合法权益,请及时与作者联系。 目录 一、定义神经网络的输入输出 二、搭建神经网络 1、定义一个神经层中的权重 2、定义一个神经层中的阈值 3、定义一个神经层中的激活函数 4、组合神经层为神经网络 三、搭建损失函数和优化器 1、搭建损失函数 首先介绍第一个函数这其中用到的共同的函数为 2、定义优化器 四、训练神经网络 全连接神经网络的网络结构如下: 一、定义神经网络的输入输出 神经网络最擅长的工作就是模拟非线性函数,即一个复杂的高..

qq_41959920的博客 4070

KMP后显示打开KMP显示配色方案就会更改为Windows 7 BASIC

用终极解码+KMP硬解码。打开KMP后显示打开KMP显示配色方案就会更改为Windows 7 BASIC 视频渲染器不要用覆盖合成器,用VMR、EVR等就不会出现这种情况了

爱干点啥干点儿啥 3038

英飞凌TC3xx的GTM模块到底有多强?从PWM生成到电机驱动,一篇讲透车载定时器核心

本文深入解析英飞凌TC3xx系列中的GTM模块在汽车电子领域的强大功能,从PWM生成到电机驱动的全链路设计。通过模块化架构和硬件级解决方案,GTM显著提升系统精度和响应速度,适用于电机控制、电源管理等复杂场景。文章结合实战经验,详细拆解GTM的技术实现和性能优势。

weixin_27741699的博客 202

KMP-ObservableViewModel与KMP-NativeCoroutines协同使用:提升SwiftUI性能的终极方案

KMP-ObservableViewModel(原KMM-ViewModel)是一个强大的库,允许开发者在SwiftUI中无缝使用AndroidX/Kotlin ViewModels。通过与KMP-NativeCoroutines的协同工作,它提供了优化SwiftUI性能的终极解决方案,有效减少不必要的视图渲染并避免常见的内存管理问题。 ## 为什么选择KMP-ObservableViewMod

gitblog_00450的博客 1049

VTK学习(入门级教程,包括安装和使用)~持续更新中

说明:研究QT+VTK有段时间了,准备把学到的东西分享给大家,这篇博客以VS+QT+VTK为主进行展开学习的。

HXX904的博客 4755

三甲医院网络架构与安全建设实战

华为OceanStor] [华为OceanStor][PACS存储双活] [HIS数据库同步]患者隐私 数据脱敏 天清Web防火墙动态脱敏策略。主数据中心 --[OTV专线]-- 备数据中心。实现医疗业务网/卫生专网/互联网三网隔离。核心业务配置(华为CE6865)自动备份配置(每天02:00)安全事件响应(30分钟SLA)漏洞扫描(每周日00:00)实现医疗物联网统一接入管控。五、等保2.0合规关键配置。堡垒机登录(双因素认证)四、医疗物联网安全方案。

有小小的远大抱负 1911

跨平台调试技巧:Android Studio KMP插件使用终极指南

想要在Android Studio中高效调试Kotlin Multiplatform项目吗?🤔 本文将为你详细介绍如何利用Android Studio KMP插件进行跨平台调试,让你的开发效率提升数倍! ## 什么是Kotlin Multiplatform插件? Kotlin Multiplatform插件是JetBrains官方推出的Android Studio扩展,专门为KMP项目开发提

gitblog_00022的博客 796

《UDS协议从入门到精通》系列——图解0x83:访问时间参数

详细介绍UDS协议0x83服务,目标ECU的时序参数设置有哪些注意点?

车载系统攻城狮 2138

Boss直聘职位发布时间显示插件,一眼看清岗位新旧

你翻到第三屏才反应过来,这条岗位其实上周就发了,可列表页只写着"今天",到底是刚挂出来还是挂了一周,根本看不出来。**Boss Show Time** 是一款 Chrome 插件,装上之后,招聘列表页每条岗位的右上角都会多出一个时间标签,把发布时间直接标在页面上。 ## 它到底帮你省了什么 以前想搞清楚一条岗位什么时候挂的,得挨个点进详情页,点完一圈,列表早滚回原点了。装完这个插件,我打开 *

gitblog_01190的博客 816

使用Qt Creator自带的Qt Designer构造UI界面流程总结

在本文中,我们将总结使用Qt Creator自带的Qt Designer构造UI界面的流程。在对话框中,您可以选择一个控件的信号,然后将其连接到另一个控件的槽。例如,您可以将按钮的点击信号连接到一个槽函数,以响应按钮的点击事件。右键单击窗口设计器中的空白区域,选择适当的布局管理器,如水平布局、垂直布局或网格布局。在Qt Designer中,您可以使用各种预定义的UI控件来设计应用程序的界面。现在,您可以在应用程序的源代码中使用生成的UI界面。在您的源文件中,包含相应的头文件,然后创建一个UI界面的实例。

cl6789的博客 1392

Matlab实现雷达波位编排

1 简介 %本程序用于雷达球坐标系到正弦空间坐标系的转换,以及相控阵雷达的波位编排。 2 完整代码 ​%070228添加波位数据保存clear allclose allclc%波束宽度,单位:度BeamWidth = 3.6;theta05 = round(sin(BeamWidth*pi/180)*1000)/1000;%雷达作用空域AZ = [-15 15]; %方位角范围(雷达球坐标系),单位:度EL = [0 30]; %俯仰角范围(雷

qq_59747472的博客 2479

ZLMediaKit Windows 编译部署:从 CMake 配置到 MediaServer 验证

想在 Windows 开发机上同时跑起 RTSP 和 RTMP,往往要摆弄两套程序、各自摸索端口。ZLMediaKit 是基于 C++11 的流媒体服务框架,一次 Windows 编译即可产出接管全部协议端口的 MediaServer,并自带 HTTP API 管理接口。下面按"配置→构建→验证"的顺序把整条链路走一遍。 ## 准备清单 - Visual Studio 2019 或 2022,

gitblog_02876的博客 774

BMP280气压传感器原理图设计,已量产(压力传感器)

做嵌入式项目时,“小而精” 的传感器模块永远是刚需 —— 尤其是需要同时测气压和温度的场景,比如无人机定高、环境监测节点、穿戴设备等。最近捣鼓了一款 BMP280 的 Breakout 板,封装做得很紧凑,同时兼顾了稳定性和兼容性,这里单聊硬件设计细节。

不脱发的程序猿 299

终极指南:D-KMP架构如何重新定义跨平台应用开发

D-KMP架构是构建现代化跨平台应用的革命性解决方案,它将声明式UI与Kotlin MultiPlatform技术完美结合。这个官方示例展示了如何为Android、iOS和桌面平台构建统一的应用程序,其中业务逻辑完全共享,而UI则根据平台特性分别采用Compose和SwiftUI技术。🚀 ## 什么是D-KMP架构? D-KMP架构中的"D"代表**声明式UI**,而"KMP"代表**Kot

gitblog_00052的博客 620

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

REA 逆向分析实战路径:rea 命令落地与 AI 智能体 MCP 接入攻略

拿到陌生 Electron 应用,想弄清它加载了哪些 JS、调用了哪些原生能力?REA 是为此而做的逆向工具:一条 `rea` 命令加一个 MCP server(智能体调用外部工具的接口协议),从应用行为一直分析到原生二进制,还能把分析能力直接接给 Claude Code、Codex 等 AI 智能体。 ## 🔍 它能逆到什么深度:从 JS 应用到原生二进制 能力边界分四层: - Elec

gitblog_00318的博客 311

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Webots InertialUnit 节点完全指南:姿态测量、坐标系约定与多语言 API 实战

Webots 的 **InertialUnit** 是一个模拟惯性测量单元(IMU)姿态传感器的节点,它直接返回设备相对于全局坐标系(由 `WorldInfo` 节点定义)的 *roll、pitch、yaw* 欧拉角或四元数。本文围绕该节点的字段语义、角度约定、多语言 API 与真实示例展开,并深入源码说明其实现原理,帮助你准确理解返回值、规避万向锁陷阱,并在仿真中正确接入姿态反馈。 ## 1.

gitblog_00632的博客 1043

温度PID控制PLC程序

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

C语言实现字符串查找的终极方案(KMP算法全剖析)

掌握高效字符串匹配方法,深入解析C语言实现字符串查找(KMP算法)。适用于文本搜索、模式识别等场景,详解next数组构建与优化匹配过程,避免重复比较,提升查找效率。算法清晰易懂,代码可直接复用,值得收藏。

FuncLens的博客 344

字符串处理终极指南:KMP算法、Manacher算法和旋转字符串实现

在Java算法实现项目中,字符串处理是一个至关重要的领域,涵盖了多种高效的算法实现。本文将重点介绍三种核心的字符串处理技术:KMP算法、Manacher算法和旋转字符串算法,帮助您掌握字符串处理的精髓。这些算法在文本搜索、数据处理和字符串分析中有着广泛的应用。 ## 🔍 KMP算法:高效的字符串匹配 KMP算法(Knuth-Morris-Pratt算法)是一种高效的字符串搜索算法,用于在主文

gitblog_00561的博客 796

KMP算法终极指南:从暴力匹配到高效优化的思想跃迁

暴力匹配采用双指针逐字符比对,当主串指针回溯时会产生大量重复计算。例如在主串"ababcd"中匹配"abc"时,每次不匹配都需将模式串指针归零,导致时间复杂度高达O(nm)。这种低效性在长文本匹配中尤为突出,成为算法优化的首要目标。

2501_93877981的博客 458

KMP算法:高效字符串匹配终极指南

KMP算法是一种高效的字符串匹配算法,通过预处理模式串生成next数组(记录最长相等前后缀长度),将时间复杂度从暴力匹配的O(n×m)优化至O(n+m)。其核心在于失配时利用next数组跳过无效比对,保持主串指针不回退。实现分为两步:1.构建next数组(递推求解);2.执行匹配(模式串指针按next数组回退)。算法支持单次匹配和所有位置匹配,适用于文本搜索等场景。注意next数组求解起始条件和边界处理,避免越界错误。实际应用中,KMP能显著提升长字符串匹配效率。

澈的博客 195

Todometer-KMP:用Kotlin Multiplatform打造跨平台待办清单的终极指南

Todometer-KMP是一款基于Kotlin Multiplatform技术栈开发的跨平台待办清单应用,它通过Compose UI Multiplatform、Wear Compose、SQLDelight等现代技术,实现了在Android、iOS和桌面平台上的一致用户体验。这款应用不仅展示了Kotlin跨平台开发的强大能力,也为用户提供了一个简洁高效的任务管理工具。 ## 跨平台体验:一次

gitblog_00558的博客 1089

字符串算法大全Algorithms39:KMP、Boyer-Moore、Manacher算法终极指南

Algorithms39项目是一个全面的算法与数据结构集合,其中包含了多种高效的字符串算法实现。本文将深入解析三种经典字符串算法:KMP算法、Boyer-Moore算法和Manacher算法,帮助你掌握字符串匹配与回文查找的核心技术。 ## 为什么需要高效字符串算法? 在计算机科学中,字符串处理是最常见的任务之一。从文本编辑器的查找替换到搜索引擎的关键词匹配,都离不开高效的字符串算法。普通的暴

gitblog_00985的博客 629

【字符串匹配终极方案】:深入剖析KMP部分匹配表生成机制

掌握字符串高效匹配方法,深入解析C语言KMP算法的部分匹配表生成机制,涵盖原理推导、代码实现与典型应用场景。理解前缀函数计算过程,提升模式匹配效率,避免暴力搜索冗余比较,值得收藏。

SimTrans的博客 341

终极Kotlin跨平台实践:NYTimes-KMP如何实现一次编码多端部署

NYTimes-KMP是一个基于Kotlin Multiplatform(KMP)技术的纽约时报应用模板,通过Compose Multiplatform实现了Android、桌面端、iOS和Web等多平台的统一部署。该项目展示了如何通过一次编码完成多端应用开发,极大提升了开发效率和代码复用率。 ## 什么是Kotlin Multiplatform? Kotlin Multiplatform(K

gitblog_00693的博客 225

终极优化指南:如何通过KMP算法提升zsh-syntax-highlighting的语法匹配速度

zsh-syntax-highlighting是一款为Zsh提供类Fish shell语法高亮效果的工具,能实时高亮命令行输入,帮助用户快速识别语法错误和命令结构。本文将深入探讨如何通过Knuth-Morris-Pratt(KMP)算法优化其核心匹配引擎,显著提升大文件和复杂语法的处理效率。 ## 为什么语法高亮需要算法优化? 在日常使用中,zsh-syntax-highlighting需要实

gitblog_00538的博客 647

终极Kotlin-Inject多平台开发实战:Android与KMP项目集成指南

Kotlin-Inject是一款强大的依赖注入库,专为Kotlin语言设计,特别适用于多平台(KMP)项目开发。本指南将详细介绍如何在Android和KMP项目中集成Kotlin-Inject,帮助开发者轻松实现跨平台依赖管理,提升开发效率和代码质量。 ## 为什么选择Kotlin-Inject进行多平台开发? 在现代应用开发中,多平台项目越来越普遍,而依赖注入是保证代码模块化和可测试性的关键

gitblog_00511的博客 403
上一篇: 1461 Beads
下一篇: 1465 剪花布条
CCCCDEV_CCCC
博客等级 码龄6年 18粉丝 381原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值