zoukankan      html  css  js  c++  java
  • 字符串之KMP算法

    字符串之KMP算法

    在字符串匹配的问题中,我们首先想到的就是暴力,将字串和母串一一进行匹配,借此来找到母串中是否包含有字串

    ,但是当母串非常长而且字串在母串的靠后一部分的时候,就很容易TLE,因此就引出了KMP算法,此算法可以利用之前进行匹配时候得到的信息

    来影响下一次匹配。然后我们开始学习KMP

    第一步了解KMP算法:https://blog.csdn.net/v_july_v/article/details/7041827

    然后写下个人自己的一些理解。

    ①为什么KMP可以见减少时间复杂度

    在普通的暴力算法中,一旦我们遇到了不匹配的时候(a[i]!=b[j]),我们就会重新开始a[i-j+1],b[0]这样势必会照成时间上的浪费。KMP算法中一个比较重要的概念就是

    最长相同前缀后缀,此算法也是借此来使时间得到优化的

    比如说母串为:a[]=ABCABDDAD;

               字串为:b[]=ABCABC;

    当我们匹配完ABCAB都和母串相同但是下一位C却和D不相同,观察C前面(ABCAB)有相同前缀后AB,我们可以直接从前面的C处开始进行匹配,因为母串的a[3-4]可以和子字串的b[0-1]进行匹配

    ②next数组的理解 next数组主要是为字串的移动进行一个对照,在整个算法中十分重要

    void getnext()
    {
        int len=strlen(s);
        int i=0,j=-1;
        next[i]=j;
        while(i<len)
        {
            while(j!=-1&&s[i]!=s[j])  j=next[j];
            next[++i]=++j;
        }
    
    }//求解next数组

    ——————————————————分隔符————————————————————————————————

    习题:https://blog.csdn.net/guhaiteng/article/details/52108690

  • 相关阅读:
    Hibernate一 入门
    angularJS测试一 Karma Jasmine Mock
    angularJS constant和value
    AngularJS $on $broadcast $emit
    css读书笔记4:字体和文本
    css读书笔记3:定位元素
    css读书笔记2:css工作原理
    css读书笔记1:HTML标记和文档结构
    html5中插入视频和音频
    html5中的表单
  • 原文地址:https://www.cnblogs.com/tombraider-shadow/p/11208015.html
Copyright © 2011-2022 走看看