对于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++;
    }
  }
}

总结

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

目录
相关文章
|
机器学习/深度学习 算法 Java
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-476 计算质数和
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-476 计算质数和
104 0
|
Web App开发 前端开发 JavaScript
从零开始学习前端开发
在当今数字化时代,前端开发人员的需求越来越高。本文将介绍从零开始学习前端开发所需学习的技能和工具,以及如何将这些知识应用到实际项目中。
|
监控 Apache
HAProxy的高级配置选项-Web服务器状态监测
这篇文章介绍了HAProxy的高级配置选项,特别是如何进行Web服务器状态监测,包括基于四层传输端口监测、基于指定URI监测和基于指定URI的request请求头部内容监测三种方式,并通过实战案例展示了配置过程和效果。
280 8
HAProxy的高级配置选项-Web服务器状态监测
|
安全 程序员
|
负载均衡 网络协议 应用服务中间件
使用阿里云NLB获取客户端原地址
本文为您介绍NLB如何获取客户端真实IP,及通过Proxy Protocol获取客户端真实IP的场景和配置教程。
871 1
|
数据采集 Kubernetes 监控
Kubernetes 文件采集实践:Sidecar + hostPath 卷
在Kubernetes 日志查询分析实践中,我们介绍了如何通过 DaemonSet 方式部署 logtail 并采集标准输出/文件两种形式的数据。DaemonSet 部署的优势在于其能够尽可能地减少采集 agent 所占用的资源且支持标准输出采集,但因为每个 DaemonSet pod 需要负责 n...
437 1
Kubernetes 文件采集实践:Sidecar + hostPath 卷
SimpleDateFormat不要定义为static
SimpleDateFormat不要定义为static
|
前端开发
构建一个跳转到百度的搜索页面
构建一个跳转到百度的搜索页面
1385 0
|
传感器 存储 缓存
Flink---10、处理函数(基本处理函数、按键分区处理函数、窗口处理函数、应用案例TopN、侧输出流)
Flink---10、处理函数(基本处理函数、按键分区处理函数、窗口处理函数、应用案例TopN、侧输出流)
HH
|
监控 网络协议 物联网
阿里云物联网平台offline离线日志原因排查
整理一下常见的离线日志offline reason,方便理清思路排查设备端离线原因。
HH
10413 15
阿里云物联网平台offline离线日志原因排查