Skip to content

二进制 Trie 与 Patricia 压缩

Binary trie · Patricia trie

把整数视为定长位串,并以路径压缩只保留真正分叉的位置。

条目类型
模型

形式陈述

结构

w 位整数按最高位到最低位进入二进制 trie,精确查找以及前驱查询的直接基线均为 O(w),空间可达 O(nw)。Patricia 压缩无分叉路径,内部节点只保存分叉位,叶保存完整键,节点数 O(n)

搜索按分叉位下降到候选叶后仍须与原键完整比较;压缩边没逐位验证,不能因到叶就断言命中。按位权从高位走向低位时,路径上的分叉位必须严格递减。

直觉

普通二进制 trie 把每一位都画成一层,即使一段前缀上从未出现选择也照样占节点。Patricia 压缩只删除这些“没有决定作用”的层,并在保留下来的节点记录真正发生分叉的位;查询的方向判断因此不变,但被跳过的位必须在候选叶上一次性核对。

例子与边界

八位例子

键 00101100、00101101、11100000 在普通 trie 有长共同路径。Patricia 只保留最高位分叉和左侧最低位分叉,加三个叶。压缩降低节点数,却不保证树高 O(logn);最坏仍可有 n 个分叉。

重复键应在叶维护 multiplicity。字符串Trie允许变长字母边,整数版本依赖固定字长和位操作,二者不能只因名称相同而混写复杂度。

叶节点若只保存指向外部键的引用,查询到叶后仍须读取完整键核对。否则压缩路径跳过的位无法验证,membership 可能把邻近但不同的键误报为命中。

普通二进制 Trie 的前驱过程

查询位串从根逐位走;若下一位分支存在就继续。若查询位为 1 而 1 支不存在,转入 0 支后取其中最右叶;若查询位为 0 而 0 支不存在,必须向祖先回退,找到最近一次可以从 1 支改走 0 支的位置,再取最右叶。保存子树 min/max 或叶双链可把恢复路径说清。

对键 00101100、00101101、11100000 查询 00101110,左子树定位后候选 00101101;查询 00000000 则无前驱。每步最多处理一个位,时间 O(w),与压缩节点数无关。

Patricia 插入不变量

搜索新键 x 到候选叶 y,计算 d=msb(xy)。沿现有路径找到第一个分叉位低于 d 的位置,插入记录 d 的内部节点,并按 x 的第 d 位连接新叶。路径分叉位严格递减(从高位到低位),因此搜索不会倒退。

到叶后必须完整比较:压缩路径跳过的位可能不同。节点 O(n) 只解决空间;分叉高度最坏仍 n,所以 Patricia 不是平衡树。

推论与应用

与字符串 Trie 的分界

字符串 trie 的边按字符、深度按字符串长度;Patricia 原论文可处理字符串,但本页整数版本把键装入一个 Word-RAM 字并用 xor/msb 常数定位分叉。若键跨多字,msb 和比较成本需重新计。

参考资料
  • Donald Morrison, “PATRICIA,” JACM, 1968.
  • Donald Knuth, TAOCP, Vol. 3, 1998.
关系图谱3 个相邻概念 · 4 类关系

拖动节点调整位置。

显示关系

显示:依赖

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

上位 / 更一般

下位 / 直接特例

暂未标注直接特例。

类型化关系