KMP模式匹配算法
来源:互联网 发布:超星数据库 编辑:程序博客网 时间:2024/06/05 22:40
KMP算法可以说是朴素的匹配模式的优化,由于朴素的模式匹配算法中其实实现了很多没有必要的比较,所以在KMP中,加以改善。比如T=“abcabcabc”,子串S="abcabx",
当tindex=5,sindex=5时,才发现不匹配,按朴素匹配算法,tindex需要回退到tindex=1的位置。但实际上,我们可以直观的看到,abcabx中的abcab已经匹配,而S子串首位是a,所以我们只需要让sindex回退到sindex=3的位置,tindex不变即可,没必要回退到1的位置再进行不必要的循环匹配。由此,我们可以得到一个规律:回退的位置取决于当前字符之前的串的前后缀的相似度。
由此,引出next[]数组来专门保存j应该回退到什么位置 。(以下代码中,0下标均保存的是长度)
void get_next(String S,int *next)
{
int i,j;
i=1;
j=0;
next[1]=0;
while(i<S[0])
{
if(j==0 || S[i]==S[j])
{
++i;
++j;
next[i]=j;
}
else
{
j=next[j];
}
}
}
int Index_KMP(String T,String S,int pos)
{
int i=pos;
int j=1;
int next[255];
get_next(S,next);
while(i<=T[0] && j<=S[0])
{
if(j==0 || T[i]==S[j])
{
++i;
++j;
}
else
{
j=next[j];
}
}
if(j>S[0])
{
return i-S[0];
}
else
{
return 0;
}
}
- 模式匹配---KMP算法
- 模式匹配 KMP算法
- 模式匹配-KMP算法
- KMP模式匹配算法
- KMP模式匹配算法
- KMP模式匹配算法
- 模式匹配kmp算法
- 模式匹配算法kmp
- KMP模式匹配算法
- KMP模式匹配算法
- KMP模式匹配算法
- KMP模式匹配算法
- KMP模式匹配算法
- KMP模式匹配算法
- KMP模式匹配算法
- KMP模式匹配算法
- KMP算法模式匹配
- KMP 模式匹配算法
- C# mongo-csharp-driver 2.4.4权限 身份登录
- sqlserver基本操作
- java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
- JAVA基础_数组
- java学习篇:连接mySQL(一)
- KMP模式匹配算法
- android自定义view,时间刻度尺,时间轴,视频轴
- Kali Linux快速打开终端快捷键
- bzoj1016 [JSOI2008]最小生成树计数(kruskal+dfs+乘法原理)
- MyBatis动态SQL底层原理分析
- Java 面向对象 封装 继承 多态
- java基础—抽象类和接口的区别
- 从JAVA到scala(二):消失的static关键字
- zabbix源码安装时报错:MySQL library not found---zabbix