每日学习一个数据结构-Trie树(字典树)

文章目录

"Trie"树,又称为前缀树或字典树,是一种专门用于存储字符串的数据结构。它在许多应用程序中都非常有用,特别是在那些需要高效查找、插入和删除字符串的应用场景中。下面是对 Trie 树的详细说明:

定义

Trie 树是一种有序树,用于存储字符串,其中每个节点都代表输入字符串的一个字符。从根节点到任意一个叶子节点的路径上所包含的字符序列构成了一个字符串。

节点结构

每个节点通常包含以下部分:

  • 字符:代表该节点对应的字符。
  • 子节点引用:一个指向其子节点的数组或哈希表,数组或哈希表的索引通常是字符集中的字符。例如,如果存储的是小写字母组成的字符串,那么数组大小为26。
  • 标志位:表示该节点是否是一个字符串的结尾。有时候也会附加其他信息,如该字符串的频次等。

根节点

根节点通常不包含任何字符信息,它是一个虚拟节点,用于连接所有的字符串的第一个字符。

插入操作

当插入一个新的字符串时,会从根节点开始,沿着字符路径向下寻找。如果路径上的某个字符已经存在,则继续沿着该路径;如果某个字符不存在,则创建一个新的节点,并将该字符作为新节点的内容。

查找操作

查找一个字符串时,同样从根节点开始,沿着字符路径向下遍历。如果能够一直遍历到字符串的最后一个字符,并且该字符所在节点标记为字符串结尾,则表示找到了该字符串。

删除操作

删除一个字符串时,需要从根节点开始,沿着字符路径向下寻找。如果找到了字符串的最后一个字符,并且该字符所在的节点没有其他子节点,则可以删除该节点及其以上的无用节点。如果该节点还有其他子节点,则仅将该节点标记为非字符串结尾。

特点

  • 高效查找:Trie 树的时间复杂度为 O(L),L 是要查找的字符串的长度。这是因为每次查找都沿着字符路径进行一次比较。
  • 节省空间:共享公共前缀的字符串只需存储一次前缀,这使得 Trie 树在存储大量字符串时更加节省空间。
  • 方便排序:因为 Trie 树是按照前缀进行存储的,所以可以方便地对字符串进行排序。

应用

  • 自动补全:搜索引擎、文本编辑器等工具中的自动补全功能。
  • 拼写检查:用于检查输入的单词是否存在于词典中。
  • IP 路由:用于查找最长前缀匹配,例如在路由器的查找表中。
  • 词频统计:用于统计文本中单词出现的次数。

示例

假设我们要构建一个 Trie 树来存储字符串集合 {"cat", "car", "dog", "caterpillar"}:

  1. 插入 "cat":

    • 根 -> c -> a -> t(结束)
  2. 插入 "car":

    • 根 -> c -> a -> r(结束)
  3. 插入 "dog":

    • 根 -> d -> o -> g(结束)
  4. 插入 "caterpillar":

    • 继续扩展根 -> c -> a -> t(非结束)-> e -> r -> p -> i -> l -> l -> a -> r(结束)

最终的 Trie 树看起来像这样:

复制代码
(root)
  |
  |___ 'c' : {'a' : {'t' : {'': {}} // cat, caterpillar
                     'r' : {'': {}} // car
                    },
              'd' : {'o' : {'g' : {'': {}}}} // dog
           }

在这个 Trie 树中,"caterpillar"和"cat"共享相同的前缀"cat",而"car"和"cat"也共享相同的前缀"ca"。这种共享前缀的方式使得 Trie 树成为一种高效的字符串存储结构。

相关推荐
学运维的Kysan42 分钟前
暑假运维学习打卡第二十六天8.17
学习
dear_bi_MyOnly1 小时前
AI人工智能分类识别——机器如何学习
人工智能·学习·分类
en.en..3 小时前
数据结构考点解析:逻辑闭环与存储循环辨析
数据结构
启雀AI4 小时前
培训平台移动端离线学习方案设计与实现:视频缓存、断点续传与进度同步的工程实践
android·学习·缓存·音视频·企业lms
布莱克6055 小时前
数据库索引分类:数据结构、物理存储与逻辑角度详解
数据结构·数据库
Fa_Mian_Tuan6 小时前
图论基础|邻接矩阵超详细讲解(含无向/有向/带权图+完整可运行C语言代码)
c语言·数据结构·笔记·算法·图论
Bruce_Liuxiaowei6 小时前
从零到可运行:基于 Vue3 + FastAPI + DeepSeek-V3 的 AI 英语单词学习系统全栈实战
人工智能·python·学习·fastapi·全栈·智能体
zhangrelay6 小时前
ROS 2 Lyrical 第9章 计算机视觉与摄像头应用
linux·笔记·学习·ubuntu·机器人·ros2
雪的季节7 小时前
OPENCV学习(补充1)
人工智能·opencv·学习
小星星闪亮登场7 小时前
ST表--倍增思想
开发语言·数据结构·c++·算法·思维