定长字母表的全功能实时索引
1. 模式分类与总体目标
算法根据查询模式的长度将其分为三种类型:
- 长模式:至少包含 $(log log n)^2$ 个符号。
- 中等模式:包含的符号数介于 $(log^{(3)} n)^2$ 和 $(log log n)^2$ 之间,其中 $log^{(3)} n = log log log n$。
- 短模式:包含的符号数少于 $(log^{(3)} n)^2$ 个。
对于这三种类型的模式,算法会分别维护一个数据结构,以在 $O(|P| + k)$ 时间内支持对应类型模式的查询,其中 $|P|$ 是模式的长度,$k$ 是匹配的出现次数。
2. 长模式处理
为了匹配长模式,维护一个稀疏后缀树 $T_L$,该树仅存储从位置 $q \cdot d$($q \geq 1$ 且 $d = \frac{log log n}{4 log \sigma}$)开始的后缀。存储在 $T_L$ 中的后缀被视为大小为 $\sigma^d = log^{\frac{1}{4}} n$ 的元字母表上的字符串。
- 数据结构维护
- 维护一个排序后缀列表 $L_L$。
- 维护另一个列表 $L_E$,它包含 $T_L$ 在欧拉遍历期间出现的所有节点的副本。对于 $T_L$ 的每个叶子节点,$L_E$ 中有一个元素;对于每个内部节点,$L_E$ 中有两个元素。如果 $L_E$ 中的一个节点是对应后缀 $T[i..]$ 的叶子节点,则用元符号 $\overleftarrow{T[i, d]} = t_{i
超级会员免费看
订阅专栏 解锁全文
2770

被折叠的 条评论
为什么被折叠?



