最近在研究数据结构,碰到了计算next与nextval值,查看了大量资料,发现这个方法最是清楚明白,整理后贡献出来,有问题可以留言哟!

方法1:引入了一个maxL,在计算nextval时,比较方便。强烈建议读者按照思路算一遍,再找几道题试试。
方法1

准备工作:写好模式串t,序号从1开始。

maxL:首个为0,计算包含当前字符的串的最大相同前后缀中字符的个数。例如,对于序号3,aba,有一个相同前后缀。特别地,对序号5,ababa有3个。将计算好的maxL填入,如上表。

next:首个为0,填入前一个maxL的值加1,例如,next[2]=maxL[1]+1=0+1=1。

nextval:首个为0,从左至右,比较maxL与next。

若不同,填入next的值,例如,对于序号2,maxL[2]=0,next[2]=1,则nextval[2]=1。

若相同,填入该值对应序号的nextval,例如,maxL[3]=next[3]=1。则nextvaL[3]=nextval[1]=0;

方法2:直接计算next与nextval,计算量小一些,在理解方法1的基础上再看。建议两个方法记一个。

KMP手算next与nextval2

根据法一,可知next的前两个必为01(据此可以排除选项),仔细观察可知next与maxL的关系,去除maxL(考试不考),但是nextval就会算的麻烦一点。读者根据自身情况选择法一还是法二。

next:前两个填入01,计算不包括当前字符的串的前后缀相同个数。填入该值加1。例如,序号4前,aba,有一个相同前后缀。填入1+1=2。特别地,没有相同前后缀时填1,例如,序号3前,ab,填入0+1=1;

nextval:首个为0,从左至右,比较该序号字符,与next值对应的字符是否相同。

若不同,填入next值即可。例如,对于序号2,字符b,next[2]=1。b与序号1对应的字符a不同,则填入next,nextval[2]=next[2]=1。

若相同,填入next值对应序号的nextval,例如,序号3,next[3]=1,序号3字符a与1对应的字符a相同,则nextval[3]=nextval[1]=0。

如果题目中的next是从-1开始的,算完后,全部-1就好。

KMP快速计算next与nextval相关推荐

  1. kmp有next和nextval的C语言,KMP算法计算next值和nextVal值

    KMP算法: 给定一个主串S及一个模式串P,判断模式串是否为主串的子串:若是,返回匹配的第一个元素的位置(序号从1开始),否则返回0: 这里先不写算法,仅仅计算next和nextVal值 那么计算时只 ...

  2. ubuntu 使用FFTW快速计算离散傅里叶变换

    FFTW ( the Faster Fourier Transform in the West) 是一个快速计算离散傅里叶变换的标准C语言程序集,其由MIT的M.Frigo 和S. Johnson 开 ...

  3. SQL优化(二) 快速计算Distinct Count

    2019独角兽企业重金招聘Python工程师标准>>> 原创文章,首发自个人站点 ,转载请务必注明出处 http://www.jasongj.com/2015/03/15/count ...

  4. 快速计算文件的MD5/SHA1/SHA256等校验值(Windows/Linux)

    从网络上下载文件,尤其是非常大的文件怎么确保文件准确无误呢? 通常网站提供文件时会同时提供该文件的校验值,如MD5,SHA1,SHA256等, 当文件下载完成后,计算它的校验值,如果和网站提供的一致, ...

  5. 快速计算整数的二进制表示法中1的个数

    快速计算整数的二进制表示法中1的个数 题目:给定一个无符号32位整数x,求x的二进制表示法中含1的个数? 第一种算法: int OneCount(unsigned int x) {   for(int ...

  6. python利用近似公式计算π_Excel函数公式大全之利用SUMSQ函数快速计算多个数据的平方和...

    各位Excel天天学的小伙伴们大家好,欢迎收看Excel天天学出品的excel2019函数公式大全课程.今天我们要学习的函数是数学函数中的SUMSQ函数,SUMSQ函数的功能是快速计算多个数据的平方和 ...

  7. 网络基础知识 快速计算子网掩码的2种方法

    网络基础知识 快速计算子网掩码的2种方法<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office ...

  8. Python一句话实现秦九韶算法快速计算多项式的值

    关于秦九韶算法快速计算多项式值的原理描述请参考之前推送的文章Python使用秦九韶算法求解多项式的值.本文重点演示Python函数reduce()和lambda表达式的用法.代码没加注释,如果不好理解 ...

  9. 妙用Python内置函数int()快速计算等比数列前n项和

    本文要点在于Python内置函数int()的用法,所以计算等比数列前n项和时没有使用数学上的公式Sn=a1*(1-q^n)/(1-q). 一般遇到这样的问题,很容易想到使用循环来实现,以计算1+2+4 ...

最新文章

  1. Python使用matplotlib函数subplot可视化多个不同颜色的折线图、在折线图上为每个数据点添加日期数据标签
  2. 5G NGC — N3IWF 非 3GPP 互通功能
  3. ubuntu16.04 uninstall cuda 9.0 completely and install 8.0 instead
  4. 怎么把分钟转化成秒_怎么利用抖音短视频引流,手把手教你如何玩转抖音流量...
  5. vs2008 下编译jrtplib-3.9.0成功
  6. 全国计算机office二级选择题,全国计算机二级msoffice选择题汇总含答案
  7. 如何将常用的软件上传到ESXi本地存储中管理
  8. MySQL学习笔记:三种组内排序方法
  9. java--GUI窗口可视化编程1
  10. 打开计算机 显示不支持此接口,不支持此接口,教你如何解决电脑Windows系统显示不支持此接口...
  11. IDEA打包jar包的多种方式
  12. 微信小程序input标签详解
  13. 量化交易接口UFX是什么?
  14. 《共同警戒区》观后感(r10笔记第97天)
  15. Python小游戏大鱼吃小鱼
  16. 向上取整⌈⌉和向下取整⌊⌋符号
  17. SSM+mysql+微信小程序网易云音乐设计与实现 毕业设计-附源码261620
  18. Python解码JS的encodeURIComponent并转化JSON
  19. 兔子生崽问题。用c语言求解
  20. mysql 主动拿锁_主动锁模

热门文章

  1. 系统规划---新旧系统的分析和比较
  2. 开发支付宝支付用DELPHI实现 RSA2签名
  3. html超出高度自动下一页,上滑web页面自动加载下一页
  4. Linux设备驱动中的阻塞和非阻塞IO
  5. 软件测试需要学多久?
  6. php fopen函数php,php fopen函数用法(打开创建文件)_PHP教程 - fopen
  7. Python修改图片格式以及相对应labelme标注的Json文件
  8. es6模块化和异步编程高级用法
  9. wincc6.2,7.0.7.3,7.4,7.5均试用,用VB脚本直接创建报表
  10. Oracle性能优化-1-索引