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可以填哪些数字

三国志战略版将行其疾攻略 - 技能解析与实战指南 三国志战略版拔寨攻略 - 最新技巧与队伍配置指南 三国志战略版高级建筑怎么合理 - 完整升级攻略指南 三国志战略版武将卡等级系统详解 - 完整攻略指南 三国志战略版势力介绍 - 魏蜀吴势力详解与武将分析 三国志战略版名声系统详解 - 名声获取与作用指南 三国志战略版将行其疾属性详解 - 完全攻略指南 三国志战略版建筑势力值表 - 完整建筑势力值数据汇总 三国志战略版怎么获得声望 - 完整攻略指南 三国志战略版孙尚香强攻攻略 - 完整攻略指南 三国志战略版强攻战法全攻略 - 最强战法搭配与使用技巧 三国志战略版测试服 - 最新版本抢先体验 | 官方测试服务器 三国志战略版声望每小时加多少 - 声望获取速度详解 三国志战略版有必要建立乐府吗 - 游戏攻略分析 三国志战略版冲突克制系统完全攻略 - 兵种克制与战术指南 三国志战略版乐府建造攻略 - 建造指南与技巧 三国志战略版兵锋攻略大全 - 兵锋获取与使用技巧指南 三国志战略版S3阵容搭配大全 - 最强阵容推荐与攻略 三国志战略版虎帐建造条件 - 完整攻略指南 三国志战略版华佗援救技能详解 - 完整攻略指南 三国志战略版整装兑换 - 最全兑换攻略与奖励列表 三国志战略版坐守孤城适合谁 - 防守型玩家策略指南 三国志战略版8级野地攻略 - 打野指南与队伍配置 三国志战略版免费测试服 - 立即下载体验最新版本 三国志战略版测试服奖励 - 最新测试服福利活动汇总 三国志战略版八级地攻打攻略 - 阵容搭配与打法详解 三国志战略版军屯在哪 - 军屯位置获取攻略大全 三国志战略版乐府作用详解 - 游戏攻略指南 三国志战略版抵御状态详解 - 游戏攻略指南 三国志战略版势力值多少 - 势力值计算与提升攻略