Skip to content

Word-RAM 前驱问题

Predecessor problem

在 Word-RAM 的有限整数宇宙中维护有序集合,并查询不大于给定键的最大成员。

条目类型
模型

形式陈述

接口与模型

前驱查询扩展了有序字典/集合 ADT:除 membership 与更新外,还返回不大于查询键的最大已存键。该抽象接口也可在比较模型中研究;本页因直接使用位操作、整数宇宙和 vEB/fusion-tree 界,明确限定为Word-RAM 模型。对 S[0,U) 定义 predS(x)=max{yS:yx},无解返回 。动态版另有 insert/delete。成本须同时写 n,U,w=log2U,并假设一字容纳一键。

比较树给 O(logn);Word-RAM 可检查位和乘法,vEB 得 O(loglogU) 但朴素空间 Θ(U)。这些结论不适用于只能比较的任意对象,U 也不能偷换成 n

直觉

比较模型只能逐次判断查询落在哪个有序间隙,Word-RAM 则能一次观察键的多个位并按整数宇宙分解。前驱问题因此把集合规模 n 与宇宙/字长 U,w 同时暴露出来;任何次对数界都在利用这份额外表示能力,而不是绕过同一个比较下界。

例子与边界

例子与边界

S={5,13,21}pred(18)=13pred(4)=。路由表可把前缀覆盖区间编码为端点事件,再用前驱恢复最长匹配。若键是超长字符串或不能装入一个字,位级结构的模型前提失效。

字典只问精确命中;前驱利用全序。范围报告还须支付输出成本。静态、动态、空间与概率保证都应分别列出。

静态排序数组以 O(n) 空间和 O(logn) 二分提供比较基线。整数结构只有在明确宇宙、字长与可用字操作后才能突破它,并没有违反比较决策树下界。

静态与动态操作轨迹

从空集插入 5、13、21 后,member(13) 为真,pred(18)=13。删除 13 后,pred(18)=5,successor(18)=21;pred(5)=5 体现本文采用非严格前驱。若业务需要严格小于,应单独定义,不能在边界键上临时改规则。

静态数组二分维护 S[lo]x<S[hi] 的哨兵不变量,终止时返回 lo;插入却需线性搬移。平衡树把查询、插删都做成 O(logn)。整数结构利用位宇宙进一步改善查询,但会引入空间、随机性或更新成本。

推论与应用

实现的分界来自计算模型。二叉搜索树只用比较,在平衡时给 O(logn)van Emde Boas 树利用有界整数宇宙的递归分簇获得 O(loglogU),但朴素空间依赖 UFusion Tree在 Word-RAM 上用字级并行一次比较多个关键位,二进制 Trie 与 Patricia 压缩按位前缀导航,x-fast 与 y-fast Trie再用前缀哈希和抽样平衡时间与空间。没有宇宙大小、字长和允许指令,这些界不可互换。

参数如何进入界

vEB 递推 T(U)=T(U)+O(1)。连续开方 k 次后宇宙变常数,即 U1/2k=O(1),所以 2k=Θ(logU)k=Θ(loglogU)。朴素递归为所有簇分配空间,得到 Θ(U),即使只存 n 个键。

U=nO(1) 时可把时间写成 O(loglogn);没有这条关系就只能保留 U。Fusion tree 的 O(logwn) 又依支持哪些字操作,两式回答不同模型。

下界与相邻接口

Comparison predecessor 至少要区分 n+1 个间隙,决策树给 Ω(logn) 比较;Word-RAM 一次操作携带多位信息,故不受同一下界。Membership 只有命中/不命中,范围报告还要输出 k 项,不能从前驱时间直接得纯查询总成本。

参考资料
  • van Emde Boas et al., “An Efficient Priority Queue,” 1977.
  • Dan Willard, “Log-logarithmic Worst-case Range Queries,” 1983.
  • Pătraşcu, Thorup, predecessor bounds, STOC 2006.
关系图谱15 个相邻概念 · 3 类关系

拖动节点调整位置。

显示关系

显示:依赖

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