“对 $w$ 位键的二进制 trie,在每个深度 $\ell$ 建哈希表,存所有存在的 $\ell$ 位前缀;叶按键序用双向链相连,内部节点记缺失方向对应的极值叶。查询键 $x$ 时对深度 $…”
结构 ​
搜索按分叉位下降到候选叶后仍须与原键完整比较;压缩边没逐位验证,不能因到叶就断言命中。路径上分叉位必须严格递增。
八位例子 ​
键 00101100、00101101、11100000 在普通 trie 有长共同路径。Patricia 只保留最高位分叉和左侧最低位分叉,加三个叶。压缩降低节点数,却不保证树高
重复键应在叶维护 multiplicity。字符串Trie允许变长字母边,整数版本依赖固定字长和位操作,二者不能只因名称相同而混写复杂度。
叶节点若只保存指向外部键的引用,查询到叶后仍须读取完整键核对。否则压缩路径跳过的位无法验证,membership 可能把邻近但不同的键误报为命中。
普通二进制 Trie 的前驱过程 ​
查询位串从根逐位走;若下一位分支存在就继续。若查询位为 1 而 1 支不存在,转入 0 支后取其中最右叶;若查询位为 0 而 0 支不存在,必须向祖先回退,找到最近一次可以从 1 支改走 0 支的位置,再取最右叶。保存子树 min/max 或叶双链可把恢复路径说清。
对键 00101100、00101101、11100000 查询 00101110,左子树定位后候选 00101101;查询 00000000 则无前驱。每步最多处理一个位,时间
Patricia 插入不变量 ​
搜索新键
到叶后必须完整比较:压缩路径跳过的位可能不同。节点
与字符串 Trie 的分界 ​
字符串 trie 的边按字符、深度按字符串长度;Patricia 原论文可处理字符串,但本页整数版本把键装入一个 Word-RAM 字并用 xor/msb 常数定位分叉。若键跨多字,msb 和比较成本需重新计。
参考资料
- Donald Morrison, “PATRICIA,” JACM, 1968.
- Donald Knuth, TAOCP, Vol. 3, 1998.