Skip to content

原则Principle

分数级联

施工中 · 内容逐步修订

fractional cascading

在相关有序目录间建立采样桥,使一次完整二分后可常数时间转移位置。

形式陈述 ​

给定一条长度 k≥1 的目录链 C1,…,Ck,每个目录是按同一全序键排序的有限记录序列,允许等值记录和空目录。查询要在每个目录找最后一个键不大于 x 的位置,没有则返回 −1。记原始记录总数为 N=∑i|Ci|。

从后向前构造增强目录,令 Ak=Ck,并令

Ai=stableMerge(Ci,sample2(Ai+1)),

其中采样取下一目录按位置编号的第 2,4,6,… 条记录,线性归并保留重数及“原记录/复制样本”的来源;这里不是去重的集合并。每条增强记录 a 保存两种位置:本层原目录 Ci 中最后一个键不大于 key(a) 的位置,以及下一增强目录 Ai+1 中相同意义的位置。相等键的桥指向该等值段末尾。目录开头另设一个不计入数据的 −∞ 哨兵,其两种位置都为 −1。

先在 A1 用一次二分查找求 x 的前驱位置。若该记录为 a,沿它的桥到下一目录,再检查至多一个后继,就能恢复 x 在下一层的前驱;同时由本层原目录指针返回该层答案。如此沿链前进,总查询时间为

O(log⁡(N+1)+k).

每层记录数满足 |Ai|≤|Ci|+|Ai+1|/2,故全部增强记录至多 2N;包括 k 个目录头与哨兵后,总空间为 O(N+k)。已排序输入可用线性合并扫描建立采样与桥,同为 O(N+k) 预处理。比较与数组访问按单位成本计。

直觉

一次完整二分确定了查询键在当前目录中的缝隙。下一目录每隔一个记录就有一个样本复制回来,因此这个缝隙里不可能隐藏很长的未知段。桥把位置带过去,只需一次局部修正;之后不用重新二分。

复制样本帮助导航,却不是本层原始数据。回答“第几条原记录”或做范围报告时,必须回到原目录指针,不能把桥记录当作额外对象输出。

分数级联的采样桥与局部校正
例子与边界

一次需要局部修正的查找 ​

取 C2=(1,4,7,10,13),样本为 (4,10),再取 C1=(3,8),于是 A1=(3,4,8,10)。查询 x=2 时,首层没有前驱,从哨兵的桥落到 A2 的位置 −1。下一记录为 1≤2,前进一步后,4>2,所以第二层前驱为 1;第一层仍返回不存在。

查询 x=9 时,首层前驱为 8,桥指到第二层的 7;下一项 10>9,无需前进。两层的原目录答案分别为 8 和 7。

重复值也要按位置保存。若 C2=(4a,4b,4c,8),第一个采样记录是 4b;查询键 4 时,桥须指向等值段末尾 4c,不能因为样本来自 4b 就把它误报为最后一项。记录身份与键值相等是两件事。

为什么至多修正一步 ​

设 a 是 x 在 Ai 中的最后一个前驱。桥已经定位到 Ai+1 中键不大于 key(a) 的最后一项。从那里到真正答案之间,所有新遇到的键都在 (key(a),x]。若至少有两个这样的记录,连续位置中必有一个被每隔一项的采样选中,并复制进 Ai;它会成为比 a 更靠后的合法前驱,矛盾。因此最多只有一个未采样记录需要跨过。哨兵情况是同一个首段论证。

同理,Ci 不会另有键落在 (key(a),x],因为其全部记录本就包含在 Ai。所以 a 保存的本层原目录位置也是 x 的正确答案。空目录、查询小于全部键或大于全部键都由这些边界位置统一处理。

推论与应用

二维范围树查询沿树访问相关的 y 目录。共享两个纵向边界位置,可把原先每张表独立二分的 O(log2⁡n) 定位工作降为 O(log⁡n),报告仍另加 k 项输出。这里闭区间下端需要 lower bound、上端需要 upper bound;可对严格前驱与非严格前驱分别建立一致的桥约定,不能把本页的最后一个 ≤x 位置直接当成第一个 ≥x。

目录链是最清楚的基型。原始分数级联定理还允许有界度目录图,并按实际经过的边传播搜索;采样密度和桥结构要适应该度界,不能把链上的“每隔一项复制”不加修改地套给任意分支图。任意不相邻的目录也不能免费获得桥定位。

动态插删会改变采样位置与桥,需另行维护动态分数级联结构。静态定理不会自动给出相同更新界。首项对数取决于首个增强目录大小,可用 O(log⁡(N+1)) 统一上界;其后工作则取决于实际访问的目录数。

参考资料
  • Bernard Chazelle、Leonidas J. Guibas,Fractional Cascading: I. A Data Structuring Technique,Algorithmica 1,1986,133–162,目录记录与值的区分、桥和 gap 不变量;本文先给静态链的直接构造。
  • Kurt Mehlhorn、Stefan Näher,Dynamic Fractional Cascading,Algorithmica,1990,动态维护的进一步阅读。
关系图谱7 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

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