1.Trie树的概念

Trie树是数据结构比较简单的一种。Trie 树的基本用法是高效的存储和查找字符串集合的数据结构。Trie树也叫做字典树,它是一个树形结构。是一种专门处理字符串匹配的数据结构,用来解决在一组字符串集合中快速查找某个字符串。Trie树本质,利用字符串之间的公共前缀,将重复的前缀合并在一起。

2.Trie树的三个性质:

  1. 根节点不包含字符,除根节点外每一个节点都只包含一个字符
  2. 从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串
  3. 每个节点的所有子节点包含的字符都不相同

3.Trie树的操作

2.1存储

Trie树的存储是从根节点开始从前往后依次便利每一个字符。 存储方式如图所示,从根节点开始,如果需要的字符不存在那么就创造一个新的点来存储这个字符,另外每个字符串结尾需要做上标记。做标记是为了查找时方便。例如Trie树中存储有abcdef这个字符串,但是没有abc这个字符串。如果输入完一个字符串以后不加上一个标记在查找abc这个字符串是可以找到的,这就出现了问题。

存储模板:(存储26个小写字母)

#include<iostream>
using namespace std;
const int N=100010;
int son[N][26],cnt[N],idx;//son[N][26]用来存储Trie树中的子节点,cnt[N]存储的是以当前结尾的字符串有多少个,idx存储当前用到的那个下标。*这里需要注意下标是0的点,既是根节点,又是空节点。
char str[N];//输入的字符串
void insert(char str[])//调用存储函数
{
    int p=0;//根节点
    for(int i=0;str[i];i++)//判断是不是走到最后
    {
        int u=str[i]-'a';//当前字母子节点的编号
        if(!son[p][u])  son[p][u]=++idx;//如果当前子节点不存在就创造一个点来存储子节点
        p=son[p][u];//让p走到子节点的位置
    }
    cnt[p]++;//结尾是p的字符串个数加加
}

2.2查找

查询操作和插入操作其实差不多,就是在Trie树中找这个单词的每个字母,若找到了就继续找下去,若没有找到就可以直接退出了,因为若没找到就说明没有这个单词。还是以下图为例。

例如我们想要查找yes中个字符串,查询第一个字符y存在那么继续查询第二个字符,如果不存在e那么返回0;

查询模板:(26个小写字母)

int query(char str[])//调用查找函数
{
    int p=0;//根节点
    for(int i=0;str[i];i++)//判断是不是走到最后
    {
        int u=str[i]-'a';//当前字母子节点的编号
        if(!son[p][u])  return 0;//如果当前字符不存在那么直接返回0
        p=son[p][u];//让p走到子节点的位置
    }
    return cnt[p];//最后返回以p结尾的字符串个数
}

4.Trie树总结

Trie树其实是一种用空间换时间的算法,它占用的空间一般很大,但时间是非常高效的,插入和查询的时间复杂度都是O(l)的,总体来说还是很优秀的。不用担心字节个数过大的情况,一般题上会给出已知条件来控制子节点个数,例如字符串只包括小写字母大写字母等等。

