KMP分析证明

引用后缀的目的:

“ABBABA” 如果说ABA里面组成的AB是答案组成部分的开头,那么AB后面的字符一定是和模式串开头的第三个字符一样,如果不一样一定不是答案的组成,所以我们需要后面字符进行判断,故引用后缀

引用前缀的目的:

在公共前后缀中,后缀=前缀。前缀=模式串匹配的前几个字符,要保证后缀是答案的组成,则必须让后缀的前几个字符=模式串匹配的前几个字符。即保证后缀=前缀。故引用公共前缀是一个正确的选择

综上,只要是存在公共前后缀则前面已经匹配的串中一定是部分机会组成答案的,且最长公共前后缀一定包含子公共前缀,故选择 最长公共前后缀 最长公共前缀一定唯一,且从匹配成功的最后一个点开始

由于最长公共前缀唯一或无最长公共前缀,故每次只会移动一次。若有公共前缀则已经知道前面是匹配的故j指针不会回溯到0,而是回溯到公共前缀的下个字符继续匹配。若无公共前缀则则匹配第一个字符,其实总结来说是一个通用的过程, 若当前字母匹配不成功则发生移动,若公共前缀长度为n,则将模式串j指针移动到n+1与主串当前位比较有一种特殊情况,匹配不成功,公共串长度为0,且此时模式串字母为第一个,由于移动之前就是该字母和主串当前字母不相同,而移动后会再次回到1字母这样就造成了无限循环,故应该将主串也要移动下一位)

模式串移动方式为以下

ne[i] = 1 && i == 1 { j++; compare(s[i],s[j]) }
ne[i] = x (x!=1) && i==y { i==x; compare(s[i],s[j]) }

ne[i] == n+1

Original: https://www.cnblogs.com/lbqverdent/p/15884282.html
Author: verdent
Title: KMP分析证明

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/582017/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Linux 最小安装与 Xshell 远程工具的使用

    写在前面:本篇文章介绍了CtenOS的最小安装方法,以及使虚拟机使用VMware的桥接模式的方法。桥接模式下的虚拟机,相当于和物理机处于同一物理网络(网线、WIFI等)下。在多台物…

    Linux 2023年6月8日
    0104
  • Shell脚本生成密码

    利用 /dev/urando 生成密码 密码以字母、数字、开头 特殊符号多 for _ in {1..30};do tr -dc ‘~`!@#$%^&*()_+-={}:&…

    Linux 2023年6月6日
    097
  • [云原生]Kubernetes-Pod详解(第5章)

    一、Pod介绍 1.1 Pod结构 1.2 Pod定义 二、Pod配置 2.1 基本配置 2.2 镜像拉取 2.3 启动命令 2.4 环境变量 2.5 端口设置 2.6 资源配额 …

    Linux 2023年6月13日
    0120
  • linux下中文输入法问题

    故事背景:最近在做资产上报相关功能,要支持中文输入,如果正常快捷方式启动程序没问题,但是升级或者卸载重新安装,自启的时候是使用su usr -C XX.sh启动,root下启动没办…

    Linux 2023年6月13日
    074
  • Java刷题笔记7.25

    一个类构造方法的作用是什么? 主要是完成对&am…

    Linux 2023年6月7日
    0105
  • shell之文件路径截取

    最近写脚本,需要对脚本中函数传递的路径参数进行截取,发现了以下比较好用的方法,记录下: file=/dir1/dir2/dir3/my.file.txt 我们可以用${ }分别替换…

    Linux 2023年5月28日
    076
  • 高通MSM8998 ABL的调试

    高通在MSM8998上引入了UEFI,用来代替LK(Little Kernel)。高通UEFI由XBL和ABL两部分组成。XBL负责芯片驱动及充电等核心应用功能。ABL包括芯片无关…

    Linux 2023年6月7日
    072
  • CAPL学习笔记

    CAPL是CANOE自带的一种编程语言,要和CANOE中的一个节点绑定在一起。它的文件后缀是.can。 两种添加方式:1. 在simulation setup中增加一个网络节点,配…

    Linux 2023年6月13日
    072
  • Linux网络服务之部署YUM仓库

    镜像下载、域名解析、时间同步请点击阿里云开源镜像站 1 YUM简介 1.1 YUM简介 CentOS使用yum和dnf 解决rpm的包依赖关系。 YUM:rpm的前端程序,可解决软…

    Linux 2023年5月27日
    0110
  • xshell/bash/zsh 等终端鼠标滚轮乱码问题(转)

    终端上滚动鼠标,有可能不是预期的滚屏,而是出现一些乱码字符 解决方法:输入 reset命令 回车即可 注意: clear或者 ctrl+l是清屏命令,在此情况下无效。 转自: xs…

    Linux 2023年5月28日
    0152
  • Linux目录操作(pwd、cd、ls、alias、du、mkdir、touch)

    pwd(打印当前目录) cd(### 切换目录) 命令 效果 cd 或 cd ~ 若不指定目标位置,切换到当前用户的宿主目录(家目录) cd – 到前一次目录 一个点号…

    Linux 2023年6月6日
    078
  • cgroup-v1在android中的应用实现浅析

    本文档内容主要是分析android设备中cgroup v1实现了哪些控制器,他们有哪些子控制器以及如何配置这些控制器的。 我是使用红米Note4Plus的开发版本来调研分析的,手机…

    Linux 2023年6月7日
    0106
  • GFS-Google 文件系统

    GFS分布式文件系统 简介 GFS是一个可扩展的分布式文件系统,用于大型的、分布式的、对大量数据进行访问的应用。它运行于廉价的普通硬件上,并提供容错功能。它可以给大量的用户提供总体…

    Linux 2023年6月13日
    077
  • WEB自动化-08-Cypress 接口测试

    8 接口测试 在服务和服务、系统和系统之间进行通信时,常常会使用到接口。通过接口测试,可以在项目早期更快发现问题。接口有很多类型,而现阶段使用的接口是基于HTTP协议的接口。 8….

    Linux 2023年6月7日
    0107
  • 【socket】基于Linux使用select上报温度–服务端

    select使用 * – select函数 – select流程图 – 服务端代码实现 select函数 select监视并等待多个文件描述符的…

    Linux 2023年6月13日
    078
  • 【Java8新特性】- 接口中默认方法修饰为普通方法

    Java8新特性 – 接口中默认方法修饰为普通方法 😄生命不息,写作不止🔥 继续踏上学习之路,学之分享笔记👊 总有一天我也能像各位大佬一样🏆 一个有梦有戏的人 @怒放吧…

    Linux 2023年6月6日
    095
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球