zoukankan      html  css  js  c++  java
  • KMP算法计算next值和nextVal值

    KMP算法:

    给定一个主串S及一个模式串P,判断模式串是否为主串的子串;若是,返回匹配的第一个元素的位置(序号从1开始),否则返回0;

    这里先不写算法,仅仅计算next和nextVal值

    那么计算时只用到子串,也就是模式串

    这里模式串为:abaabcac

    第一步将模式串写上序号,我们这里从1开始(有的从0开始,建议充1开始)

     然后计算出maxL值,列出从第一个开始的子串,找出相等的前缀和后缀的个数

    如果2>看不懂的话,看3>,

    2>计算maxL值

    所以maxL值

     如果这个看不懂的话, 看下面的3>

    3>, 如果2>看懂了这个就不用看了

     

     

     

     

     

     依次类推

    4>计算next值

    接下来将maxL复制一行,去掉最后一个数,在开头添加一个-1,向右平移一个格,然后每个值在加1的到next值

     

     5>计算nextVal值,首先将第一个为0,然后看next和maxL是否相等(先计算不相等的)

    当next和maxL不相等时,将next的值填入

    当next和maxL相等时,填入对应序号为next值得nextVal值

     

     

     所以整个nextVal值为:



  • 相关阅读:
    软件项目“免坑”指南
    软件项目质量保证——编码规范
    从Web借鉴UI设计
    C#学习笔记——面向对象、面向组件以及类型基础
    关系数据库设计
    Winform开发框架之插件化应用框架实现
    桌面程序界面设计分享
    2-Bom
    1-简介
    测试
  • 原文地址:https://www.cnblogs.com/xiaokang01/p/11593513.html
Copyright © 2011-2022 走看看