“access$(i)$ 读根位 $b=B[i]$,到相应孩子的位置是 rank$ b(B,i)$,沿路恢复字符。rank$ c(i)$ 按字符 $c$ 的固定路径映射前缀长度;select…”
形式陈述 ​
定义 ​
作为简洁数据结构的基础接口,对由 0/1 组成的有限序列(位串)
采用半开前缀;
位串
因此
rank 的分层索引 ​
把位串分成长度
两级目录分别占
bit,均为
查询
select 的长短间隔 ​
Select 可每隔固定数量的 1 采样一个绝对位置,再按采样间隔的跨度分类。跨越很长位段的间隔数量很少,可显式存其中 1 的位置;短间隔落在少量机器字内,由更细采样或微块表恢复第
这类“长间隔少、短间隔可查表”的计数负责把 select 的辅助空间压到
直觉
Rank 把位位置映到此前出现次数,select 则沿相反方向把 occurrence 编号映回位置。分层目录只为稀疏边界存绝对计数,微块用共享表恢复局部答案;辅助索引因此可以是
例子与边界
接口与边界 ​
原位串与目录合计
动态插入一位会改变其后许多 rank 值与 select 位置,静态目录不能局部照搬。常数时间也依赖字长
Select 不是数组中选择第
推论与应用
Rank/select 是压缩索引与简洁表示的共同导航原语。Wavelet Tree 用每层位向量的 rank 把查询映到子序列;FM-index 用 BWT 上的 rank 推进 backward search;Elias–Fano 编码借助 select 定位高位一元码。平衡括号树表示则在括号位串上组合 rank/select 与匹配操作恢复树导航。
参考资料
- Guy Jacobson, Succinct Static Data Structures, PhD thesis, Carnegie Mellon University, 1989.
- David R. Clark and J. Ian Munro, “Efficient Suffix Trees on Secondary Storage,” in Proceedings of the Seventh Annual ACM-SIAM Symposium on Discrete Algorithms (SODA ’96), 1996, pp. 383–391.
- Rajeev Raman, Venkatesh Raman, and S. Srinivasa Rao, “Succinct Indexable Dictionaries with Applications to Encoding k-ary Trees, Prefix Sums and Multisets,” ACM Transactions on Algorithms 3(4), 2007, Article 43.