Skip to content

字典树

Trie · Prefix tree

按字符串前缀共享路径组织键集合的树形数据结构。

条目类型
模型

形式陈述

Trie(前缀树)以根表示空串,边标记字母;从根沿路径读出的串对应前缀,终止标记指出哪些前缀本身是已存单词。插入、查询和删除一个长度 m 的词通常访问 O(m) 个节点,与集合中词的数量无直接对数因子。节点孩子可用定长数组、哈希表或有序映射表示,空间取决于总前缀数和字母表。

直觉

Trie 按字符逐层共享公共前缀,把字符串比较逐字符展开成树导航,避免重复存储相同前缀。从根到某节点的路径标签就是一个前缀,终止标记区分“某词到此结束”和“只是更长词的前缀”。查询时间与键长度成正比而不直接依赖词典大小,代价是节点与稀疏子指针可能占用大量内存。它利用的是字母表结构,不是键的全序比较。

Trie 前缀共享示意图
例子与边界

插入 to,tea,ten 时,三个词共享首字符 t,后两者继续共享 te。查询 te 能走到节点但若没有终止标记,就不能判定它是已存单词;前缀查询则可返回其子树中所有词。

字符编码粒度必须一致:按 UTF-8 字节建树与按 Unicode 字符建树会有不同深度和边标签。操作为 O(m) 还隐含每一步能在 O(1) 时间找到孩子,或已把孩子字典的成本计入;对大 Unicode 字母表直接为每个节点分配稠密数组通常会浪费空间。普通 Trie 的一字符一节点空间较大,压缩 Trie/Patricia 把单分支路径合并;删除时还需保留被其他词共享的前缀。后缀树索引固定文本的全部后缀,并不是把词典 Trie 简单压缩后的同一接口。

推论与应用

定义前缀路径。自动补全、词频和路由最长前缀匹配使用字符 Trie;Aho–Corasick 再加入失败链接实现多模式匹配。二进制 Trie 与 Patricia Trie把整数按 bit 导航,并压缩单分支路径,复杂度通常依赖字长 w 而非字符串字符数。求集合中与查询整数 x 的 XOR 最大值时,可从最高位起优先走与 x 当前位相反的孩子;若该分支不存在才走同位分支,这给出了位 Trie 独有而字符自动补全没有的贪心接口。

x-fast/y-fast Trie进一步在 Word-RAM 上组合前缀哈希与分桶,服务整数前驱问题;其期望或最坏界需要明确哈希与字长模型。FM-index则预处理固定文本的 BWT 与 rank,回答模式区间而不保存字典中每个前缀节点。三条路线共享“前缀”图像,却索引不同对象并提供不同接口。

参考资料
  • Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein, Introduction to Algorithms, 4th ed., MIT Press, 2022,Parts I–VI。
  • Robert E. Tarjan, Data Structures and Network Algorithms, SIAM, 1983,Chs. 1–6。
关系图谱10 个相邻概念 · 3 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
分类位置

上位 / 更一般

暂未标注直接上位概念。

下位 / 直接特例

类型化关系