DS-KMP/KMP优化手算模拟

本文介绍了KMP算法中的next数组手动计算方法,通过逐步演示如何从左到右构建next数组,并讨论了nextval数组作为next数组的优化策略,旨在帮助理解KMP算法的匹配过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DS-KMP/KMP优化手算模拟

KMP

题目:

在这里插入图片描述

要算nextval,先手算出next数组

手算出next数组

方法:从左往右的方向,第一个暴力写0,第二个暴力写1,后面的匹配失败在当前的位置前面划一条分界线,模式串一步步向后移动,直到分界线之前能"对的上",或者模式串完全跨过分界线为止,数分界线后的当前位置在模式串的第几个位置,那么next数组就写几

首先,暴力写0 1
在这里插入图片描述

  1. 一步步向后移
    在这里插入图片描述

发现直到模式串完全跨过分界线还是没能匹配上
在这里插入图片描述
而这个位置为第一个元素,所以填1
在这里插入图片描述

  1. 第四个元素匹配失败
    在这里插入图片描述

但同样在分界线前都不能匹配上
在这里插入图片描述
在这里插入图片描述

  1. 第五个元素匹配失败
    在这里插入图片描述

这次在分界线之前后移能匹配得上
在这里插入图片描述
且模式串的下标为2
在这里插入图片描述

因此同理可得后面的next数组的值如下
在这里插入图片描述

nextval数组

nextval数组是在next数组上的优化

手算的话也很简单,直接看next数组来修改就好了

方法:从左往后扫next数组,看当前失配的元素的值是否和next数组当前位置所指向的位置的元素一样,如果不一样,那么当前元素next数组的值直接赋给nextval数组当前的位置,如果一样那么则说明这次的匹配也必定是失败的,那么与其让他多几个的匹配失败,还不如直接跳过该次匹配,则继续判断当前元素next数组所指向的位置的next数组所指向的位置的元素(套娃),当元素不一样的时候,把当前的位置下标赋给nextval数组,或者已经到达元素的0 /1的下标则停止,把其位置的next数组对应的值赋给nextval数组
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值