将K个模板串构成一个AC自动机,那些能匹配到的单词节点都称之为禁止节点。然后问题就变成了在Tire树上走L步且不经过禁止节点的概率。根据全概率公式用记忆化搜索求解。 1 #include 2 #include 3 #include 4 using namespace std; 5 ...
分类:
其他好文 时间:
2015-04-05 15:51:35
阅读次数:
120
AC自动机大名叫Aho-Corasick Automata,不知道的还以为是能自动AC的呢,虽然它确实能帮你AC一些题目。=_=||AC自动机看了好几天了,作用就是多个模式串在文本串上的匹配。因为有多个模式串构成了一颗Tire树,不能像以前一样线性递推失配函数f了,于是改成了BFS求失配函数。白书上...
分类:
其他好文 时间:
2015-04-04 22:20:49
阅读次数:
307
这道题也是卡了挺久的。给出一个字符串比较的算法,有n个字符串两两比较一次,问一共会有多少次比较。因为节点会很多,所以Tire树采用了左儿子右兄弟的表示法来节省空间。假设两个不相等的字符串的最长公共前缀的长度为i,那么比较次数应该是2i+1。如果两个字符串相等,比较次数则是2i+2.可以像大白书上一样...
分类:
其他好文 时间:
2015-04-03 17:04:41
阅读次数:
157
d(i)表示从i开始的后缀即S[i, L-1]的分解方法数,字符串为S[0, L-1]则有d(i) = sum{ d(i+len(x)) | 单词x是S[i, L-1]的前缀 }递推边界为d(L) = 1,代表空串。将前n个单词构造一颗Tire树,在树中查找后缀的过程中遇到一个单词节点就代表找到一个...
分类:
其他好文 时间:
2015-04-02 01:13:10
阅读次数:
164
1 #include 2 #include 3 #include 4 5 using namespace std; 6 7 struct node 8 { 9 int next[26];10 int cnt;11 void init()12 {13 ...
分类:
其他好文 时间:
2014-12-12 23:36:15
阅读次数:
193
#pragma once #include using namespace std;#define MAX_CHAR 26struct node { bool isWord; node* next[MAX_CHAR]; node() { isWord = false; for(int i = 0.....
分类:
其他好文 时间:
2014-11-11 16:19:55
阅读次数:
214
1 /* 2 1.对n个字符串构造tire树 insertWord(node *root, char *word); 3 2.bfs构造fail指针 makeFail(node *root); 4 3.基于...
分类:
其他好文 时间:
2014-09-10 12:23:10
阅读次数:
373
Trie的应用题目。
本题有两个难点了:
1 动态建立Trie会超时,需要静态建立数组,然后构造树
2 判断的时候注意两种情况: 1) Tire树有133,然后插入13333556的时候,2)插入顺序倒转过来的时候
修改一下标准Trie数的插入函数就可以了:
#include
#include
const int MAX_NODE = 100001;
const int M...
分类:
其他好文 时间:
2014-08-04 17:44:47
阅读次数:
213
解题报告
Tire树。
#include
#include
#include
#include
using namespace std;
struct node
{
int v;
node *next[256];
};
int cnt=0,q;
char ch[100],str1[100];
node *newnode()
{
node *p=new node;...
分类:
其他好文 时间:
2014-07-23 21:00:15
阅读次数:
250