“first–last correspondence保证新区间正好对应前缀 $cQ$。若 $l'\ge r'$,模式不存在;处理完全部 $ P $ 个字符后,出现次数为 $r l$。”
形式陈述 ​
First–Last 对应 ​
令
本文全部区间半开、Occ 不含位置
反向搜索 ​
若后缀数组区间
从空模式的全区间开始,按模式字符从右向左迭代;区间长度最终就是出现次数。每步做两次 rank,时间
直觉
排序后的后缀把同一前缀聚成连续区间。BWT 末列记录每个后缀左边的字符,first–last 对应又保持相同字符的出现次序;因此统计当前区间内字符
例子与边界
banana$ 例子 ​
在文本 banana$ 的 BWT 上搜索 ana:先由字符 a 得到所有 a 开头后缀的区间,再用 n 收缩为 na,最后用 a 收缩为 ana。某一步左右端相等即为空区间,之后模式不存在;不能继续把负长度或闭区间端点代入。
边界与逆映射 ​
字符表次序决定
推论与应用
C 数组是字符总频率的前缀和:C[c] 给出首列中严格小于 c 的字符数,再与 rankc(L,i) 相加定位同一字符的稳定次序。
公式证明与定位 ​
FM-index 每隔
区间收缩的数值核对 ​
假设当前区间 a,且 a 的出现数
逐字符搜索只得到 suffix-array 行区间;若要输出文本位置,需对每一行沿 LF 走到最近采样行。一个匹配很多的模式会产生
参考资料
- Paolo Ferragina, Giovanni Manzini, Opportunistic Data Structures with Applications, FOCS, 2000.
- Paolo Ferragina, Giovanni Manzini, Indexing Compressed Text, JACM, 2005.