KMP算法

原创 2015年07月06日 19:45:47

重新写下KMP算法,先贴几个学习资料,在介绍下自己的总结,和用的模(以前的全是错误,而且漏洞百出,对不起看过的童鞋。

http://www.matrix67.com/blog/archives/115   绝对的经典,我彻底弄明白,就是其中的一句话

http://www.cnblogs.com/dolphin0520/archive/2011/08/24/2151846.html 这个也是蛮不错的

对于模式串和Next数组来说,是最难理解的。

对于Next数组,每次我们都需要求假设当前位置为i,则要找到 0~i-1这个字符串中,找到最大一个T使 0~T 和 i - T + 1 ~ i - 1相同。

这样的话就会保证每次的滑动距离最多。

我们先写下求Next数组的模板

int Next[MAX];//失配数组
void getfail(char* s,int* f)//求失配数组,自己匹配自己
{
    int m = strlen(s);
    int j = 0,k = -1;
    Next[0] = -1;
    while(j<m)
    {
        if(k==-1||s[j]==s[k])
        {
            j++;
            k++;
            Next[j] = k;
        }
        else
            k = Next[k];
    }
}

跟文本串的匹配

void kmp(int m,int n)
{
    int i = 0,j = 0;
    while(i<n)
    {
        if(j==-1||text[i]==s[j])
        {
            i++;
            j++;
        }
        else
            j = Next[j];
        if(j==m)//恰好完全匹配
        {
            //做一些的操作,代表恰好匹配
        }
    }
}

对于KMP的延伸,当然就是AC自动机了。。。

版权声明:本文为博主原创文章,未经博主允许不得转载。

改进的KMP算法

/*改进的字符串匹配算法 改进的KMP算法*/ #include #include #include int next[100];//全局变量 int KMP(char S[],char ...
  • silence2015
  • silence2015
  • 2016年02月22日 15:10
  • 1050

从头到尾彻底理解KMP(转载自July)

从头到尾彻底理解KMP 作者:July 时间:最初写于2011年12月,2014年7月21日晚10点 全部删除重写成此文,随后的半个多月不断反复改进。 1...
  • wjy0330
  • wjy0330
  • 2014年09月26日 23:31
  • 1557

飘逸的python - 字符串的KMP匹配算法

首先我们来看一下字符串的朴素匹配. 可以想象成把文本串s固定住,模式串p从s最左边开始对齐,如果对齐的部分完全一样,则匹配成功,失败则将模式串p整体往右移1位,继续检查对齐部分,如此反复. #朴素...
  • u010180339
  • u010180339
  • 2014年11月10日 11:20
  • 4878

KMP算法中心思想

KMP是一种高效的字符串查找算法,主要用于在主串中查找一个特定字串(模板)出现的位置(或是否出现)。 朴素字符串查找算法主要是通过逐次比较来实现的,在主串中找到一个位置I和字串起始字符一样时,便顺...
  • yuxin8000
  • yuxin8000
  • 2015年08月13日 17:22
  • 803

KMP算法-Java实现

KMP算法之Java实现
  • qq_26411333
  • qq_26411333
  • 2016年06月09日 20:09
  • 2936

BF算法和KMP算法对比

BF算法和KMP算法     子串的定位操作通常被称作串的模式匹配,所谓的模式匹配即从较长的字符串S(主串)的pos位置处开始寻找字符串P(模式串)首次出现的位置,模式匹配算法经典的有BF算法和KMP...
  • Tsou_Joyce
  • Tsou_Joyce
  • 2014年03月07日 20:13
  • 1155

KMP及其改进算法

本文主要讲述KMP已经KMP的一种改进方法。若发现不正确的地方,欢迎交流指出,谢谢! KMP算法的基本思想: KMP的算法流程: 每当一趟匹配过程中出现字符比...
  • GarfieldEr007
  • GarfieldEr007
  • 2016年01月18日 15:44
  • 1630

拓展kmp算法总结

算法总结第二弹,上次总结了下kmp,这次就来拓展kmp吧。 拓展kmp算法是对KMP算法的扩展,它解决如下问题: 定义母串S,和字串T,设S的长度为n,T的长度为m,求T与S的每一个后缀的最长公共前...
  • dyx404514
  • dyx404514
  • 2014年12月09日 22:02
  • 8435

如果你看不懂KMP算法,那就看一看这篇文章( 绝对原创,绝对通俗易懂)

KMP算法之浅显易懂的阐述!
  • u011564456
  • u011564456
  • 2014年03月09日 20:32
  • 6223

KMP 算法之得到next的代码

最近温习了一下KMP算法。现在谈谈我对KMP算法的理解。 KMP算法目的:尽量快的解决单字符串匹配的问题。 一、问题: 主字符串: ababcababababcab 模式串: abababa...
  • henuyx
  • henuyx
  • 2015年03月27日 09:46
  • 3835
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:KMP算法
举报原因:
原因补充:

(最多只允许输入30个字)