#include#includeclass KMP{public: KMP(const char *P,const char *Q); void Deal();private: void GenPi(); void Search(); char q[1024]; ...
分类:
其他好文 时间:
2014-08-08 11:58:35
阅读次数:
231
一道应用kmp算法中next数组的题目
这其中vis[i]从1加到n
vis[i]=[next[i]]+1;
#include
#include
#include
#include
#include
using namespace std;
char s[200005];
int b;
int next[200005];
int vis[200005];
void n...
分类:
其他好文 时间:
2014-08-08 09:42:11
阅读次数:
168
/*
KMP算法
*/
void main()
{
putsl(find('abc123','c1'))
putsl(find('abc123','c2'))
}
int find(rstr s,rstr p)
{
next=get_next(p)
i=0
j=0
for i<s.count&&j<p.count
if j==-1||s[i]==p[j]
i++
j...
分类:
其他好文 时间:
2014-08-08 02:00:55
阅读次数:
209
#include#includeint next[10005],lena,lenb;int a[1000005],b[10005];void set_naxt()//子串的next数组{ int i=0,j=-1; next[0]=-1; while(i<lenb) { ...
分类:
其他好文 时间:
2014-08-07 18:26:50
阅读次数:
227
单词统计的题目,给出一些单词,统计有多少单词在一个文本中出现,最经典的入门题了。
AC自动机的基础:
1 Trie, 以这个数据结构为基础的,不过增加一个fail指针和构造fail的函数
2 KMP,不是直接运用KMP,而是需要KMP的思想,KMP思想都没有的话,理解这个算法会更加吃力的。
注意本题的单词会有重复出现的,一个单词只能统计一次。
搜索了一下网上的题解,发现好多代码都...
分类:
其他好文 时间:
2014-08-07 13:20:40
阅读次数:
300
KMP,在有循环节的前提下: 循环节 t = len-next[len], 个数num = len/(len-next[len]);个人理解,如果有循环节,循环节长度必定小于等于len/2, 换句话说next[len]>=len/2;对于len%(len-next)!=0的这种情况不讨论,循环节不存...
分类:
其他好文 时间:
2014-08-07 12:14:29
阅读次数:
290
本题要求求一组字符串的最长公共子串,其实是灵活运用KMP快速求最长前缀。
注意肯爹的题意:要求按照字典顺序输出。
还有要提醒的就是:有人也是用KMP来解这道题,但是很多人都把KMP当成暴力法来用了,没有真正处理好细节,发挥KMP的作用。而通常这些人都大喊什么暴力法可以解决本题,没错,的确暴力法是可以解决本题的,本题的数据不大,但是请不要把KMP挂上去,然后写成暴力法了,那样会误导多少后来人啊。...
分类:
其他好文 时间:
2014-08-06 23:12:42
阅读次数:
375
很好,讲得很清晰,值得学习。作者:July时间:最初写于2011年12月,2014年7月21日晚10点 全部删除重写成此文,随后的半个月从早到晚不断改进。1. 引言 本KMP原文最初写于2年多前的2011年12月,因当时初次接触KMP,思路混乱导致写也写得非常混乱,如此,留言也是“骂声”一片。所以....
分类:
其他好文 时间:
2014-08-06 18:26:11
阅读次数:
235
题目链接:http://poj.org/problem?id=2406题目大意:如果n%(n-next[n])==0,则存在重复连续子串,长度为n-next[n]。例如: a b a b a bnext:-1 0 0 1 2 3 4next[n]==4,代表着,前缀abab与后缀abab相等的最.....
分类:
其他好文 时间:
2014-08-06 17:59:31
阅读次数:
186