中文

小空间下的快速最长公共扩展

数据结构与算法 2016-07-25 v1

摘要

本文研究最长公共扩展(LCE)问题:计算 TΣnT\in \Sigma^n(其中 Σ={0,σ1} \Sigma = \{0, \ldots \sigma-1\} )的任意两个后缀之间最长公共前缀的长度 \ell。我们提出了两种基于(Karp-Rabin)指纹和采样的快速且节省空间的解决方案。我们的第一个数据结构利用了当用作Karp-Rabin哈希函数模数时的梅森素数性质,占用 nlog2σn\lceil \log_2\sigma\rceil 位空间。第二个结构适用于任意素数模数,占用 nlog2σ+n/w+wlog2nn\lceil \log_2\sigma\rceil + n/w + w\log_2 n 位空间(w w 为内存字大小)。两种结构都支持 O(mlogσ/w)\mathcal O\left(m\log\sigma/w \right) 时间提取任意长度为 mm 的文本子串、高概率下 O(log)\mathcal O(\log\ell) 时间的LCE查询,并且可以在最优的 O(n)\mathcal O(n) 时间内构建。在第一种情况下,我们的结果是首个表明在仅使用存储文本所需空间之上 O(1)\mathcal O(1) 个字的条件下,能够以 o(n)o(n) 时间回答LCE查询。我们的结果在空间占用、查询时间和预处理时间上改进了现有最优水平,并且非常实用:我们给出了一个在实践中非常快速且节省空间的C++实现。

关键词

引用

@article{arxiv.1607.06660,
  title  = {Fast Longest Common Extensions in Small Space},
  author = {Alberto Policriti and Nicola Prezza},
  journal= {arXiv preprint arXiv:1607.06660},
  year   = {2016}
}