next-0

问题描述:串模式匹配的kmp算法中next[0]的值到底是0还是-1;next[1]的值又到底是1还是0? 大家好,小编来为大家解答以下问题,一个有趣的事情,一个有趣的事情,现在让我们一起来看看吧!

kmp算法中的next到底是什么意思啊?

next-0的相关图片

因为找next值的时候是从第一个字符开始的,规定第一个字符的next值为0,即如果第一个字符的下标为0则next[0]=0,如果第一个字符的下标是1则next[1]=0。。。因为next值将作为主串的标,数组下标不能为负数,所以next[0]不能为-1。。。

关于KMP算法,next第一个值到底是什么?!的相关图片

关于KMP算法,next第一个值到底是什么?!

先看看next数据值的求解方法。

位序 1 2 3 4 5 6 7 8。

模式串 a b a a b c a c。

next值 0 1 1 2  2 3  1 2。

next数组的求解方法是:

1.第一位的next值为0

2.第二位的next值为1

后面求解每一位的next值时,根据前一位进行比较。

3.第三位的next值:第二位的模式串为b ,对应的next值为1;将第二位的模式串b与第一位的模式串a进行比较,不相等;则第三位的next值为1。

4.第四位的next值:第三位的模式串为a ,对应的next值为1;将第三位的模式串a与第一位的模式串a进行比较,相同,则第四位的next值得为2。

5.第五位的next值:第四位的模式串为a,对应的next值为2;将第四位的模式串a与第二位的模式串b进行比较,不相等;第二位的b对应的next值为1,则将第四位的模式串a与第一位的模式串a进行比较,相同,则第五位的next的值为2。

6.第六位的next值:第五位的模式串为b,对应的next值为2;将第五位的模式串b与第二位的模式中b进行比较,相同,则第六位的next值为3。

7.第七位的next值:第六位的模式串为c,对应的next值为3;将第六位的模式串c与第三位的模式串a进行比较,不相等;第三位的a对应的next值为1,则将第六位的模式串c与第一位的模式串a进行比较,不相同,则第七位的next值为1。

8.第八位的next值:第七位的模式串为a,对应的next值为1;将第七位的模式串a与第一位的模式串a进行比较,相同,则第八位的next值为2。

以上这种分析方法,位序是从1开始的,如果位序从0开始,刚第一位的next值为-1,后面的方法则相同。

C语言i->next=0的->是什么意思?的相关图片

C语言i->next=0的->是什么意思?

上代码,有详细说明

public class KMP {。

String model = "abcdabce";。

// String model = "abcabcabd";。

// String model = "aaaab";。

// String model = "asdaaaaaaabdabcabcaabaaaaaskdf";。

char[] tempModel = model.toCharArray();。

String str = "asdaaaaaaabdabcabcaabaaaaaskdf";。

char[] tempStr = str.toCharArray();。

int[] backto = new int[model.length()];。

int[] next = new int[model.length()];。

//查找用例

public void findStr(){。

int i=0;

int j=0;

while(i<tempStr.length){。

if(tempStr[i] == tempModel[j]){。

i++;

j++;

}else{

j = backto[j];。

if(j<0){。

i++;

j++;

}

}

if(j == tempModel.length){。

System.out.println(i+" "+tempStr[i-1]);。

j=0;

}

}

}

/**

* a a a a b。

* -1 -1 -1 -1 3。

*

* a b c d a b c e。

* -1 0 0 0 -1 0 0 3。

*/

public void next(){。

int i=0, //模式串下标,即当前位置.开始为0。

k=-1;//k表示字符串在位置i之前已匹配的子串最长长度.类似于模式串的下标(从0开始)。

next[i]=-1;//第一个next为-1。

while(i+1<tempModel.length){//i 模式串的当前位置,因为第一个next为-1,所以从第二个开始,往前查找模式长度。

if(k == -1 //初始,k,i直接自加:k=0,i=1。

|| tempModel[k] == tempModel[i]){//比较第k个字符和第i个字符。

i++;

k++;

if(tempModel[k] != tempModel[i]){//比较第k+1个字符和第i+1个字符不相等,说明k为当前模式最长长度.。

next[i] = k;//k最小为0,因为i是从第二个开始的。

}else{//第k+1个字符和第i+1个字符相等,说明第i+1个字符比较不同后,可后推到第next[k]个字符开始比较。

next[i] = next[k];。

}

}else{//往后找k值,此时k值表现为模式串的下标。

k = next[k];。

}

}

}

public void start(){。

System.out.println("--------------------------------");。

next();

//CommonUtil.printCharAndIntArray(tempModel,next);。

}

public static void main(String[] args){。

new KMP().start();。

}

为什么在建立链表时函数中要出现p->next=0这个条件呢的相关图片

为什么在建立链表时函数中要出现p->next=0这个条件呢

应该滴结构体中的,是指I结构体或者是I指向的结构体中的next成员。是把next成员赋值为零。

如何计算next 数组?

p->next =0; 表示链表结束。

原文地址:http://www.qianchusai.com/next-0.html

next-100

next-100

next-10

next-10

next-80

next-80

next-60

next-60

next-90

next-90

next-50

next-50

next-40

next-40

next-70

next-70

aspirated,Aspirated consonant有哪些

aspirated,Aspirated consonant有哪些

5760,5760Kg>2.囗t可以填哪些数字

5760,5760Kg>2.囗t可以填哪些数字

知网研学平台在线翻译工具 降ai辅写疑似度 中国知网在线阅读论文 知网在线阅读收费吗 知网论文下载工具 中国知网在线学习平台怎么找 觅知网在线编辑 知网在线阅读要付费吗 知网期刊在线阅读收费嘛 ai辅写疑似度检测 知网有在线阅读吗 知网能够在线阅读嘛 抖音AI写作工具 医师在线能在万方知网检测到吗 觅知网在线编辑下载 知网可以在线阅读 知网ai综述写作神器 知网阅读工具 知网ai文献综述神器 知网在线阅读收费 知网官方阅读器 知网校园网不能在线阅读 中国知网期刊分析器 知网能在线阅读吗 知网文献检索工具 中国知网的caj文献阅读器下载 在线图书馆 免费知网入口 学校知网在线阅读 除中国知网外的专利检索工具 PaperBERT移除AI痕迹工具