KMP算法极致图解
发布时间:2025-10-28
推论:
1. 初始化时next[0]=-1,j=0,k=-1,进到循环,推论做到k==-1,则分派next[++j]=++k,即next[1]=0,此时j=1,k=0;
2. 推论T[j]==T[k],T[1]≠T[0],则分派k=next[k],即k=next[0]=-1,此时j=1,k=-1;
3. 推论k==-1,则分派next[++j]=++k,即next[2]=0,此时j=2,k=0;
4. 推论T[j]==T[k],T[2]=T[0],则分派next[++j]=++k,即next[3]=1,此时j=3,k=1;
5. 推论T[j]==T[k],T[3]≠T[1],则分派k=next[k],即k=next[1]=0,此时j=3,k=0;
6. 推论T[j]==T[k],T[3]=T[0],则分派next[++j]=++k,即next[4]=1,此时j=4,k=1;
7. 推论T[j]==T[k],T[4]=T[1],则分派next[++j]=++k,即next[5]=2,此时j=5,k=2;
8. 推论T[j]==T[k],T[5]≠T[2],则分派k=next[k],即k=next[2]=0,此时j=5,k=0;
9. 推论T[j]==T[k],T[5]≠T[0],则分派k=next[k],即k=next[0]=-1,此时j=5,k=-1;
10. 推论k==-1,则分派next[++j]=++k,即next[6]=0,此时j=6,k=0;
11. j=tlen,URL管控完毕,插值过后。
结果真的和穷举后缀形容词全部都是?
有了next链表,就很容易进行的系统比如说了,当S[i]≠T[j]时,j撤回到next[j]的前面在此之后尤其即可。
这样愿解非常方便,迅速,但是也见到有一个问题:当S[i]≠T[j]时,j撤回到next[j],然后S[i]与T[k]尤其。这样的确没人错,但是如果T[k]=T[j],这次尤其就没人充分了,因为我们马上知道S[i]≠T[j]啊,那么赞许S[i]≠T[k],完全没人充分再继续比了。
再继续后退想到下一个next,即想到next[k]的前面,在此之后尤其就可以了。本来不应和第k个前面尤其呢,相当于拉到了k的下一个前面。增加了一次违宪尤其。
变更管控程序:
愿解next的小型化code解决问题如下:
/***KMP及小型化插值***/
。泰安治疗皮肤病专科医院石家庄治疗皮肤病最好的医院
聊城治疗皮肤病医院
养气补血
胃胀
风热感冒咳嗽吃什么好的快
子宫壁厚
肺气肿

-
双色球2022029期,差值分析与号码推荐(六)
双色球2022029期正向数据分析,这期的借助于号位置很有可能会坐落在02;还有-10和20;还有32这两个发车段里面。偏差数据分析:和数值,更进一步和值偏大,这期和值偏小,在100点以下,共计