AC自动机
直接学AC自动机比较难理解,强烈建议先学完KMP和字典树并进行一定的练习后,对于失配指针和字典树构造有一定理解后再来学AC自动机的内容。有关AC自动机的详细介绍可见刘汝佳的《算法竞赛入门经典训练指南》P214.
给你一个字典(包含n个不重复的单词),然后给你一串连续的字符串文本(长为len),问你该文本里面的哪些位置正好出现了字典中的某一个或某几个单词?输出这些位...
分类:
其他好文 时间:
2015-03-29 23:50:15
阅读次数:
535
对于暴力搜索法,当搜索词对应的字符与字符串中的字符不匹配时。将搜索词整个后移一位,再从头逐个比较。这样做虽然可行,但是效率很差,因为你要把”搜索位置”移到已经比较过的位置,重比一遍。应用KMP算法之后,则有:
移动位数 = 已匹配的字符数 - 对应的部分匹配值
“部分匹配值”就是”前缀”和”后缀”的最长的共有元素的长度。KMP算法实现代码如下:void prefixFun(char *pat...
分类:
编程语言 时间:
2015-03-29 20:59:34
阅读次数:
259
这道题估计数据比较水,爆搜就能过
从这道题了解到strstr在随机数据的时候比kmp快。。。。正所谓KMP是一种很好的思想,但不实用
接下来就是了解了一些c里的库函数,一开始找不到求子串的函数,写完后才找到strncpy这个函数可以求子串
还有一点要注意的就是得到第一个结果的时候本来可以直接跳出的,但直接跳出的时候可能会碰到一些特殊数据,所以还是用个max记录最大的长度吧。。(这里WA了好多...
分类:
其他好文 时间:
2015-03-29 12:16:26
阅读次数:
90
题目大意:给出a和b串,a是b串的子串,如果b串有连续的a串,那么就将b串的a串删除,问删除多少次;题目分析:打比赛的时候没敲出来,后来想到用栈的思想去模拟就行,网上还有用KMP+栈去做的,没有KMP,也能AC,一会去学习一下KMP算法 1 #include 2 #include 3 #includ...
分类:
其他好文 时间:
2015-03-29 12:01:09
阅读次数:
98
最长回文子串,学习了一下manacher算法
#include
#include
char s[1000005];
int next[1000005];
int n;
//i,j两个指针所指的位置可以保证已经是该指针之前的串里,最优的了
int min(int a,int b){
if(a<b) return a;
return b;
}
int max(int a,int b...
分类:
其他好文 时间:
2015-03-28 13:04:30
阅读次数:
135
KMP第二题,如果对KMP理解了的话,这道题应该想一下就能想出来
#include
#include
using namespace std;
char s[400005];
int next[400005];
int a[400005];
//next数组范围为1-n,next[0]是不使用的
void get_next(int n){
if(n==0) return;
int...
分类:
其他好文 时间:
2015-03-28 13:04:08
阅读次数:
149
KMP的第一题,以前数据结构课上学过KMP,现在对其实现和其中一些规律加深了理解
#include
char s[1000005];
int next[1000005];
int n;
void get_next(){
int i,j;
j=next[0]=-1;
i=0;
while(i<n){
while(j!=-1 && s[j]!=s[i]...
分类:
其他好文 时间:
2015-03-28 13:02:32
阅读次数:
117
肯定有很多人对kmp算法,学了很多遍了,还是不懂,其实,很简单,我们简单的来看两个问题,就可以了!
一般的暴力算法,大家,应该都知道,扫两次,直接比较,就可以得到答案了,
我们直接来看,有没有可以简化
首先,和一般的算法一样,直接匹配,直到p[i]!=p[j];这时,如果是一般的算法i要回退回去,j也要从新开始,但我们没有好好的利用已经得到的有用信息
如图已经知道了,前面一段是相等...
分类:
编程语言 时间:
2015-03-28 11:37:19
阅读次数:
184
字符串上的操作
*今天来总结一下关于串的问题,串包括字符串和数组
*这里一字符串为例:现在来有关字符串的一些算法
*1、逆转字符串revstr(s)
*2、求字符串中的最长回文子串lhw(s)
*3、求字符串的最长前缀的最长后缀lpre_Lpos(s)
*4、求字符串的最长前缀的最长后缀的优美的方法和得到next的数组getnext(s,next)
*5、朴素的字符串的模式匹配算法BF...
分类:
其他好文 时间:
2015-03-28 00:00:05
阅读次数:
380
留作备忘。在openSUSE的软件包搜索服务中搜索并下载「kernel-default」「broadcom-wl-kmp-default」「broadcom-wl」三个软件包并依次安装,重启即可。PS:似乎直接下载安装「kernel-firmware」安装即可也就是说我其实是走了弯路,但鉴于已经搞定...
分类:
系统相关 时间:
2015-03-22 00:27:16
阅读次数:
194