Trie学习总结
Trie树学习总结
字典树,又称前缀树,是用于快速处理字符串的问题,能做到快速查找到一些字符串上的信息。
另外,Trie树在实现高效的同时,会损耗更多的空间,所以Trie是一种以空间换时间的算法。
定义
1 struct kkk{ 2 int son[27],cnt; 3 bool flag; 4 }trie[maxn];
首先是插入操作:
1 void insert(string s) 2 { 3 int len=s.size(),u=0; //获取长度len,u是当前点的编号,根的编号是0 4 for(int i=0;i<len;i++) 5 { 6 int v=s[i]-'a';//获取位置 7 if(!trie[u].son[v]) //如果没有继续下去的节点 8 trie[u].son[v]=++num;//就新建一个 9 u=trie[u].son[v];//跳到下一个点去插入 10 } 11 trie[u].flag=true; //标记此处是一个单词 12 }
然后是查询操作:
1 int find(string s){ 2 int len=s.size(),u=0; 3 for(int i=0;i<len;i++){ 4 int v=s[i]-'a'; //同上 5 if(!trie[u].son[v])return 3; //找不到返回没有 6 u=trie[u].son[v]; //同上 7 } 8 if(trie[u].flag==false)return 3; //不是一个单词就返回没有 9 if(!trie[u].cnt){ //如果没有被点过 10 trie[u].cnt++; //标记被点过了 11 return 1; //返回有 12 } return 2; //不然返回重复 13 }
https://www.cnblogs.com/hyfhaha/p/10684418.html