- 浏览: 202526 次
- 性别:
- 来自: 武汉
文章分类
- 全部博客 (137)
- c++ (74)
- c++,算法,回溯 (2)
- DP问题。 (9)
- DP问题,0/1背包问题 (3)
- 数学问题 (6)
- 贪心算法 (10)
- 排序 (16)
- 数据结构 (7)
- 容器 (2)
- 模拟问题 (2)
- 水题 (8)
- 并查集 (3)
- 非技术 (2)
- 素数问题 (1)
- DFS (3)
- 二叉树 (1)
- 递归 (1)
- 图论 (5)
- 最小生成树 (5)
- 最短路径 (6)
- bell_flaod算法 (2)
- hash (3)
- 二分查找 (1)
- 搜索 (5)
- BFS (5)
- STL (3)
- 字符串hash (1)
- 拓扑排序 (1)
- 字典树 (4)
- 哈弗曼树 (1)
- KMP (7)
- 线段树 (9)
- 树状数组 (6)
- 全排列 (2)
- DP问题 (2)
- LCS (1)
- 最长不下降子序列 (2)
- 面试经验 (3)
字典树,又称单词查找树,Trie树,是一种树形结构,典型应用是用于统计,排序和保存大量的字符串,所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来节约存储空间,最大限度的减少无谓的字符串比较,查询效率比哈希表高。Trie树示意图如附件图所示:该trie树存有abc、d、da、dda四个字符串,如果是字符串会在节点的尾部进行标记。没有后续字符的branch分支指向NULL。Trie的特点:1. 根结点不包含任何字母。2. 其余结点仅包含一个字母(非元素)3. 从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串。 4. 每个结点的子节点包含字母不同。5. 采用标记的方法确定是否为字符串。Trie的缺点:动态建树时,用new很费时;静态建树时,预存节点数很费空间。 Trie树的模板一:静态建树:
Trie的模板二:动态建树 关于字典树的材料大多大同小异,需要自己进一步去理解去消化~~
#include<iostream>
using namespace std;
const int Max = 1000;
const int branchNum = 26;
struct tree_node{
int count;
bool isstr;
tree_node *next[branchNum];
}root, node[Max];
int p = 0; // 静态建树的特点,记录用了几个tree_node,则下一个节点为node[p]。
void insert(char *word){
tree_node *location = &root; // 起初先指向根,再一层层向下查找。
while(*word){
if(location->next[*word-'a'] == NULL){
node[p].count = 0; // 初始化新节点。
node[p].is = false;
memset(node[p].next, NULL, sizeof(node[p].next));
location->next[*word-'a'] = &node[p ++];
}
location = location->next[*word-'a'];
location->count ++;
word ++;
}
loaction->isstr = true;
}
bool search(char *word){
tree_node *loaction = &root;
while(*word && loaction){
loaction = loaction->[*word-'a'];
word ++;
}
return (location != NULL && location->isstr);
}
struct tree_node
{
bool isstr; // 记录此处是否构成一个串。
tree_node *next[branchNum]; // 指向各个子树的指针,下标0-25代表26字符
tree_node(){
isstr = false;
memset(next, NULL, sizeof(next));
}
}root;
void insert(char *word){ // 向以root为根结点的树中插入串word
tree_node *location = &root;
while(*word){
if(location->next[*word-'a'] == NULL){ // 不存在则建立
tree_node *tmp = new tree_node;
location->next[*word-'a'] = tmp;
}
location = location->next[*word-'a']; // 每插入一步,有一个新串经过,指针要向下移动
word ++;
}
location->isstr = true;
}
bool search(char *word){
tree_node *location = &root;
while(*word && location){
location = location->next[*word-'a'];
word ++;
}
return (location != NULL && location->isstr);
}
发表评论
-
虚函数、纯虚函数、虚基类、抽象类、虚函数继承、虚继承
2013-08-29 14:34 842虚函数:虚函数是C++中用于实现多态(polymorphis ... -
排序算法总结
2013-05-17 11:00 843选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法, ... -
poj 3122
2012-12-11 19:51 870题意:作者要开一个生日party,他现在拥有n块高度都为1 ... -
poj 3273
2012-12-11 16:49 987题意:给你天数n,和每天需要花的钱,让你把这些天分成m份(每份 ... -
poj 2503
2012-05-30 16:33 758大致题意: 输入一个字典,字典格式为“英语à外语”的 ... -
poj 3630
2012-05-30 15:43 924题意:给出n个数字串,问其中是否有一个串是另一个串的前 ... -
poj 2001
2012-05-30 14:54 837题意:给出n个单词(1<=n<=1000),求 ... -
poj 1159
2012-05-28 19:08 1447题目大意:给你一段字符串,让你求出在中间最少加入几个字符 ... -
poj 3176
2012-05-28 14:47 1022大致题意: 输入一个n层的三角形,第i层有i个数,求从第 ... -
poj 1260
2012-05-28 09:54 1615题意解释: 有n个等级的珠宝,等级依次升高,等级越高价钱越高 ... -
poj 1836
2012-05-28 09:22 2715是POJ2533的扩展题。题意不难,令到原队列 ... -
poj 2533
2012-05-26 15:36 1275在做这道题目之前,首先让我们了解一下什么是LIS算法,LIS俗 ... -
poj 3267
2012-05-26 09:43 805从程序可以看出,第i个位置到L所删除的字符数,总是先取最坏情况 ... -
poj 1276
2012-05-25 16:20 2397题意: 这道题的意思是给你一堆钱,各种面值的都有,比 ... -
poj 1094
2012-05-25 13:54 1108题意:给出字母个数,和有限个有序对(a<b)求出能确定字 ... -
poj 3393
2012-05-23 17:00 1260大致题意: 科普文一篇,文章80%都是无用信息,因为 ... -
poj 3007
2012-05-14 10:21 994大致题意: 给定一个字符串,从任意位置把它切为两半, ... -
poj 3096
2012-05-10 21:09 1012题意: 定义D-pairs表示取字符串s中相距为D的两个字母 ... -
poj 1426
2012-04-26 20:11 2172大致题意: 给出一个整数n,(1 <= n <= ... -
poj 1797
2012-04-24 15:05 1627题目大意是就是何处一个图,n个顶点和m条边,每个边都有最大承载 ...
相关推荐
通过学习字典树,我们可以更好地理解和解决与字符串相关的问题。 字典树,又称前缀树或PAT树,是一种用于存储动态集合或关联数组的树形数据结构。它的主要特点是能够快速查找具有公共前缀的字符串。在字典树中,每...
课程设计 基于C++用户名模糊搜索系统,底层基于了字典树实现源码+资料齐全+部署文档 高分项目.zip课程设计 基于C++用户名模糊搜索系统,底层基于了字典树实现源码+资料齐全+部署文档 高分项目.zip 【备注】 1、该...
因此,开发一个基于字典树的大学生交流社区具有重要的现实意义,能够极大地便利学生的日常生活和学习。 #### 技术选型与框架介绍 为了高效地实现这个项目,开发者选择了SSM框架(Spring、SpringMVC、MyBatis),这...
5. **字典树(Trie)**:字典树是一种高效的数据结构,主要用于字符串搜索。它通过将字符串的每个字符作为节点,构建出一棵树,使得查找、插入和删除操作的时间复杂度接近O(1)。 6. **位运算**:位运算是在二进制...
这个压缩包“WPF 已知问题 资源字典树引用与资源寻找的坑.rar”包含了一个MD文件,很可能是详细的案例分析和解决方案,旨在帮助开发者避免这些常见问题。 在WPF中,资源字典可以存在于多个层次,如应用程序级别、...
基于字典树和最大匹配算法;略微的加了点消歧;Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式...
3. "字典树.doc":讲述了字典树的基本概念、构造方法及其在关键词统计中的应用。 4. "程序设计导引及在线实践.pdf":这本书可能是关于算法和编程实践的指南,包含了许多ACM竞赛中可能遇到的题目和解题技巧。 5. ...
它包含各种机器学习算法,如线性回归、逻辑回归、决策树、随机森林、支持向量机和神经网络等。通过实例学习如何划分数据集、训练模型、评估性能,并了解交叉验证、网格搜索等调参技巧。 深度学习方面,TensorFlow和...
《语文知识树学习语文的基础知识》是一份详细梳理语文学习框架的PPT教案,旨在帮助学生和教师系统地理解和掌握语文的各项基础知识。这份教案通过知识树的形式,将语文的各个分支清晰地呈现出来,便于学习者按照逻辑...
字典树 树 图 算法 I II III IV V VI VII VIII IX X XI XII IX X 冒泡排序 选择排序 插入排序 希尔排序 归并排序 快速排序 堆排序 计数排序 桶排序 基数排序 递归 查找算法 贪心算法 分治算法 参考资料 JavaScript ...
- **Trie树**:也叫字典树,用于高效地存储和检索字符串。 3. **操作** - **插入**:在树中添加新的节点。 - **删除**:移除树中的节点。 - **查找**:寻找具有特定值的节点。 - **遍历**:按照特定顺序访问树...
《微软英汉双解计算机百科辞典》可能会涵盖以上这些领域的专业词汇和概念,不仅解释了基本术语,还可能提供了相关的示例和应用背景,对于初学者和专业人士都是很好的学习材料。使用这样一本双语词典,不仅可以提升...
“dhsjjg_jb51.rar”可能包含更多的学习材料,如习题集、代码示例或教学视频。通过解决习题,我们可以加深对理论知识的理解,而代码示例则提供了实际操作的机会,帮助我们学习如何在编程中应用数据结构。例如,二分...
此外,这些Flash动画可能还会包含一些高级数据结构和算法,如堆(用于实现优先队列)、 Trie(字典树)用于高效字符串查找、B树和B+树在数据库索引中的应用,以及贪心算法和回溯法等。通过观看动画,学习者可以更好...
3. **Scikit-Learn**:Scikit-learn是Python中最常用的机器学习库,提供了各种机器学习算法,如线性回归、逻辑回归、支持向量机、决策树、随机森林、聚类算法等。理解每种算法的工作原理、如何调参以及如何评估模型...
4. **处理逻辑**:解释处理功能的算法或逻辑,通常用判定表或判定树表示。 5. **实体描述**:对外部实体的详细说明,如其角色和功能。 例如,在一个销售管理系统中,数据流图可能包括接收订单、安排生产、开具发票...
10. **数据结构与算法**:理解栈、队列、树、图等数据结构,并学习一些基础的算法,如排序、搜索等。 11. **调试与测试**:学习如何使用pdb进行程序调试,以及单元测试的基本概念和编写方法。 12. **版本控制**:...
字典树(Trie树)适用于快速查找字符串,判定树用于决策分析,带权路径长度最短的树(Huffman树)用于数据压缩编码。此外,还有由字符串构成的二叉排序树,其特点是分支查找,并且满足路径带权值的特性。 总的来说...
在提供的**“WPF学习资料”**中,可能涵盖了以上各个知识点的详细讲解,包括但不限于基础概念、控件使用、数据绑定实践、布局设计、样式和模板的创建、以及高级特性如动画和多媒体的实现。通过深入学习这份资料,...