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

三国志战略版免费试用码 - 最新激活码领取中心 三国志战略版策书怎么获得 - 策书获取方法大全 三国志战略版张鲁势力攻略 - 武将技能阵容搭配详解 三国志14战法搭配攻略 - 最强战法组合推荐 三国志战略版巴蜀城池攻略 - 全面解析巴蜀地区战略要地 三国志战略版暴戾无仁攻略大全 - 技能解析与搭配推荐 三国志战略版百骑劫营与鬼神霆威详解 - 游戏攻略 三国志战略版有必要建立乐府吗 - 游戏攻略分析 三国志战略版乐府值攻略大全 - 获取方式与使用技巧 三国志战略版控制效果全解析 - 游戏攻略专题 三国志战略版预备兵奖励详解 - 完整攻略指南 三国志战略版兵锋武将专题 - 兵锋技能详解与武将搭配 三国志战略版势力值计算器 - 在线计算你的势力值 三国志战略版控制类武将完全攻略 - 技能搭配与阵容推荐 三国志战略版战法统计 - 全战法数据分析与排行 三国志战略版军屯声望系统详解 - 军屯声望获取与提升攻略 三国志战略版八级地速通攻略 - 最快通关阵容与技巧 三国志战略版四星武将大全 - 完整图鉴与攻略 三国志战略版陷阵营攻略 - 最强阵容搭配与战术指南 三国志战略版大盟进司隶 - 游戏攻略与联盟指南 三国志战略版功能性规避攻略大全 - 游戏策略指南 三国志战略版高级建筑分配攻略 - 最优布局与升级策略 三国志战略版灼烧战术完全攻略 - 灼烧队配置与使用技巧 三国志战略版虎帐数量详解 - 虎帐最多能建多少个 三国志战略版军屯地产量计算器 - 最全军屯地产量数据与攻略 三国志战略版鬼神霆威攻略 - 技能解析与阵容搭配 三国志战略版军屯建筑 - 最全攻略与升级指南 三国志战略版怎么提高名声 - 完整攻略指南 三国志战略版怎么加灼烧 - 灼烧效果全攻略 三国志战略版前期工坊 - 新手攻略大全