“Rank/select 是压缩索引与简洁表示的共同导航原语。Wavelet Tree 用每层位向量的 rank 把查询映到子序列;FM index 用 BWT 上的 rank 推进 back…”
形式陈述 ​
编码、索引与合法性 ​
给定一棵含
本页统一采用半开前缀约定:
并定义
位串是合法平衡括号串,当且仅当
也就是说,每个前缀中的开括号数不少于闭括号数,整串二者相等。原始
节点与导航 ​
每个节点由其开括号位置
记
根节点的开括号位于 0,所以其深度为 enclose(p)。
findopen、findclose、enclose 以及相对 excess 的前向或后向搜索,可以通过块内查表、块级最小值摘要和范围最值结构支持。经典结果在
直觉
一对匹配括号像一个闭合容器:节点的所有后代都写在它的开括号与闭括号之间。括号嵌套就是祖先关系;一个孩子的闭括号之后若立刻出现开括号,那个开括号就是它的下一个兄弟。显式树上的指针追踪因此可以改写成位串上的 matching 和高度搜索。
excess
例子与边界
根有两个孩子,左孩子又有一个孩子时,括号串为
按 0 起点编号,根为
这个例子也说明“下一个孩子”不能靠固定字符步长取得:左孩子占用的括号区间长度取决于其整棵子树,必须先跳到匹配闭括号之后。
含
所以表示任意此类树至少需要
位。原始括号串的
索引约定不能混用。有的文献把 rank(i) 定义为包含位置 findclose 的目标高度、深度公式和子树区间端点会一起变化。本页全部公式都使用“半开前缀、根深度 0、无额外虚拟根”的约定。
推论与应用
若定义
许多导航操作都可以归约为 matching、范围最小值和相对高度首次命中。实际实现会按机器字分块:块内模式用微表回答,跨块部分先用摘要跳过不可能包含答案的块,再在目标块内定位。
位串合法并不自动意味着查询是
平衡括号表示是简洁数据结构的基础部件,可用于有序树、XML 文档、后缀树拓扑和若干平面图表示。应用层若还需要节点标签或边值,通常另建与开括号次序对齐的数组;树形的
参考资料
- Guy Jacobson, “Space-Efficient Static Trees and Graphs,” FOCS, 1989, pp. 549–554.
- J. Ian Munro and Venkatesh Raman, “Succinct Representation of Balanced Parentheses and Static Trees,” SIAM Journal on Computing 31(3), 2001, pp. 762–776.
- R. Raman, V. Raman, and S. S. Rao, “Succinct Indexable Dictionaries with Applications to Encoding
-ary Trees, Prefix Sums and Multisets,” ACM Transactions on Algorithms 3(4), 2007.