问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

谁能解释数据结构中KMP算法的next函数?

发布网友 发布时间:2022-04-23 04:29

我来回答

1个回答

热心网友 时间:2023-07-01 20:46

假如str的前j个字符是前i个字符的后缀(j<i),那么next[i]就是所有这样的j的最大值
形象地说,就是假如第i+1个字符匹配失败之后,下一个可能匹配位置至少应该往后挪动多少

就"abaabc"而言
next[1]=0
next[2]=0
next[3]=1
next[4]=1
next[5]=2
next[6]=0

计算过程基本上抄自算法导论,假设str长度为n
k=0;//k表示当前匹配了多少位
next[1]=0;
for (i=1;i<n;i++)
{
while (k && str[i]!=str[k]) k=next[k];
if (str[i]==str[k]) k++;
next[i+1]=k;
}

之后计算str和某个长度为m的字符串text匹配的过程基本上是一样的
k=0;//用于记录str最长能够有前k位是text的前i+1个字符的后缀
for (i=0;i<m;i++)
{
while (k && text[i]!=str[k]) k=next[k];//发现不能匹配的时候就把str往后挪
if (text[i]==str[k]) k++;
if (k==n) printf("在位置%d处找到一个匹配\n",i+1-n);
}

对照着后面这一段很容易理解第一段
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
风水转运方法有哪些 武汉体育学院体育科技学院里有多少个操场啊?跑道是不是好的?再就是宿 ... 武汉体育学院的双学位国家承认不? 2023拼多多双十一优惠券可以叠加吗-拼多多双十一满减优惠卷怎么用 拼多多双十一红包可以叠加吗?详细分析 拼多多大促补贴红包怎么用?叠加的原则是什么? hcip到期用续考吗 莫里斯变猫记 手机浏览器加载网页慢怎么办 四川教师资格证报名2024年上半年 四川教资考试时间安排 数据结构next数组,求教? 在数据结构中,head-&gt;next-&gt;data表示什么意思 数据结构中link和next一样吗 台式电脑网页微信版用耳麦可以像微信一样一句一句的发语音吗? 电脑微信语音如何录制,有什么好用的录音工具 怎样把微信语音弄到电脑上 电脑微信可以发语音吗,就像手机微信那样发语音,不是语音通话 微信电脑版怎么发语音消息 电脑上微信怎么发语音 windows 微信怎么发语音 微信在手提电脑上怎么发语音? 电脑微信怎么发语音消息? 家庭无线网,想拿手机用wifi,密码怎么设置才能防蹭网? 家里的无线网怎么设置密码??? 家里的路由器如何设置密码? 家用电脑如何给网络连接加密 路由器怎么加密? 家庭无线网络怎么设置密码? 家用WI-FI的加密方式是那种? 无线网络如何加密? 数据结构c语言p-&gt;prior-&gt;next语句是什么意思? 急急急!数据结构求next值的思想 数据结构中r=head; p=head-&gt;next; 代表什么意思? 暴雪战网可以改名吗 守望先锋怎么改名 暴雪战网改名是每年有一次机会还是只能修改一次? 战网昵称只能免费修改一次?不满意,想再次修改怎么办 战网怎么改名字 风暴英雄可以改名么 暴风战网免费改名怎么改 暴雪战网开启付费改名服务 一次需60人民币 赋得古原草送别中赋得古原草是什么意思? 守望先锋改名多少钱 暴雪战网改名每次60元 白居易的《赋得古原草原送别》是什么意思? 暴雪还有免费改名吗?在哪里? 战网改名并不需要500是么 《赋得古原草送别》这个题目应该怎么读,怎么断开? 红警战网怎样免费更改名字? 战网下面的账号改名 如何改 赋得古原草,送别唐白居易,离离原上草,一岁一枯荣,野火烧不尽,春风吹又生。我学习小草什么的精神?