KMP算法Next数组计算

简介: KMP算法是在最近这两年的软件设计师考试中才出现的。2次都是让求Next函数的序列(其实是)。先看看题吧。 (2011年下半年上午题) (2012年上半年上午题) 其实做这个题很简单,我先说说这个题里的各种概念。
KMP算法是在最近这两年的软件设计师考试中才出现的。2次都是让求Next函数的序列(其实是)。先看看题吧。
(2011年下半年上午题)

(2012年上半年上午题)


其实做这个题很简单,我先说说这个题里的各种概念。
给定的字符串叫做模式串T。j表示next函数的参数,其值是从1到n。而k则表示一种情况下的next函数值。p表示其中的某个字符,下标从1开始。看等式左右对应的字符是否相等。
好了,开始做题了。
首先,要把字符串填入到一个表格中:(拿第一个题为例)


将j导入next函数,即可求得,

j=1时, next[0]=0

j=2时,k的取值为(1,j)的开区间,所以整数k是不存在的,那就是第三种情况, next[2]=1

j=3时,k的取值为(1,3)的开区间,k从最大的开始取值,然后带入含p的式子中验证等式是否成立,不成立k取第二大的值。现在是k=2,将k导入p的式子中得,p1=p2,即“a”=“b”,显然不成立,舍去。k再取值就超出范围了,所以next[3]不属于第二种情况,那就是第三种了,即 next[3]=1

j=4时,k的取值为(1,4)的开区间,先取k=3,将k导入p的式子中得,p1p2=p2p3,不成立。 再取k=2,得p1=p3,成立。所以 next[4]=2

j=5时,k的取值为(1,5)的开区间,先取k=4,将k导入p的式子中得,p1p2p3=p2p3p4,不成立。 再取k=2,得p1p2=p3p4,不成立。 再取k=2,得p1=p4,成立。所以 next[4]=2

j=6时,k的取值为(1,6)的开区间,先取k=5,将k导入p的式子中得,p1p2p3p4=p2p3p4p5,不成立。 取k=4,得p1p2p3=p3p4p5,不成立。再取k=3,将k导入p的式子中得,p1p2=p4p5,成立。所以 next[4]=3

j=7时,k的取值为(1,7)的开区间,先取k=6,将k导入p的式子中得,p1p2p3p4p5=p2p3p4p5p6,不成立。  再取k=5,得 p1p2p3p4=p3p4p5p6 ,不成立。 再取k=4,得 p1p2p3=p4p5p6 ,成立。所以 next[4]=4

j=8时,k的取值为(1,8)的开区间, 先取k=7,将k导入p的式子中得,p1p2p3p4p5p6=p2p3p4p5p6p7,不成立。  再取k=6,得p1p2p3p4p5=p3p4p5p6p7,不成立。 再取k=5,得p1p2p3p4=p4p5p6p7,不成立。 再取k=4,得p1p2p3=p5p6p7,不成立。 再取k=3,得p1p2=p6p7,不成立。再取k=2,得p1=p7,不成立。k再取值就超出范围了,所以next[3]不属于第二种情况,那就是第三种了,即 next[3]=1

所以结果为:

好了,第二题留给大家做吧。

这篇博文就是讲了一下做题的过程,并没有讲到KMP算法的实质性的知识。不过next函数在KMP算法中至关重要。如果没有next函数,那么KMP算法就什么也不是了。下一篇博文会详细讲解KMP算法。敬请大家关注。



目录
相关文章
|
2天前
|
算法 数据安全/隐私保护
基于Big-Bang-Big-Crunch(BBBC)算法的目标函数最小值计算matlab仿真
该程序基于Big-Bang-Big-Crunch (BBBC)算法,在MATLAB2022A中实现目标函数最小值的计算与仿真。通过模拟宇宙大爆炸和大收缩过程,算法在解空间中搜索最优解。程序初始化随机解集,经过扩张和收缩阶段逐步逼近全局最优解,并记录每次迭代的最佳适应度。最终输出最佳解及其对应的目标函数最小值,并绘制收敛曲线展示优化过程。 核心代码实现了主循环、粒子位置更新、适应度评估及最优解更新等功能。程序运行后无水印,提供清晰的结果展示。
|
3天前
|
存储 监控 算法
关于员工上网监控系统中 PHP 关联数组算法的学术解析
在当代企业管理中,员工上网监控系统是维护信息安全和提升工作效率的关键工具。PHP 中的关联数组凭借其灵活的键值对存储方式,在记录员工网络活动、管理访问规则及分析上网行为等方面发挥重要作用。通过关联数组,系统能高效记录每位员工的上网历史,设定网站访问权限,并统计不同类型的网站访问频率,帮助企业洞察员工上网模式,发现潜在问题并采取相应管理措施,从而保障信息安全和提高工作效率。
20 7
|
1月前
|
存储 人工智能 算法
C 408—《数据结构》算法题基础篇—数组(通俗易懂)
408考研——《数据结构》算法题基础篇之数组。(408算法题的入门)
72 23
|
5月前
|
存储 分布式计算 算法
大数据-106 Spark Graph X 计算学习 案例:1图的基本计算、2连通图算法、3寻找相同的用户
大数据-106 Spark Graph X 计算学习 案例:1图的基本计算、2连通图算法、3寻找相同的用户
106 0
|
5月前
|
算法 程序员 索引
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
栈的基本概念、应用场景以及如何使用数组和单链表模拟栈,并展示了如何利用栈和中缀表达式实现一个综合计算器。
82 1
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
|
5月前
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
114 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
|
5月前
|
存储 算法 定位技术
数据结构与算法学习二、稀疏数组与队列,数组模拟队列,模拟环形队列
这篇文章主要介绍了稀疏数组和队列的概念、应用实例以及如何使用数组模拟队列和环形队列的实现方法。
55 0
数据结构与算法学习二、稀疏数组与队列,数组模拟队列,模拟环形队列
|
5月前
|
算法
第四章 KMP算法理论基础
第四章 KMP算法理论基础
49 0
|
11天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于GRU网络的MQAM调制信号检测算法matlab仿真,对比LSTM
本研究基于MATLAB 2022a,使用GRU网络对QAM调制信号进行检测。QAM是一种高效调制技术,广泛应用于现代通信系统。传统方法在复杂环境下性能下降,而GRU通过门控机制有效提取时间序列特征,实现16QAM、32QAM、64QAM、128QAM的准确检测。仿真结果显示,GRU在低SNR下表现优异,且训练速度快,参数少。核心程序包括模型预测、误检率和漏检率计算,并绘制准确率图。
83 65
基于GRU网络的MQAM调制信号检测算法matlab仿真,对比LSTM
|
2天前
|
机器学习/深度学习 数据采集 算法
基于PSO粒子群优化的CNN-LSTM-SAM网络时间序列回归预测算法matlab仿真
本项目展示了基于PSO优化的CNN-LSTM-SAM网络时间序列预测算法。使用Matlab2022a开发,完整代码含中文注释及操作视频。算法结合卷积层提取局部特征、LSTM处理长期依赖、自注意力机制捕捉全局特征,通过粒子群优化提升预测精度。适用于金融市场、气象预报等领域,提供高效准确的预测结果。

热门文章

最新文章