`

字典树学习材料

 
阅读更多

字典树,又称单词查找树,Trie树,是一种树形结构,典型应用是用于统计,排序和保存大量的字符串,所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来节约存储空间,最大限度的减少无谓的字符串比较,查询效率比哈希表高。Trie树示意图如附件图所示:trie树存有abcddadda四个字符串,如果是字符串会在节点的尾部进行标记。没有后续字符的branch分支指向NULL。Trie的特点:1. 根结点不包含任何字母。2. 其余结点仅包含一个字母(非元素)3. 从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串。 4. 每个结点的子节点包含字母不同。5. 采用标记的方法确定是否为字符串。Trie的缺点:动态建树时,用new很费时;静态建树时,预存节点数很费空间。

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);
}
 

 Trie的模板二:动态建树

 

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);
}

 

关于字典树的材料大多大同小异,需要自己进一步去理解去消化~~

 

 

 

 

 

  • 大小: 22.2 KB
分享到:
评论

相关推荐

    字符串处理——字典树.rar

    通过学习字典树,我们可以更好地理解和解决与字符串相关的问题。 字典树,又称前缀树或PAT树,是一种用于存储动态集合或关联数组的树形数据结构。它的主要特点是能够快速查找具有公共前缀的字符串。在字典树中,每...

    课程设计 基于C++用户名模糊搜索系统,底层基于了字典树实现源码+资料齐全+部署文档 高分项目.zip

    课程设计 基于C++用户名模糊搜索系统,底层基于了字典树实现源码+资料齐全+部署文档 高分项目.zip课程设计 基于C++用户名模糊搜索系统,底层基于了字典树实现源码+资料齐全+部署文档 高分项目.zip 【备注】 1、该...

    基于字典树的大学生交流 社区的设计与实现

    因此,开发一个基于字典树的大学生交流社区具有重要的现实意义,能够极大地便利学生的日常生活和学习。 #### 技术选型与框架介绍 为了高效地实现这个项目,开发者选择了SSM框架(Spring、SpringMVC、MyBatis),这...

    python 数据结构 算法 LeetCode 牛客 面试 编程之美 动态规划 字典树等等

    5. **字典树(Trie)**:字典树是一种高效的数据结构,主要用于字符串搜索。它通过将字符串的每个字符作为节点,构建出一棵树,使得查找、插入和删除操作的时间复杂度接近O(1)。 6. **位运算**:位运算是在二进制...

    WPF 已知问题 资源字典树引用与资源寻找的坑.rar

    这个压缩包“WPF 已知问题 资源字典树引用与资源寻找的坑.rar”包含了一个MD文件,很可能是详细的案例分析和解决方案,旨在帮助开发者避免这些常见问题。 在WPF中,资源字典可以存在于多个层次,如应用程序级别、...

    Go 语言版的分词器;基于字典树和最大匹配算法;略微的加了点消歧;.zip

    基于字典树和最大匹配算法;略微的加了点消歧;Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式...

    ACM学习资料

    3. "字典树.doc":讲述了字典树的基本概念、构造方法及其在关键词统计中的应用。 4. "程序设计导引及在线实践.pdf":这本书可能是关于算法和编程实践的指南,包含了许多ACM竞赛中可能遇到的题目和解题技巧。 5. ...

    机器学习深度学习基础-python入门资料

    它包含各种机器学习算法,如线性回归、逻辑回归、决策树、随机森林、支持向量机和神经网络等。通过实例学习如何划分数据集、训练模型、评估性能,并了解交叉验证、网格搜索等调参技巧。 深度学习方面,TensorFlow和...

    语文知识树学习语文的基础知识PPT学习教案.pptx

    《语文知识树学习语文的基础知识》是一份详细梳理语文学习框架的PPT教案,旨在帮助学生和教师系统地理解和掌握语文的各项基础知识。这份教案通过知识树的形式,将语文的各个分支清晰地呈现出来,便于学习者按照逻辑...

    algorithm:数据结构|数组队列堆栈链表哈希表堆字典树;算法|排序贪心动态规划分治回溯;欢迎给建议~~

    字典树 树 图 算法 I II III IV V VI VII VIII IX X XI XII IX X 冒泡排序 选择排序 插入排序 希尔排序 归并排序 快速排序 堆排序 计数排序 桶排序 基数排序 递归 查找算法 贪心算法 分治算法 参考资料 JavaScript ...

    tree学习j简单学习

    - **Trie树**:也叫字典树,用于高效地存储和检索字符串。 3. **操作** - **插入**:在树中添加新的节点。 - **删除**:移除树中的节点。 - **查找**:寻找具有特定值的节点。 - **遍历**:按照特定顺序访问树...

    计算机专业字典(计算机专业字典)

    《微软英汉双解计算机百科辞典》可能会涵盖以上这些领域的专业词汇和概念,不仅解释了基本术语,还可能提供了相关的示例和应用背景,对于初学者和专业人士都是很好的学习材料。使用这样一本双语词典,不仅可以提升...

    数据结构学习资料

    “dhsjjg_jb51.rar”可能包含更多的学习材料,如习题集、代码示例或教学视频。通过解决习题,我们可以加深对理论知识的理解,而代码示例则提供了实际操作的机会,帮助我们学习如何在编程中应用数据结构。例如,二分...

    数据结构和算法演示 很好的学习资料

    此外,这些Flash动画可能还会包含一些高级数据结构和算法,如堆(用于实现优先队列)、 Trie(字典树)用于高效字符串查找、B树和B+树在数据库索引中的应用,以及贪心算法和回溯法等。通过观看动画,学习者可以更好...

    python机器学习资料.7z

    3. **Scikit-Learn**:Scikit-learn是Python中最常用的机器学习库,提供了各种机器学习算法,如线性回归、逻辑回归、支持向量机、决策树、随机森林、聚类算法等。理解每种算法的工作原理、如何调参以及如何评估模型...

    计算机数据流图与数据字典PPT学习教案.pptx

    4. **处理逻辑**:解释处理功能的算法或逻辑,通常用判定表或判定树表示。 5. **实体描述**:对外部实体的详细说明,如其角色和功能。 例如,在一个销售管理系统中,数据流图可能包括接收订单、安排生产、开具发票...

    Python最全零基础学习资料

    10. **数据结构与算法**:理解栈、队列、树、图等数据结构,并学习一些基础的算法,如排序、搜索等。 11. **调试与测试**:学习如何使用pdb进行程序调试,以及单元测试的基本概念和编写方法。 12. **版本控制**:...

    树和二叉树CPPT学习教案.pptx

    字典树(Trie树)适用于快速查找字符串,判定树用于决策分析,带权路径长度最短的树(Huffman树)用于数据压缩编码。此外,还有由字符串构成的二叉排序树,其特点是分支查找,并且满足路径带权值的特性。 总的来说...

    wpf 学习资料

    在提供的**“WPF学习资料”**中,可能涵盖了以上各个知识点的详细讲解,包括但不限于基础概念、控件使用、数据绑定实践、布局设计、样式和模板的创建、以及高级特性如动画和多媒体的实现。通过深入学习这份资料,...

Global site tag (gtag.js) - Google Analytics