字典树
trie树
又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。
每一个节点都有26个子节点,t数组代表节点的子节点的编号,如果是0就代表没有那个子节点。
int t[maxn][26],cnt;
bool isw[maxn]; //标记节点是否是尾节点
void insert(char *s,int rt) //或者string s
{
for(int i = 0; s[i]; i++)
{
int x = s[i]-'a';
if(t[rt][x] == 0)
{
t[rt][x] = ++cnt; //不存在这个节点就建立这个节点
}
rt = t[rt][x];
}
isw[rt] = 1; //标记这个是单词结尾
}
bool find(char *s,int rt) //查询是否存在这个字符串
{
for(int i = 0; s[i]; i++)
{
int x = s[i]-'a';
if(t[rt][x] == 0) return false;
rt = t[rt][x];
}
return true;
}
例题:hdu 1251