上周算法班的BEN老师花了1个小时讲自动机和KMP的关系,结果failed...明天又要上课了,花了半天时间看了下KMP,暂且停留在利用next求模式中的跳跃长度,自动机那个还不能理解。。。

具体的可以百度阮一峰的KMP算法。

看着什么前缀后缀,突然想到上下文无关文法乔姆斯基范式了。。。。又想到了NFA和正则表达式的转换,是时候复习复习了。。

太晚了,直接上代码,明天继续看ML和统计学!加油!

 #include <iostream>
#include <string>
#include <iterator>//输出 using namespace std;
void Next(string str, int next[]){ //自己跟自己匹配
int length=str.size();
next[]=-;
int j=-;
for(int i=;i<length;i++){
while(j>- && str[j+]!=str[i]) j=next[j];
if(str[j+]==str[i]) j++;
next[i]=j;
}
}
void Match(string str1,string str2,int next[]){
Next(str2,next);
int length1=str1.size(),length2=str2.size();
int j=-;
for(int i=;i<length1;i++){
while(j>- && str2[j+]!=str1[i]) j=next[j];
if(str2[j+]==str1[i]) j++;
if(j==length2-){
cout<<"Pattern occurs with shift "<<i-length2+<<endl;
j=next[j];
}
}
}
int main(){
string str1="bbcabcdababcdabcdabde";
string str2="abcdabd";
int next[];
Match(str1,str2,next);
copy(next,next+,ostream_iterator<int>(cout," "));
cout<<endl;
return ;
}

输出结果

MacBook-Pro:Algorithm root# g++ kmpdemo2.cpp -o kmpdemo2

MacBook-Pro:Algorithm root# ./kmpdemo2

Pattern occurs with shift 13

-1 -1 -1 -1 0 1 -1 0 0 0

KMP算法的代码实现的更多相关文章

  1. 字符串匹配(KMP 算法 含代码)

    主要是针对字符串的匹配算法进行解说 有关字符串的基本知识 传统的串匹配法 模式匹配的一种改进算法KMP算法 网上一比較易懂的解说 小样例 1计算next 2计算nextval 代码 有关字符串的基本知 ...

  2. KMP算法【代码】

    废话不多说,看毛片算法的核心在于next数组. 很多地方用的都是严书上的方法来求解next数组,代码确实简洁明了,但是可能对于初学者来说不容易想到,甚至不是一下子能理解.(好了,其实我说的就是自己,别 ...

  3. KMP算法C代码

    贴上C代码作参考,关于算法,可以参考网上的博文,但不要参考太多,一两篇相近的即可. #include <stdio.h> #include <stdlib.h> #includ ...

  4. KMP算法具体解释(转)

    作者:July. 出处:http://blog.csdn.net/v_JULY_v/. 引记 此前一天,一位MS的朋友邀我一起去与他讨论高速排序,红黑树,字典树,B树.后缀树,包含KMP算法,只有在解 ...

  5. 字符串匹配算法——KMP算法学习

    KMP算法是用来解决字符串的匹配问题的,即在字符串S中寻找字符串P.形式定义:假设存在长度为n的字符数组S[0...n-1],长度为m的字符数组P[0...m-1],是否存在i,使得SiSi+1... ...

  6. 字符串模式匹配KMP算法

    一篇不错的博客:http://www.cnblogs.com/dolphin0520/archive/2011/08/24/2151846.html KMP字符串模式匹配通俗点说就是一种在一个字符串中 ...

  7. KMP算法解析

    介绍一种高效的KMP算法:代码可以直接运行 #include <iostream> #include <iomanip> using namespace std; void p ...

  8. KMP算法具体解释

    这几天学习kmp算法,解决字符串的匹配问题.開始的时候都是用到BF算法,(BF(Brute Force)算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配 ...

  9. 【字符串算法3】浅谈KMP算法

    [字符串算法1] 字符串Hash(优雅的暴力) [字符串算法2]Manacher算法 [字符串算法3]KMP算法 这里将讲述  [字符串算法3]KMP算法 Part1 理解KMP的精髓和思想 其实KM ...

随机推荐

  1. ActionResult

    ActionResult public abstract class ActionResult { public abstract void ExecuteResult(ControllerConte ...

  2. 【算法题】- 求和等于K子数组

    一整数(有正有负)数组,用尽量少的时间计算数组中和为某个整数的所有子数组 public class SumK { public static void main(String[] args) { in ...

  3. (四)动态生成控件,点击button添加控件

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. poj-3616 Milking Time (区间dp)

    http://poj.org/problem?id=3616 bessie是一头工作很努力的奶牛,她很关心自己的产奶量,所以在她安排接下来的n个小时以尽可能提高自己的产奶量. 现在有m个产奶时间,每个 ...

  5. [POJ1050]To the Max(最大子矩阵,DP)

    题目链接:http://poj.org/problem?id=1050 发现这个题没有写过题解,现在补上吧,思路挺经典的. 思路就是枚举所有的连续的连续的行,比如1 2 3 4 12 23 34 45 ...

  6. 深入.NET框架 项目--魔兽登录系统

    创建魔兽系统相关窗体: 登录窗体(frmLogin) 注册窗体(frmRegister) 主窗体   (frmMain) 实现魔兽登录系统: 登录的界面如下 实现思路: 1.创建一个对象数组,长度为1 ...

  7. 漫游Kafka设计篇之性能优化

    Kafka在提高效率方面做了很大努力.Kafka的一个主要使用场景是处理网站活动日志,吞吐量是非常大的,每个页面都会产生好多次写操作.读方面,假设每个消息只被消费一次,读的量的也是很大的,Kafka也 ...

  8. 一招解决OpenERP8.0安装旧版模块报错

    有喜欢尝鲜的网友开始玩8.0了,可是版本还没发布,社区的很多特别好的模块还没有升级到8,所以经常碰到模块无法安装的问题. No module name osv 网友提出将模块的 from osv im ...

  9. gcc与g++

    gcc和g++都是GNU(组织)的一个编译器. 误区一:gcc只能编译c代码,g++只能编译c++代码两者都可以,但是请注意:1.后缀为.c的,gcc把它当作是C程序,而g++当作是c++程序:后缀为 ...

  10. 关于inline-block的间隙问题

    很久之前写过一个星星评级的样式,当时开发人员在嵌套代码的时候出现很多问题,同样的一个样式有的页面正常有的页面就出现星星错位的问题,仔细研究了一下代码,发现问题原来出在了inline-block上. 目 ...