“它仍是顺序扫描一次文本的候选过滤器。若文本固定、模式查询很多,FM index会预处理 BWT 与 rank 结构,以压缩空间回答 ,并为定位另付采样成本。双模数只能降低工程碰撞概率,不等于…”
文本、端点与核心存储 ​
设文本
以唯一哨兵
:文本中严格小于字符 的字符数; :半开前缀 中 的出现次数; - 支持上述 rank 的压缩位向量或 Wavelet Tree。
所有公式采用半开端点。若把 rank 改成闭前缀,
backward search 与 count ​
后缀数组中,以模式串
first–last correspondence保证新区间正好对应前缀
若一次 rank 花
与输出出现数无关。使用平衡 wavelet tree 时
具体例子:在 banana$ 中搜索 ana ​
字符累计数满足
最终区间长度为
locate 为什么还要采样 ​
Count 只返回 suffix-array 区间;要得到每一行对应的文本位置,需要 suffix array 值。选采样步长
从待定位行反复做 LF,至多
采样空间为
调大
extract 与自索引含义 ​
提取
“自索引”表示原文可以由索引恢复,因此最终存储可不另放一份未经压缩的
空间界的条件 ​
配合压缩 rank 结构,经典 FM-index 可达到形如
bits 的 BWT 主体空间,再加 SA/ISA 采样和字母表元数据。这里
高度可压缩文本会让主体显著小于
失败边界与近邻概念 ​
单次字符串匹配可用 KMP 在
哨兵必须唯一,字符序固定,rank 端点从建表到 backward search 保持一致。动态插入文本会整体改变 BWT 行次序,静态 FM-index 不能局部套用普通数组插入。近似匹配、通配符和正则查询还会分裂为许多区间,复杂度不再只是
参考资料
- Paolo Ferragina and Giovanni Manzini, “Opportunistic Data Structures with Applications,” FOCS, 2000.
- Paolo Ferragina and Giovanni Manzini, “Indexing Compressed Text,” Journal of the ACM 52(4), 2005, 552–581.
- Veli Mäkinen et al., Genome-Scale Algorithm Design, Cambridge University Press, 2015, compressed full-text indexes chapter.