社区
数据结构与算法
帖子详情
KMP算法中 模式串next和nextval的计算方法
changjiang88
2004-12-24 06:21:11
有谁知道 模式串next和nextval的计算方法吗
比较容易理解的那种 课本上面的看不懂 老师也讲不清楚 不知道这里有没也那位大哥知道 马上要考试了 我得把他弄懂
...全文
714
4
打赏
收藏
KMP算法中 模式串next和nextval的计算方法
有谁知道 模式串next和nextval的计算方法吗 比较容易理解的那种 课本上面的看不懂 老师也讲不清楚 不知道这里有没也那位大哥知道 马上要考试了 我得把他弄懂
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
liujianhui
2004-12-26
打赏
举报
回复
我对KMP算法一直没弄懂,也很希望高手借此帖详细地讲解一下思路。
飞起来一脚
2004-12-24
打赏
举报
回复
next[]
例如 A[]=abacabc
next[1]=0,next[2]=1,这时候该求第三个字符('a'),你比较发现A[0]=A[1]=a,而A[0]A[1]序列不等于A[1]A[2]序列,所以最多有1个字符(串)相等,所以c对应的next[2]=1(最多一个)+1(固定加1)
对应的第7个字符('c'),前面有ab(A[0]A[1]字符串==A[4]A[5]='ab')所以最后一个c对应的next[7]=2+1=3
如此而已,应付填空题够了,至于nextval,今天没有时间了,改天写
avalonBBS
2004-12-24
打赏
举报
回复
以前用C++写的
avalonBBS
2004-12-24
打赏
举报
回复
#include <iostream>
#include <stdlib.h>
#include <vector>
using namespace std;
inline void NEXT(const string& T,vector<int>& next)
{
//按模式串生成vector,next(T.size())
next[0]=-1;
for(int i=1;i<T.size();i++ ){
int j=next[i-1];
while(T[i]!=T[j+1]&& j>=0 )
j=next[j] ; //递推计算
if(T[i]==T[j+1])next[i]=j+1;
else next[i]=0; //
}
}
inline string::size_type COUNT_KMP(const string& S,
const string& T)
{
//利用模式串T的next函数求T在主串S中的个数count的KMP算法
//其中T非空,
vector<int> next(T.size());
NEXT(T,next);
string::size_type index,count=0;
for(index=0;index<S.size();++index){
int pos=0;
string::size_type iter=index;
while(pos<T.size() && iter<S.size()){
if(S[iter]==T[pos]){
++iter;++pos;
}
else{
if(pos==0)++iter;
else pos=next[pos-1]+1;
}
}//while end
if(pos==T.size()&&(iter-index)==T.size())++count;
} //for end
return count;
}
int main(int argc, char *argv[])
{
string S="abaabcacabaabcacabaabcacabaabcacabaabcac";
string T="ab";
string::size_type count=COUNT_KMP(S,T);
cout<<count<<endl;
system("PAUSE");
return 0;
}
KMP算法
的Next及Next
Val
序列求解
今天遇到一个
KMP算法
的题,以前根本没见过,上网查了好多关于KMP,但是讲的都不是很清楚,看的一头雾水,然后就自己研究做出了一个小程序,附上了相关算法解释!希望这个小程序可以帮助大家很好的了解
KMP算法
Next及Next
Val
序列的求解算法!
KMP算法
求next 和 next
val
网上看到的,对
kmp算法
很好的总结,传上了与大家分享
图解Java数据结构和算法
1.算法是程序的灵魂,优秀的程序在对海量数据处理时,依然保持高速计算,就需要高效的数据结构和算法支撑。2.网上数据结构和算法的课程不少,但存在两个问题:1)授课方式单一,大多是照着代码念一遍,数据结构和算法本身就比较难理解,对基础好的学员来说,还好一点,对基础不好的学生来说,基本上就是听天书了2)说是讲数据结构和算法,但大多是挂羊头卖狗肉,算法讲的很少。 本课程针对上述问题,有针对性的进行了升级 3)授课方式采用图解+算法游戏的方式,让课程生动有趣好理解 4)系统全面的讲解了数据结构和算法, 除常用数据结构和算法外,还包括程序员常用10大算法:二分查找算法(非递归)、分治算法、动态规划算法、
KMP算法
、贪心算法、普里姆算法、克鲁斯卡尔算法、迪杰斯特拉算法、弗洛伊德算法、马踏棋盘算法。可以解决面试遇到的最短路径、最小生成树、最小连通图、动态规划等问题及衍生出的面试题,让你秒杀其他面试小伙伴3.如果你不想永远都是代码工人,就需要花时间来研究下数据结构和算法。教程内容:本教程是使用Java来讲解数据结构和算法,考虑到数据结构和算法较难,授课采用图解加算法游戏的方式。内容包括: 稀疏数组、单向队列、环形队列、单向链表、双向链表、环形链表、约瑟夫问题、栈、前缀、
中
缀、后缀表达式、
中
缀表达式转换为后缀表达式、递归与回溯、迷宫问题、八皇后问题、算法的时间复杂度、冒泡排序、选择排序、插入排序、快速排序、归并排序、希尔排序、基数排序(桶排序)、堆排序、排序速度分析、二分查找、插值查找、斐波那契查找、散列、哈希表、二叉树、二叉树与数组转换、二叉排序树(BST)、AVL树、线索二叉树、赫夫曼树、赫夫曼编码、多路查找树(B树B+树和B*树)、图、图的DFS算法和BFS、程序员常用10大算法、二分查找算法(非递归)、分治算法、动态规划算法、
KMP算法
、贪心算法、普里姆算法、克鲁斯卡尔算法、迪杰斯特拉算法、弗洛伊德算法马踏棋盘算法。学习目标:通过学习,学员能掌握主流数据结构和算法的实现机制,开阔编程思路,提高优化程序的能力。
KMP算法
(C++实现)
C++实现kmp字符
串
匹配算法,算法思想: *
KMP算法
的思想就是在匹配过程称若发生不匹配的情况 *如果next[j]>=0则目标
串
的指针i不变将
模式
串
的指针j移动到next[j]的位置继续进行匹配 *若next[j]=-1则将i右移1位并将j置0继续进行比较 *对于next[]数组的定义如下 *next[j]=-1 j=0 *next[j]=max k : 0
数据结构实验-2
串
模式
匹配算法(
串
实验)
实验二
串
模式
匹配算法(
串
实验) 实现功能:朴素的
模式
匹配算法(BF算法)、KMP改进算法(Next[ ])、KMP改进算法(Next
Val
[ ])。 主控菜单: 1.输入主
串
、子
串
和匹配起始位置 2.朴素的
模式
匹配算法 3.KMP改进算法(Next[ ]) 4.KMP改进算法(Next
Val
[ ]) 0.退出管理系统 请选择0—4: 实现菜单1、0的功能:输入主
串
、子
串
和匹配起始位置;退出管理系统 实现菜单2的功能:朴素的
模式
匹配算法,输出各趟匹配详细过程,然后输出匹配总趟数、单个字符比较次数、匹配成功时的位置序号或者匹配失败提示信息。 实现菜单3的功能:KMP改进算法(Next[ ]),输出Next[ ]各元素的数值、各趟匹配详细过程,然后输出匹配总趟数、单个字符比较次数、匹配成功时的位置序号或者匹配失败提示信息。 实现菜单4的功能:KMP改进算法(Next
Val
[ ]),输出Next
Val
[ ]的各元素的数值、各趟匹配详细过程,然后输出匹配总趟数、单个字符比较次数、匹配成功时的位置序号或者匹配失败提示信息。
数据结构与算法
33,008
社区成员
35,326
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章