【KMP】 


  学习KMP,我们先要知道KMP是干什么的。

  KMP?KMPLAYER?看**?

  正如AC自动机,KMP为什么要叫KMP是因为它是由三个人共同研究得到的- .-

  啊跑题了。

  KMP就是给出一个母串S和串T,然后看T是不是S的子串。

  易想到朴素算法,且时间复杂度是明显的O(NM).

  那么为什么KMP的复杂度会这么高呢?

  因为每次失配的时候,指针只是简单的把在S串的指针向后移动一位,T串回到开头,其中对于子串T已匹配过的信息没有充分利用。

  KMP是干嘛的?

  利用一个next数组使得失配时T的指针不是简单的移动到开头而是移动到T串的某个以匹配位置上。

  在这里还是来说明一下怎么利用next数组吧。

  

  先来说说next数组吧,下面给出T串为abcababdb的各next[i]值。

  next数组的意义:当当前位的后一位失配的时候指针应该移动到的位置。

  具体怎么用呢?

  我们设S:abcdabcababcababdb

  T还是那个T。

  

  

  好了,基本就是这些吧。。代码还是贴一贴,为了一些还是不太理解的同学加(chao)深(dai)理(ma)解。什么?next数组怎么求?把t和自己kmp一次就可以啦。。

  

 #include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath> using namespace std;; char p[],s[]; int next[]; void make_next()
{
for(int q=,k=;q<strlen(p);q++)
{
while(k&&p[q]!=p[k]){
k=next[k-];
}
if(p[q]==p[k]){
k++;
}
next[q]=k;
}
} int main()
{
scanf("%s%s",p,s);
make_next();
for(int i=,k=;i<strlen(s);i++)
{
while(k&&s[i]!=p[k])
k=next[k-];
if(s[i]==p[k])k++;
if(k==strlen(p)){
printf("%d\n",i+-strlen(p));
}
}
return ;
}

  

  

【扩展KMP】


【trie】


【SA】


【ACAM】


  待学习。。

【SAM】


  待学习。。

貌似好久没写blog了。。

先挖个大坑慢慢更新。。。

【string】KMP, 扩展KMP,trie,SA,ACAM,SAM,最小表示法的更多相关文章

  1. [2019杭电多校第五场][hdu6629]string matching(扩展kmp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6629 题意求字符串的每个后缀与原串的最长公共前缀之和. 比赛时搞东搞西的,还搞了个后缀数组...队友一 ...

  2. Kuangbin 带你飞 KMP扩展KMP Manacher

    首先是几份模版 KMP void kmp_pre(char x[],int m,int fail[]) { int i,j; j = fail[] = -; i = ; while (i < m ...

  3. kmp&扩展kmp

    kmp: KMP的主要目的是求B是不是A的子串,以及若是,B在A中所有出现的位置 写的很详细的大佬的博客:http://www.matrix67.com/blog/archives/115 模板: / ...

  4. kuangbin专题十六 KMP&&扩展KMP HDU2609 How many (最小字符串表示法)

    Give you n ( n < 10000) necklaces ,the length of necklace will not large than 100,tell me How man ...

  5. hdu 4300 Clairewd’s message(kmp/扩展kmp)

    题意:真难懂.. 给出26个英文字母的加密表,明文中的'a'会转为加密表中的第一个字母,'b'转为第二个,...依次类推. 然后第二行是一个字符串(str1),形式是密文+明文,其中密文一定完整,而明 ...

  6. ACM之路(12)—— KMP & 扩展KMP & Manacher

    最近做完了kuangbin的一套关于kmp的题目(除了一道字典树的不会,因为还没学字典树所以先放放),做个总结.(kuangbin题目的链接:http://acm.hust.edu.cn/vjudge ...

  7. 字符串匹配—KMP 扩展KMP Manacher

    kuangbin字符串专题传送门--http://acm.hust.edu.cn/vjudge/contest/view.action?cid=70325#overview 算法模板: KMP: ; ...

  8. [kuangbin带你飞]专题十六 KMP & 扩展KMP & Manacher 题解报告

    来刷kuangbin字符串了,字符串处理在ACM中是很重要的,一般比赛都会都1——2道有关字符串处理的题目,而且不会很难的那种,大多数时候都是用到一些KMP的性质或者找规律. 点击标题可跳转至VJ比赛 ...

  9. BZOJ 2882: 工艺 (SA/SAM/最小表示法)

    我写的O(nlogn)O(nlogn)O(nlogn)的SA 8000ms 被 O(n)O(n)O(n)的SAM 2800ms 和 O(n)O(n)O(n)的最小表示法 500ms 头都锤爆- COD ...

随机推荐

  1. HDOJ2027统计元音

    统计元音 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  2. 并行执行的Service,以媒体转码成新格式为例

    大家众所周知,IntentService内置的handler只有一个线程,而AsyncTask又只适合时间至多几秒的操作,所以我们关注使用ExecutorService建立并行执行.为了确保Servi ...

  3. ubuntu(16.04.01)学习-day2--高级命令

    1.查找命令 find -name "hello.c" grep "test" grep "usb" -c -r /drivers/usb ...

  4. Java 源码学习线路————_先JDK工具包集合_再core包,也就是String、StringBuffer等_Java IO类库

    http://www.iteye.com/topic/1113732 原则网址 Java源码初接触 如果你进行过一年左右的开发,喜欢用eclipse的debug功能.好了,你现在就有阅读源码的技术基础 ...

  5. Commons-logging + Log4j

    一.Commons-logging能帮我们做什么? 1.提供一个统一的日志接口,简单了操作,同时避免项目与某个日志实现系统紧密耦合 2.自动选择适当的日志实现系统 a.classpath下查找comm ...

  6. OC9_文件操作

    // // main.m // OC9_文件操作 // // Created by zhangxueming on 15/6/19. // Copyright (c) 2015年 zhangxuemi ...

  7. Java WebService简单实例

    一.准备工作(以下为本实例使用工具) 1.MyEclipse10.7.1 2.JDK 1.6.0_22 二.创建服务端 1.创建[Web Service Project],命名为[TheService ...

  8. From MSI to WiX, Part 8 - Major Upgrade, by Alex Shevchuk

    Following content is reprinted from here, please go to the original website for more information. Au ...

  9. nodejs remote链接mysql数据库总结

    nodejs链接远端mysql,这个折腾了一个上午才搞定.本以为,直接使用就OK了,但是发现不行,后来查阅各种资料后,终于找到了方法. nodejs链接远端数据库主要分为几个步骤: 1)安装node- ...

  10. jobs

    fg.bg.jobs.&.ctrl + z都是跟系统任务有关的,虽然现在基本上不怎么需要用到这些命令,但学会了也是很实用的一.& 最经常被用到这个用在一个命令的最后,可以把这个命令放到 ...