码迷,mamicode.com
首页 > 其他好文 > 详细

Trie

时间:2020-04-05 20:28:06      阅读:60      评论:0      收藏:0      [点我收藏+]

标签:作用   返回   src   tps   注意   前缀树   构造   href   alt   

Trie

部分资料来自:

https://blog.csdn.net/zzkksunboy/article/details/61421001

https://blog.csdn.net/johnny901114/article/details/80711441

https://blog.csdn.net/qq_36782366/article/details/76152767

Trie, 又称字典树,是前缀树,它的作用是把许多字符串整合储存,做成一个字符串集合,有时可以达到快速查找的效果。

特点

它压缩了所有模式串

查找速度与它的元素长度相关Ow

概念

技术图片

比如有she,her,hers,his,him这几个单词,我们就可以建立这么一个Trie

首先,Trie是一颗多叉树

Trie的一个特性:必有一个根节点(把根节点记为0),也叫虚根

每条边都有一个权值,权值即各位对应字符

而红色的节点表示的是某个单词结束的节点,在遍历中如果成功访问,就意味着,对于字符串存在。注意它并不代表访问过程中返回点。

如果从链表角度来描述的话,一个字符串就是一个链表。每个Node都保存了它的所有子节点。

构造

指针版

各节点:

struct node
{
	node *nxt[26];
	int flag;
	node()
	{
		for(int i=0;i<26;i++)
		{
			nxt[i]=NULL;
		}
		flag=0;
	}
};

将各模式串存入Trie(当然可以也可以传string)

void ins (char *s)
{
	int len=strlen(s);
	node *now=root;//指向根节点
	for(int i=0;i<len;i++)
	{
		int to=s[i]-‘a‘;
		if(now->nxt[to]==NULL)now->nxt[to]=new node();
		now=now->nxt[to];//now指向新生成的结点
	}
	now->flag++;//最后一个叶节点做标记  意思是这个字符串在这个结点结束
}

标号版

(写在ac自动机那块)

Trie

标签:作用   返回   src   tps   注意   前缀树   构造   href   alt   

原文地址:https://www.cnblogs.com/et3-tsy/p/12638703.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!