字典树入门

字典树入门

用处

字典树在字符串的匹配上有很好的优势,这里的字符串也不一定是字符,也可以是别的东西,目前感觉只要是按照字符串的形式

字典树结点数组要开多大呢?

假设节点的分支数为node_Branch,字符串数量为n,字符串最大长度为len,

那么最大节点数组=$ n * len$,这个是重点。

具体讲解可以看这个B站上的视频橙子讲算法,感觉不错。

代码实现

void insert(char *str)
{
	int len=strlen(str);
	int root=0;
	for(int i=len-1; i>=0; i--)
	{
		int id=str[i]-'a';
		if(!tree[root][id])
			tree[root][id]=++tot;
		root=tree[root][id];
	}
	flag[root]++; //这里标记函数的位置也是可以多种多样
}
int find(char *str) //需要根据需要进行匹配 
{
	int len=strlen(str);
	int root=0;
	for(int i=0; i<len; i++)
	{
		int id=str[i]-'a';
		if(!tree[root][id])
			return 0;
		root=tree[root][id];
	}
	return flag[root];
}
欢迎评论交流!
原文地址:https://www.cnblogs.com/alking1001/p/11789255.html