中文

后缀托盘与后缀三叉树:用于更快文本索引的结构

数据结构与算法 2013-11-08 v1

摘要

后缀树和后缀数组是两种最广泛用于文本索引的数据结构。两者均使用线性空间,并且对于多项式大小的字母表,均可在线性时间内构建。然而,在回答具有最坏情况确定性时间界限的查询时,前者耗时 O(mlogΣ)O(m\log|\Sigma|),其中 mm 为查询大小,Σ|\Sigma| 为字母表大小;而后者耗时 O(m+logn)O(m+\log n),其中 nn 为文本大小。若需输出查询的所有出现位置,增加 O(occ)O(occ) 的时间开销即已足够,其中 occocc 为输出大小。我们提出了一种将两者结合的新方法,称之为后缀托盘(suffix tray)。其空间和构建时间保持线性,而对于来自线性范围的整数字母表(即 Σ{1,,cn}\Sigma \subset \{1,\cdots, cn\},其中 cc 为任意常数),查询时间改进为 O(m+logΣ)O(m+\log|\Sigma|)。构建和查询过程均为确定性的。在此情况下,若需输出查询的所有出现位置,同样只需增加 O(occ)O(occ) 的时间开销。我们还考虑了索引的在线版本,其中文本在线逐个字符到达,并同步回答索引查询。在此变体中,我们创建了一种后缀树与后缀列表(后缀数组的动态变体)的混合结构,称为后缀三叉树(suffix trist);它支持在 O(m+logΣ)O(m+\log|\Sigma|) 时间内进行查询。后缀三叉树也使用线性空间。此外,如果存在一种线性空间后缀树的在线构建方法,使得添加一个字符的最坏情况确定性代价为 f(n,Σ)f(n,|\Sigma|)nn 为当前文本大小),则可以在 O(f(n,Σ)+logΣ)O(f(n,|\Sigma|)+\log |\Sigma|) 时间内进一步更新后缀三叉树。目前已知的 f(n,Σ)f(n,|\Sigma|) 最佳最坏情况确定性界限为 O(logn)O(\log n) 时间。

关键词

引用

@article{arxiv.1311.1762,
  title  = {Suffix Trays and Suffix Trists: Structures for Faster Text Indexing},
  author = {Richard Cole and Tsvi Kopelowitz and Moshe Lewenstein},
  journal= {arXiv preprint arXiv:1311.1762},
  year   = {2013}
}

备注

Results from this paper have appeared as an extended abstract in ICALP 2006