Trie 树(数据结构)相关推荐

  1. 字符串匹配数据结构 --Trie树 高效实现搜索词提示 / IDE自动补全

    文章目录 1. 算法背景 2. Trie 树实现原理 2.1 Trie 树的构建 2.2 Trie树的查找 2.3 Trie树的遍历 2.4 Trie树的时间/空间复杂度 2.5 Trie 树 Vs ...

  2. 数据结构之Trie树

    1. 概述 Trie树,又称字典树,单词查找树或者前缀树,是一种用于快速检索的多叉树结构,如英文字母的字典树是一个26叉树,数字的字典树是一个10叉树. Trie一词来自retrieve,发音为/tr ...

  3. 数据结构与算法 / 字符串匹配 / Trie 树

    一.诞生原因 传统字符串比较时,需要将待比较的字符串与字符串集合中每一个串进行比较,结果比较浪费时间. Trie 树的发明就是为了解决上述问题. 二.基本信息 又称字典树,是一种树形结构,是一种哈希树 ...

  4. 数据结构-----基于双数组的Trie树

    Trie树简介 Trie树也称字典树,在字符串的查找中优势比较明显,适用于在海量数据中查找某个数据.因为Trie树的查找时间和数据总量没有关系,只和要查找的数据长度有关.比如搜索引擎中热度词语的统计. ...

  5. trie树查找前缀串_Trie数据结构(前缀树)

    trie树查找前缀串 by Julia Geist Julia·盖斯特(Julia Geist) A Trie, (also known as a prefix tree) is a special ...

  6. 数据结构八-Trie树

    文章出处:极客时间<数据结构和算法之美>-作者:王争.该系列文章是本人的学习笔记. 1 Trie树的使用场景 搜索引擎中的搜索词建议.当你在搜索引擎中输入词,搜索引擎提示给你一个词的列表, ...

  7. 【数据结构与算法】【字符串匹配】Trie树

    单模式串匹配 BF 算法和 RK 算法 BM 算法和 KMP 算法 多模式串匹配算法 Trie 树和 AC 自动机 一. 什么是"Trie树"? 1. 他是一种树形结构,是一种专门 ...

  8. Trie 树是什么样的数据结构?有哪些应用场景?

    作者 | 神奕 来源 | 前端应届生 头图 | 下载于视觉中国 出品 | CSDN云计算(ID:CSDNcloud) 在计算机科学中,trie,又称前缀树或字典树,是一种有序树,用于保存关联数组,其中 ...

  9. trie树的数据结构_C / C ++中的Trie数据结构

    trie树的数据结构 A Trie data structure acts as a container for a dynamic array. In this article, we shall ...

  10. 数据结构与算法之美笔记——基础篇(下):图、字符串匹配算法(BF 算法和 RK 算法、BM 算法和 KMP 算法 、Trie 树和 AC 自动机)

    图 如何存储微博.微信等社交网络中的好友关系?图.实际上,涉及图的算法有很多,也非常复杂,比如图的搜索.最短路径.最小生成树.二分图等等.我们今天聚焦在图存储这一方面,后面会分好几节来依次讲解图相关的 ...

最新文章

  1. 精心推荐10个高质量的网站,打开新世界的大门
  2. ubuntu服务器在虚拟机中的配置
  3. 基于SQL on Hadoop的数据仓库技术
  4. Gradle项目中gradle.build文件中的buildScript代码块
  5. 华硕老毛子(Padavan)——校园局域网路由表设置(校园网优先局域网访问)
  6. VTK:Utilities之ArrayLookup
  7. .NET UIAutomation实现Word文档加密暴力破解
  8. GCC同时使用静态库和动态库链接
  9. hashtable允许重复吗_在单位缴职工医保,老家有居民医保,能同时报销吗?相关部门这样回应...
  10. linux mariadb忘记密码,忘记MySQL/MariaDB root密码的解决方法
  11. 2021-2025年中国电动婴儿车行业市场供需与战略研究报告
  12. [导入]Reporting Services 6: 在服务器端报表中筛选数据
  13. C#门诊收费管理系统设计(数据库+源码+文档)
  14. appscan 历史版本下载
  15. 宝马android系统升级,宝马史上最大规模软件升级,换新OS7系统和安卓Auto,您的换了吗...
  16. 虚拟机超线程性能分析深入浅出
  17. A better Tooltip with jQuery
  18. 解决 Jupyter notebook 运行SHELL 命令(!xxx), 出错: OSError: “/bin/bach“ shell not found
  19. 冬季送暖!实用围巾打法!(图)
  20. 利用ENVI实现图像几何校正

热门文章

  1. 利用C语言访问mysql
  2. Linux下I2C驱动框架全面解析
  3. Chrome 取代 Safari 成为最快的浏览器
  4. 海量并发低延时 RTC-CDN 系统架构设计(下)
  5. 如何高效开展测试用例评审?用例评审检查清单及用例评审报告模板
  6. React Native高阶组件(HOC)模型理论与实践
  7. 内蒙古农业大学的计算机专业怎样,内蒙古农业大学计算机与信息工程学院
  8. 谷粒商城之分布式基础(二)
  9. java面试突击第一季课件,Java开发面试技能介绍
  10. notability录音定位_如何恰当地使用 Notability?