Skip to content

简洁数据结构

Succinct data structure

以接近对象族信息论下界的 bit 数保存对象,同时直接支持查询。

条目类型
模型

形式陈述

空间基准

若规模 n 的对象族为 Cn空间的信息论下界是 log2|Cn| bits。Compact 通常指常数倍该下界,succinct 指下界加低阶冗余;Encoding 只需解码整体,indexing 则要求不完全解压就回答查询。

n 节点有序树的数量是 Catalan 量级,约需 2n bits;普通指针表示却需 Θ(nlogn) bits。平衡括号加 rank/select 可接近 2n+o(n) bits 并直接导航。一个压缩文件若每次查询都要完整解压,并不是简洁索引。

查询不变量

把 DFS 进入节点记为左括号、退出记为右括号,任意前缀中左括号数不小于右括号数,末尾两者总数相等。父子、兄弟和子树导航可归约为括号匹配、excess 与 rank/select;正确性来自嵌套不变量,不是从压缩率直接推出。

直觉

Succinct 不只是“占用线性空间”,而是相对对象族的信息下界只多低阶冗余。编码负责区分所有对象,索引再把可导航的局部摘要压进低阶空间;若查询仍需完整解压,或每个节点保留普通指针,便失去了这项接口保证。

信息下界、辅助索引与直接查询
例子与边界

模型边界

O(n) bits 不一定 succinct,必须相对下界。共享查表是否计空间、字长 w=Θ(logn) 与查询时间都要声明。动态更新常需更多冗余,不能把静态常数查询直接搬入动态版。

Compact、succinct 与 compressed 也不同:压缩结构可按实例熵使用更少空间,succinct 以对象族最坏信息下界为基准;self-index 还要求不保存原文也能定位内容。三者可能重叠,但不是同义标签。

有序树的括号编码全过程

DFS 进入节点输出 (,离开输出 )。根带两个叶的树编码为 (()());扫描任意前缀时 excess=左括号数减右括号数非负,末尾归零。节点的开括号位置代表节点,匹配右括号界定其整个子树区间。

父节点可由前一个 excess 更小的位置恢复,第一个孩子是紧随开括号的下一开括号,下一兄弟在匹配右括号之后。支持这些操作需要 rank/select、find-close 与 excess 搜索索引;主体 2n bits 之外的辅助结构必须合计 o(n) 才保持 succinct。

信息下界的核对

n 节点有序树数为 Catalan Cn,Stirling 近似给 log2Cn=2nΘ(logn)。因此 2n 括号主项距最优仅低阶。若换成无序树或带标签树,对象族大小改变,下界也改变,不能继续以 2n 宣称 succinct。

推论与应用

查询时间与全局表

Word-RAM 常数操作假设 w=Θ(logn)。微块表若对所有实例共享,表大小可为 o(n);若每个实例重复存一份仍要计入。导航返回节点序号还是括号位置也需接口转换。

与压缩、自索引、动态结构对照

Entropy-compressed 结构按具体数据分布/零阶熵缩小,succinct 按对象族最坏下界;self-index 还能从索引恢复原对象。动态插入括号会移动后缀位置并修改 excess,静态常数查询不自动支持更新,通常要付对数时间或更多冗余。

参考资料
  • Guy Jacobson, Space-efficient Static Trees and Graphs, PhD thesis, 1989.
  • Raman, Raman, Rao, “Succinct Indexable Dictionaries,” TALG, 2007.
关系图谱15 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

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

上位 / 更一般

暂未标注直接上位概念。

下位 / 直接特例