Skip to content

模型Model

二进制 Trie 与 Patricia 压缩

施工中 · 内容逐步修订

Binary trie · Patricia trie

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

形式陈述 ​

结构 ​

设键为 n 个不同的 w 位无符号整数,位编号从最低位 0 到最高位 w−1。二进制Trie以 {0,1} 为字母表,按最高位到最低位导航,精确查找以及前驱查询的直接基线均为 O(w),空间可达 O(nw)。未压缩的二进制树是逐符号 Trie 的特例;Patricia 则采用保留同一键集合的压缩表示,把多条单比特边折成带分叉位记录的一步,不再逐边满足“一条边一个符号”的表示条件。它压缩无分叉路径,内部节点只保存分叉位,叶保存完整键,当 n≥1 时,它有 n 个叶、n−1 个二叉分叉节点,因而节点数为 O(n)。

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

直觉

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

例子与边界

八位例子 ​

图先展示两个键 00101100、00101101:前七位相同,只有最低位不同,压缩后只保留 d=0 的分叉和两个叶。若再加入 11100000,就增加一个 d=7 的根;其 0 支指向原来的 d=0 子树,1 支指向新叶。

查询未存储的 00111100 时,第 7 位为 0、第 0 位也为 0,仍会走到 00101100。完整比较发现第 4 位不同,才能返回“不存在”。这是压缩省略的位必须在叶子核对的具体原因。

若允许重复键,可在叶维护出现次数;集合接口则直接报告已存在。字符串Trie允许变长键,整数版本依赖固定字长和位操作,二者不能只因名称相同而混写复杂度。

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

普通二进制 Trie 的前驱过程 ​

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

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

Patricia 插入不变量 ​

搜索新键 x 到候选叶 y;若 x=y,按重复键规则处理并停止。否则计算 d=msb(x⊕y),即二者最高不同位的编号。沿现有路径找到第一个分叉位低于 d 的位置,插入记录 d 的内部节点,并按 x 的第 d 位连接新叶,另一支接原来的子树。若途中先到叶,就在该叶之前插入。路径分叉位严格递减(从高位到低位),因此搜索不会倒退。

到叶后必须完整比较:压缩路径跳过的位可能不同。节点 O(n) 只解决空间;一条路径最多有 min(w,n−1) 个分叉,既受不同位数限制,也受内部节点总数限制。当 w 足够大时高度可以达到 n−1,所以压缩并不保证 O(log⁡n) 的平衡高度。

推论与应用

与字符串 Trie 的分界 ​

字符串 trie 的边按字符、深度按字符串长度;Patricia 原论文可处理字符串,但本页整数版本把键装入一个 Word-RAM 字;若允许常数时间 xor 和最高置位定位 msb,就可由两键异或常数时间找到分叉位。仅声明 Word-RAM 尚未固定 msb 的实现,应在允许指令或预处理条件中说明。若键跨多字,msb 和比较成本需重新计。

参考资料
  • Donald R. Morrison, “PATRICIA—Practical Algorithm To Retrieve Information Coded in Alphanumeric,” Journal of the ACM 15(4), 1968, pp. 514–534.

  • Donald E. Knuth, The Art of Computer Programming, Vol. 3: Sorting and Searching, 2nd ed., Addison-Wesley, 1998,§6.3。

  • Pat Morin, Open Data Structures, 2013,§13.1 BinaryTrie: A Digital Search Tree,固定字长导航、叶链与 O(w) 操作界;Patricia 压缩另见 Morrison 原论文。

关系图谱9 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

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