字典树 男娘i 2021-11-09 15:52 313阅读 0赞 ### 字典树 ### * 前言 * 利用指针实现 * 用数组实现 # 前言 # 介绍 字典树又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅 限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少 无谓的字符串比较,查询效率比哈希树高。 性质 (1) 根节点不包含字符,除根节点外每一个节点都只包含一个字符; (2) 从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串; (3) 每个节点的所有子节点包含的字符都不相同。 应用 (1)字符串检索。Trie树的基本功能。 (2)词频统计。统计一个单词出现了多少次。 (3)字符串排序。插入的时候,在树的平级,按字母表的顺序插入。Trie树建好后,用先序遍历,就得到了字典序的排序。 (4)前缀匹配。Trie树是按公共前缀来建树的,很适合用于搜索提示。例如linux的行命令,输入一个命令的前面几个字母,系统会自 动补全命令后面的字符。 # 利用指针实现 # #include<bits/stdc++.h> using namespace std; const int N = 26;//只包含26个小写字母的字符串 /* 字典树: */ struct Trie{ Trie* next[26];//指针实现容易占用大量空间 int num;//以当前字符串为前缀的单词数量 Trie(){ for(int i=0;i<N;i++)next[i]=nullptr; num = 0; } }; Trie root; void insert(char str[]){ //将一个字符串插入到字典树中 Trie*p=&root; for(int i=0;str[i];i++){ if(p->next[str[i]-'a']==nullptr) p->next[str[i]-'a']==new Trie(); p = p->next[str[i]-'a']; p->num++; } } int find(char str[]){ Trie*p=&root; for(int i=0;str[i];i++){ if(p->next[str[i]-'a']==nullptr)return a; p = p->next[str[i]-'a']; } return p->num; } int main(){ char str[11]; while(gets(str)){ if(!str[0])break;//输入一个空行 insert(str); } while(gets(str))cout<<find(str)<<endl; return 0; } # 用数组实现 # #include<bits/stdc++.h> using namespace std; const int N = 26;//只包含26个小写字母的字符串 const int maxn = 1e6+10; /* 字典树: */ int trie[maxn][N];//存储下一个字符的位置 int num[maxn];//存储某一个字符串为前缀的单词的数量 int pos =1;//单前新分配的存储位置 void insert(char str[]){ //将一个字符串插入到字典树中 int p =0; for(int i=0;str[i];i++){ int n = str[i-'a']; if(trie[p][n]==0)trie[p][n]=pos++; p=trie[p][n]; num[p]++; } } int find(char str[]){ int p =0; for(int i=0;str[i];i++){ int n = str[i-'a']; if(trie[p][n]==0)return 0; p=trie[p][n]; } return num[p]; } int main(){ char str[11]; while(gets(str)){ if(!str[0])break;//输入一个空行 insert(str); } while(gets(str))cout<<find(str)<<endl; return 0; }
相关 字典树 字典树 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^\_^ 题目描述 遇到单词不认识怎么办? 查字 ゞ 浴缸里的玫瑰/ 2022年08月18日 02:28/ 0 赞/ 196 阅读
相关 字典树 字典树又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它 你的名字/ 2022年08月02日 14:59/ 0 赞/ 188 阅读
相关 字典树 Trie,又称字典树,前缀树(prefix tree),是一种树形结构,用于保存大量的字符串。 它的优点是:利用字符串的公共前缀来节约存储空间。查找、插入复杂度为O(n),n 电玩女神/ 2022年08月01日 00:08/ 0 赞/ 185 阅读
相关 字典树 Problem H: 位运算的游戏 Time Limit: 2 Sec Memory Limit: 128 MB Submit: 4 Solved: 2 电玩女神/ 2022年07月15日 10:16/ 0 赞/ 180 阅读
相关 字典树 Problem Description 遇到单词不认识怎么办? 查字典啊,已知字典中有n个单词,假设单词都是由小写字母组成。现有m个不认识的单词,询问这m个单词是否出现在 不念不忘少年蓝@/ 2022年07月12日 05:51/ 0 赞/ 231 阅读
相关 字典树 一、引入 [点击打开链接][Link 1] 字典是干啥的?查找字的。 字典树自然也是起查找作用的。查找的是啥?单词。 看以下几个题: 1、给出n个单词和m个询问 今天药忘吃喽~/ 2022年06月16日 08:21/ 0 赞/ 247 阅读
相关 字典树 题目链接:[点击打开链接][Link 1] 代码: include<iostream> include<cstring> using namespa 不念不忘少年蓝@/ 2022年05月30日 05:46/ 0 赞/ 208 阅读
相关 字典树 1 定义 键树又称数字查找树,它是一棵度大于2的树,树中的每个节点值含有组成关键字的符号。例如,若关键字是数值,则节点中只包含一个数位。若关键字是单词,则节点中只包含一个 r囧r小猫/ 2022年04月10日 01:47/ 0 赞/ 275 阅读
相关 字典树 字典树是一种以树这种结构为基础建立的算法 ,那么字典树到底有哪些典型的应用呢? 1.字典树在串的快速检索中的应用。 给出N个单词组成的熟词表,以及一篇全用小写英文 绝地灬酷狼/ 2022年03月19日 04:20/ 0 赞/ 279 阅读
相关 字典树 字典树 前言 利用指针实现 用数组实现 前言 介绍 字典树又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用 男娘i/ 2021年11月09日 15:52/ 0 赞/ 314 阅读
还没有评论,来说两句吧...