对于KMP的next数组的新发现,好像我们并不用回溯

简介: 对于KMP的next数组的新发现,好像我们并不用回溯

目录

前言

发现

总结

博客主页:张栩睿的博客主页

欢迎关注:点赞+收藏+留言

系列专栏:c语言学习

       家人们写博客真的很花时间的,你们的点赞和关注对我真的很重要,希望各位路过的朋友们能多多点赞并关注我,我会随时互关的,欢迎你们的私信提问,也期待你们的转发!

       希望大家关注我,你们将会看到更多精彩的内容!!!

前言

       学了一个下午的KMP算法,一直弄不明白为什么next数组的那个回溯:k=next[k],喜欢钻牛角尖的我一直到处查啊查啊,但是当我仔细观察next数组,并多举了几个例子以后,才发现回溯的意义。

发现:

       通过大量的举例子发现,next数组,要么就是0 0 0 0,要么就是0 1 2 3...递增之后,直接跳回0或1,元素0后面的元素,会非递减,元素1后面的元素,不是0就是2,非0元素后面,要么是直接变为0或1,要么就递增。想到这里,我就发现如果在递增的时候发生不相同的情况,发生回溯,就会一直回溯到首元素,因为我们会惊奇的发现元素通过回溯,他的值没有发生改变!所以代码我们可以写成这样,就不用回溯了!因为回溯的本质就是找到首元素!

       从这里我们就可以看到这些规律

void GetNext(int* next, char* sub)
{
  next[0] = -1;
  if (strlen(sub) == 1)
    return;
  next[1] = 0;
  int k = 0;
  int i = 2;
  while (i < strlen(sub))
  {
    if (sub[i - 1] == sub[k])
    {
      next[i] = k + 1;
      i++;
      k++;
    }
    else if(sub[0]==sub[i-1])
    {
      sub[i]=1;
      i++;
      k++;
    }
    else if (sub[0] != sub[i - 1])
    {
      sub[i] = 0;
      i++;
      k++;
    }
  }
}

总结

       算法太难了!大家一定要好好学习呜呜呜辛苦各位小伙伴们动动小手,三连走一波 最后,本文仍有许多不足之处,欢迎各位认真读完文章的小伙伴们随时私信交流、批评指正!

目录
相关文章
|
4月前
|
人工智能 运维 数据可视化
AR巡检轨道交通、地铁运维场景的应用技术方案|阿法龙XR云平台
基于AR眼镜与云端协同架构,融合YOLOv8算法与高精度数字孪生,实现地铁车辆智能巡检。支持可视化标记、自动缺陷识别、离线巡检同步及多维数据分析,覆盖计划制定、执行记录到报表输出全流程闭环管理,提升巡检效率与准确性。
|
3月前
|
Dubbo Java 测试技术
【Lattice】设计原理
Lattice 是一个轻量级业务扩展调用框架,通过模块化架构实现复杂业务定制的高效管理。支持动态发现、加载与执行扩展,提供清晰的分层设计,集成 Spring、Dubbo 等主流技术,助力企业应用灵活扩展。
320 0
|
11月前
|
Java Spring
SpringBoot自动配置原理
本文深入解析了SpringBoot的核心功能——自动配置,重点探讨了`org.springframework.boot.autoconfigure`及相关注解的工作机制。通过分析`@SpringBootApplication`、`@EnableAutoConfiguration`等注解,揭示了SpringBoot如何基于类路径和条件自动装配Bean
545 8
|
监控 Apache
HAProxy的高级配置选项-Web服务器状态监测
这篇文章介绍了HAProxy的高级配置选项,特别是如何进行Web服务器状态监测,包括基于四层传输端口监测、基于指定URI监测和基于指定URI的request请求头部内容监测三种方式,并通过实战案例展示了配置过程和效果。
421 8
HAProxy的高级配置选项-Web服务器状态监测
|
存储 安全 Linux
Podman入门全指南:安装、配置与运行容器
Podman入门全指南:安装、配置与运行容器
10696 1
|
网络协议 网络架构
OSPF中的Not-So-Stubby Area (NSSA):概念、配置与应用
OSPF中的Not-So-Stubby Area (NSSA):概念、配置与应用
439 3
|
SQL 运维 监控
安全设备篇——WAF
**Web应用防火墙(WAF)摘要** WAF是关键的网络安全工具,专注于Web应用防护,提供应用层保护,具备事前预防、事中响应和事后审计功能。它通过HTTP/HTTPS策略阻止恶意请求,防止SQL注入、XSS攻击等,并能防止会话劫持、DDoS攻击。WAF支持自定义规则、日志监控和与其他安全产品集成。其特点包括异常检测、输入验证、安全规则库、用户行为分析及多种部署模式如透明网桥、单机和旁路反向代理。与传统防火墙不同,WAF在应用层工作,提供更具体的安全防护。两者结合可增强整体网络安全性。
安全设备篇——WAF
|
安全 C++
EasyX见缝插针
这篇博客介绍了如何使用C++和EasyX图形库来实现一个见缝插针的小游戏,包括绘制圆盘和针、实现旋转、发射针、判断游戏输赢以及绘制分数等功能。
276 0
EasyX见缝插针
|
数据采集 存储 JSON
Python爬虫开发:BeautifulSoup、Scrapy入门
在现代网络开发中,网络爬虫是一个非常重要的工具。它可以自动化地从网页中提取数据,并且可以用于各种用途,如数据收集、信息聚合和内容监控等。在Python中,有多个库可以用于爬虫开发,其中BeautifulSoup和Scrapy是两个非常流行的选择。本篇文章将详细介绍这两个库,并提供一个综合详细的例子,展示如何使用它们来进行网页数据爬取。
|
安全 程序员