数据结构学习——KMP算法

//KMP算法
#include 
#include 
#include 
#include 

using namespace std;

//next数组值的推导

void getNext(string &str, vector& next){
    int strlong = str.size();
    //next数组的0位为0
    next[0]=0;
    //i为当前字符的位置,从1位(第2个开始)
    int i=1;
    //length为当前字符之前的最长匹配子串的长度
    int length=0;
    while(i& next){
    cout<<"next数组为:"< next(insert_str.size());
    getNext(insert_str,next);
    
    
    string str="daaaaaad";
   
    insert(str,insert_str,next);
    
    violent(str,insert_str);
    return 0;

}

next即为需找位置得str的next

这里我还写了一个暴力破解的

数据结构学习——KMP算法_第1张图片

我们来分析一下次数是怎么来的

aaad的next为0120

数据结构学习——KMP算法_第2张图片

如果是暴力算法,次数为1+4+4+4+4=17

1是因为第一项不符合直接过,4是因为我构造的是aaad,所以他每次都要判断4次才能确定

如果是kmp,次数为1+4+2+2+2=11

在我们4比完后,j=2对应next数组为2,我们直接用2号位[第三个字母]去和之前p对应去比,

发现可以,那么值需要接着我往下比就好了,str的1,2字母无须比较,故为2,少比两个

你可能感兴趣的:(算法,数据结构,学习,c++,kmp)