本题是trie树模板题,如果不用trie而用map写可以看出trie处理这类问题有明显的时间优势。在trie树中查找一个关键字的时间和树中包含的结点数无关,而取决于组成关键字的字符数。(对比:二叉查找树的查找时间和树中的结点数有关O(log2n)。)如果要查找的关键字可以分解成字符序列且不是很长,利...
分类:
其他好文 时间:
2014-11-28 06:17:45
阅读次数:
189
简单的字典树应用,在建树的时候判断就行了。需要注意的语法:在使用malloc和free来处理动态内存的时候,仅仅是释放了这个对象所占的内存,而不会调用这个对象的析构函数;使用new和delete就可以既释放对象的内存的同时,调用这个对象的析构函数。所以建立trie时用new更方便一些。注意要每组数据...
分类:
其他好文 时间:
2014-11-28 06:15:59
阅读次数:
171
字典树,又称为字母数,前缀树等等,不仅可以存储字符,还可以存储数字等,
又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来节约存储空间,最大限度地减少无谓的字符串比较,查询效率比哈希表高。
字典树与字典很相似,当你...
分类:
其他好文 时间:
2014-11-27 01:39:23
阅读次数:
202
trie,又称前缀树或字典树. 它利用字符串的公共前缀来节约存储空间.
定义
Trie树中每个单词都是通过character by character方法进行存储,相同前缀单词共享前缀节点.
可以看到,每条路径组成一个单词.上面这颗树存了to/tea/ted/ten/inn这些词.
性质
(1)根节点不包含字符,除根节点外的每个节点只包含一个字符。(2)从根节点到...
分类:
编程语言 时间:
2014-11-24 17:20:14
阅读次数:
219
题目大意:给出一些单词,和一些句子,当且仅当句子可以分割成的子串都可以被词典翻译,就说明这个子串是可以被翻译的。求最长的可以被翻译的前缀长度。
思路:利用Trie树来刷数组,能够刷到的最长的地方就是这个串最长可以翻译到的地方。
PS:在BZOJ上Trie居然比AC自动机快,我的渣代码都刷到第一篇了。。。
CODE:
#include
#include
#includ...
分类:
编程语言 时间:
2014-11-20 18:49:12
阅读次数:
286
题目大意:给定一个单词表和m个字符串 问每个字符串的最长的前缀,满足这个前缀可以拆分成一些字符串 使这些字符串都在单词表中出现过
再也不敢看错数据范围了……一道明明用Trie树能解决的问题居然被我写了AC自动机……
将单词表中的单词全都插入AC自动机 每个单词所在的节点记录这个单词的长度
然后对于每个字符串 用f[i]表示长度为i的前缀是否能拆分成单词表中的单词 跑AC自动机
对于每个匹配...
分类:
编程语言 时间:
2014-11-19 01:30:12
阅读次数:
182
输入
输入的第一行为一个正整数n,表示词典的大小,其后n行,每一行一个单词(不保证是英文单词,也有可能是火星文单词哦),单词由不超过10个的小写英文字母组成,可能存在相同的单词,此时应将其视作不同的单词。接下来的一行为一个正整数m,表示小Hi询问的次数,其后m行,每一行一个字符串,该字符串由不超过10个的小写英文字母组成,表示小Hi的一个询问。
输出
对于小Hi的每一个询问,输出一个整数...
分类:
其他好文 时间:
2014-11-17 22:55:44
阅读次数:
459
关于字符串的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
百度资料一大堆,编码过程中要注意这几个数组维护(貌似ACM中树都是用数组——线段树,脸是前向星实现的)
int sz;//节点编号,累加量
int ch[Word_Len][sigma_size];//Trie树
int Have_Word[Word_Len];//该节点下的单词个数
int val[Word_Len];//路径长度
int pre[Wor...
分类:
其他好文 时间:
2014-11-17 14:08:18
阅读次数:
118