3.Trie树
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
什么是Trie树?
Root
字符串“A”
A
字符串“AC” C
T
字符串“AT”
M
N
N
Trie树的性质和特点
性质:
根节点不包含字符,除根节点外每一个节点都 只包含一个字符。 从根节点到某一节点,路径上经过的字符连接 起来,为该节点对应的字符串。 每个节点的所有子节点包含的字符都不相同。 (要求)
Trie树的性质和特点
谢谢!!
Trie树
——一种实04级
内容提要:
o o o o 什么是Trie树? Trie树的性质和特点 Trie树的实现 Trie树是做什么的?
什么是Trie树?
Trie树的定义: Trie树是一棵度 m ≥ 2 的树,它的每一层 分支不是靠整个关键码的值来确定,而是由 关键码的一个分量来确定。 树的“度”? 关键码? ID,标识符,字符串
Trie树是做什么的?
例1:现有一海量词典, 其中的词由小写英文字符串组成; 单词个数达到2,000,000个; 每个单词长度不超过10。 问题:任意给出一个单词(当然该单词符合以 上条件),问该单词是否在该词典中。
Trie树是做什么的?
解法一:硬搜 1000^2 解法二:用STL的set 解法三:输入后排序,再用二分查找 解法四:Trie树 三种方法的 时空复杂度 O?
特点:
空间:
前缀相同的字串共享相同的祖先节点。 节省空间?变化趋势?
时间
查询速度快。 O(length)
与O(N)和O(lgN)不是同一级别的概念
Trie树的实现
结构体 struct trieNode {
trieNode * next[26]; bool isword;
}Root;
Trie树的实现
Trie树是做什么的?
例2:PKU 2503 Babelfish
Sample Input dog ogday cat atcay pig igpay froot ootfray loops oopslay atcay ittenkay oopslay Sample Output cat eh loops
Trie树的实现
查询 bool search(char * tar) { trieNode * p = & Root; int id; while(*tar) { id = *tar – ‘a’; if(p->next[id] == NULL) { return false; } p = p->next[id]; tar ++; } if ( p->isword == true ) return true; else return false; }
Trie树是做什么的?
例3: PKU 1204 Word Puzzles
1000 * 1000 8个方向 1000个待查单词 MARGARITA 0 15 G
Trie树是做什么的?
例4:PKU 2513 Colored Sticks Sample Input blue red red violet cyan blue Total Of Sticks blue magenta Up To 250000 magenta cyan 欧拉回路 Sample Output 节点存储使用 Possible
插入同时也是建树的过程 void insert(char * tar) { trieNode * p = & Root; int id; while(*tar) { id = *tar – ‘a’; if(p->next[id] == NULL) { p->next[id] = new trieNode(); } p = p->next[id]; tar ++; } p->isword = true; }