Skip to main content
QUICK REVIEW

[论文解读] Inducing the LCP-Array

Johannes Fischer|arXiv (Cornell University)|Jan 18, 2011
Algorithms and Data Compression参考文献 12被引用 19
一句话总结

本文提出了一种线性时间算法,通过扩展后缀数组构造中使用的诱导排序技术,来构建LCP数组。通过将LCP值诱导整合到后缀数组算法中,该方法在实际应用中表现出优越的性能,优于现有的最先进LCP数组构造算法,包括基于Burrows-Wheeler变换(BWT)的算法。

ABSTRACT

We show how to modify the linear-time construction algorithm for suffix arrays based on induced sorting (Nong et al., DCC'09) such that it computes the array of longest common prefixes (LCP-array) as well. Practical tests show that this outperforms recent LCP-array construction algorithms (Gog and Ohlebusch, ALENEX'11).

研究动机与目标

  • 解决快速后缀数组构造与较慢的LCP数组构造算法之间的性能差距。
  • 开发一种与诱导排序自然集成的实用线性时间LCP数组构造算法。
  • 消除对Burrows-Wheeler变换(BWT)的依赖,后者是某些先前LCP算法所必需的。
  • 证明在后缀数组构造过程中诱导LCP值,相比独立的LCP算法,在实际应用中具有更好的性能表现。
  • 提供一种快速、集成的解决方案,同时完成后缀数组与LCP数组的构造,充分利用诱导排序的效率。

提出的方法

  • 将后缀数组的诱导排序算法扩展,以同时诱导字典序相邻后缀的LCP值。
  • 使用$Φ$-数组(后缀数组的逆)通过关系式$\mathsf{LCP}[i] = \mathsf{LCP}[\mathsf{SA}^{-1}(\mathsf{SA}[i]-1)] + 1$高效计算LCP值,当$\mathsf{SA}[i-1]$与$\mathsf{SA}[i]$共享公共前缀时适用。
  • 将后缀分类为L型或S型,以指导诱导过程,保持与后缀数组构造中相同基于类型的排序策略。
  • 对Nong等人(2009年)的线性时间后缀数组构造算法进行改进,使其在诱导阶段包含LCP值传播。
  • 采用两阶段方法:首先通过诱导排序构造后缀数组,然后利用诱导后缀数组的顺序与结构计算LCP值。
  • 使用sais-lite算法的修改版本,实现单次遍历中同时完成后缀数组与LCP数组的构造,最大限度减少内存访问与缓存未命中。

实验结果

研究问题

  • RQ1能否将线性时间后缀数组构造中使用的诱导排序技术扩展,以实现LCP数组的线性时间计算?
  • RQ2将LCP值诱导集成到后缀数组构造流水线中,是否能带来优于独立LCP算法的实际性能提升?
  • RQ3是否可以不依赖Burrows-Wheeler变换(BWT)来构造LCP数组,特别是在BWT不可用的场景下?
  • RQ4与现有最先进的LCP数组构造算法相比,所提方法在运行时间和可扩展性方面的表现如何?
  • RQ5LCP数组构造中的实际性能瓶颈是什么?是否可以通过在SA构造过程中协同诱导LCP值来缓解?

主要发现

  • 所提算法在实际基准测试中优于所有先前的LCP数组构造算法,包括基于Burrows-Wheeler变换(BWT)的算法。
  • 即使在大规模输入下,该算法也表现出色,运行时间始终低于GO算法和朴素算法,尤其在100MB和200MB等大型数据集上优势明显。
  • 对于英文文本数据集,由于存在较长的重复子串,朴素算法表现尚可,但所提方法整体仍表现更优。
  • 所提方法(诱导 + sais-lite)的综合运行时间在大多数测试用例中最快,通常优于divsufsort与GO算法的最佳组合。
  • 该方法无需BWT,因此适用于基于BWT的压缩后缀数组之外的应用场景,在此类上下文中具有实际优势。
  • 性能提升归因于SA与LCP数组交错存储,减少了内存访问并改善了缓存行为。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。