每日学习一个数据结构-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 树成为一种高效的字符串存储结构。

相关推荐
Darling噜啦啦1 天前
列表转树算法深度解析:从 Map 到 Reduce 的两种实现,面试高频考点
数据结构·算法·面试
通信小呆呆2 天前
当算法有了“五感”:多模态数据融合如何向人体感官协同学习?
人工智能·学习·算法·机器学习·机器人
H__Rick2 天前
自动对焦学习-3
人工智能·学习·计算机视觉
Daisy Lee2 天前
量化学习-第1章-什么是量化金融
学习·金融·datawhale
小小工匠2 天前
Redis - 事务机制:能实现 ACID 属性吗
数据结构·redis·性能优化·并发·持久化
Alsn862 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
玖玥拾2 天前
C/C++ 数据结构(七)栈、容器适配器
c语言·数据结构·c++··容器适配器
YM52e2 天前
买菜计算器小应用 - HarmonyOS ArkUI 开发实战-PC版本
学习·华为·harmonyos·鸿蒙·鸿蒙系统
小雨下雨的雨2 天前
HarmonyOS ArkUI训练营入门-组件掌握系列-Animation 动画效果实现-PC版本
学习·华为·harmonyos·鸿蒙
cqbzcsq2 天前
CellFlow虚拟细胞论文阅读
论文阅读·人工智能·笔记·学习·生物信息