搞ACM也有三年了,期间学习了不少算法,到12月把上海站打完也要成退役狗了。最近突然想把学过的一些算法回过头来好好总结一下,于是就有了我的算法总结系列。这是这个系列的开端,所以先写一个简单点的算法,以后会慢慢复习一些复杂的算法,最后还是希望自己能够坚持下去吧。
KMP算法
KMP算法是一种线性时间复杂度的字符串匹配算法,它是对BF(Brute-Force,最基本的字符串匹配算法)的改进。对...
分类:
编程语言 时间:
2014-11-20 17:07:09
阅读次数:
267
串的模式匹配算法即确定主串中所含子串第一次出现的位置。BF算法是古典的,采用穷举的思想,而KMP算法是模式匹配算法的改进算法。 1.BF算法设计思想:将主串的第pos个字符和模式的第1个字符比较, 若相等,继续逐个比较后续字符; 若不等,从主串的下一字符(pos+1)起,重新与第一个 字符比较...
分类:
编程语言 时间:
2014-11-20 17:00:40
阅读次数:
383
题意:用两个字符串分别表示布条和图案,问能从该布条上剪出多少这样的图案。分析:毫无疑问这也是用KMP匹配,关键是一次匹配完成后,模式串应该向后滑动多少。和上一题 HDU 1686 不同,两个图案肯定不能在母串中有交叉的部分,所以当匹配成功一次后,应当滑动整个模式串的长度。和上一题比,代码几乎不变,只...
分类:
其他好文 时间:
2014-11-20 06:52:11
阅读次数:
333
题意:求模式串W在母串T中出现的次数,各个匹配串中允许有重叠的部分。分析:一开始想不清楚当一次匹配完成时该怎么办,我还SB地让i回溯到某个位置上去。后来仔细想想,完全不用,直接让模式串向前滑动,即 j = next[j] 1 #include 2 #include 3 #include 4 ...
分类:
其他好文 时间:
2014-11-20 06:49:46
阅读次数:
186
8592 KMP算法
时间限制:1000MS 内存限制:1000K
题型: 编程题 语言: 无限制
描述
用KMP算法对主串和模式串进行模式匹配。本题目给出部分代码,请补全内容。
#include "stdio.h"
#include "stdlib.h"
#include "iostream.h"
#define TRUE...
分类:
编程语言 时间:
2014-11-19 22:19:25
阅读次数:
384
#include
#include
#define maxn 10010
int next[maxn];
char str[maxn], buf[maxn * 100];
void getNext() {
int i = 0, j = -1;
next[i] = j;
while(str[i]) {
if(j == -1 || str[i] == str[j]) {
++...
分类:
其他好文 时间:
2014-11-19 22:16:01
阅读次数:
176
Seek the Name, Seek the Fame
Time Limit: 2000MS
Memory Limit: 65536K
Total Submissions: 12620
Accepted: 6198
Description
The little cat is so famous, that many couples ...
分类:
其他好文 时间:
2014-11-19 11:18:35
阅读次数:
275
学习如何KMP吧#include#includeint n,m;char a[1000010],b[10010];int p[11111];void getp(){ p[1]=0; int i,j=0; for(i=2;i0&&b[j+1]!=b[i]) j=p[j]; ...
分类:
其他好文 时间:
2014-11-19 10:25:05
阅读次数:
203
KMP算法 匹配时间为Θ(n) ,只用到辅助函数next ,它在Θ(m)时间内根据模式预先计算出来,并且存储在数组next[1.....m]中。数组next使得我们按需要“及时”有效计算转移函数δ。粗略的说,对任意状态q=0,1,2,....m和任意字符a∈∑
,next[q]的值包含了与a无关当在计算δ(q,a)的信息。由于next只有m个元素,而δ有m|∑|个值,所以通过预先计算next而...
分类:
编程语言 时间:
2014-11-19 01:59:00
阅读次数:
1193
关于字符串的AC自动机,KMP,Trie树,后缀数组。
KMP是基础。当一个字符串与模式串匹配的时,若失配,利用前面匹配的信息,利用三部分连等关系。可以滑动的“恰如其分”。
Next数组的求法:
若此时求的是next[i]的数值,j位置之前的与从i开始后j-1个字符都是匹配的,若s[i]==s[j] 那么next[++i]=++j; 若不相等可以j=next[j]滑动回去。
OK,那么什么...
分类:
其他好文 时间:
2014-11-17 21:24:09
阅读次数:
164