Skip to main content
QUICK REVIEW

[论文解读] Fingerprints in Compressed Strings

Philip Bille, Patrick Hagge Cording|arXiv (Cornell University)|May 13, 2013
Algorithms and Data Compression参考文献 18被引用 5
一句话总结

该论文提出了首个线性空间的数据结构,用于在不解压缩任何字符的情况下,对语法压缩字符串中的Karp-Rabin指纹查询进行高效处理。对于直线程序(SLPs),其查询时间达到O(log N);而对于用于表示LZ78风格压缩的线性SLPs,查询时间进一步降低至O(log log N),与这类压缩表示中的随机访问效率相当。

ABSTRACT

The Karp-Rabin fingerprint of a string is a type of hash value that due to its strong properties has been used in many string algorithms. In this paper we show how to construct a data structure for a string $S$ of size $N$ compressed by a context-free grammar of size $n$ that answers fingerprint queries. That is, given indices $i$ and $j$, the answer to a query is the fingerprint of the substring $S[i,j]$. We present the first O(n) space data structures that answer fingerprint queries without decompressing any characters. For Straight Line Programs (SLP) we get $O(\log N)$ query time, and for Linear SLPs (an SLP derivative that captures LZ78 compression and its variations) we get $O(\log \log N)$ query time. Hence, our data structures has the same time and space complexity as for random access in SLPs. We utilize the fingerprint data structures to solve the longest common extension problem in query time $O(\log N \log \lce)$ and $O(\log \lce \log\log \lce + \log\log N)$ for SLPs and Linear SLPs, respectively. Here, $\lce$ denotes the length of the LCE.

研究动机与目标

  • 设计高效的数据结构,用于在不进行解压缩的情况下回答语法压缩字符串上的指纹查询。
  • 在保持最优空间复杂度O(n)的同时,最小化SLPs和线性SLPs的查询时间。
  • 使指纹查询的时间复杂度与SLPs中随机访问的时间复杂度保持一致,优于以往依赖解压缩的方法。
  • 将指纹数据结构应用于高效解决压缩字符串中的最长公共扩展(LCE)问题。
  • 提出一种新的、简洁的归约方法,利用任意现有前驱数据结构作为黑箱,解决指针前驱问题。

提出的方法

  • 利用子串指纹可从前缀指纹在常数时间内计算的性质,实现SLP解析树路径上指纹的高效组合。
  • 以Bille等人[8]提出的快速随机访问数据结构为基础,结合预计算的节点指纹,实现SLPs上O(log N)时间的指纹查询。
  • 对于线性SLPs,利用生成规则的树状结构,使用层级祖先数据结构实现在解析树中常数时间的大步跳跃。
  • 将线性SLPs中的位置查找步骤建模为前驱问题,通过指针搜索技术高效求解。
  • 引入基于指针的查询机制,其中指针指向生成给定位置的根子节点,实现D = |i - j|时O(log log D)的查询时间。
  • 提出一种黑箱归约方法,利用任意底层前驱数据结构解决指针前驱问题,提升灵活性与效率。

实验结果

研究问题

  • RQ1能否在不解压缩任何字符的情况下,以亚线性时间与线性空间回答语法压缩字符串上的指纹查询?
  • RQ2能否将线性SLPs上指纹查询的查询时间提升至O(log log N),以匹配此类表示中随机访问的效率?
  • RQ3如何利用指纹数据结构高效解决压缩字符串中的最长公共扩展(LCE)问题?
  • RQ4能否设计一种新的、简洁的归约方法,利用任意现有前驱数据结构作为黑箱,解决指针前驱问题?
  • RQ5验证Karp-Rabin指纹函数在压缩字符串上无碰撞的最小空间与时间复杂度是多少?

主要发现

  • 该论文首次提出O(n)空间的数据结构,可在不解压缩任何字符的情况下,以O(log N)时间回答SLP压缩字符串上的指纹查询。
  • 对于线性SLPs,查询时间降低至O(log log N),与这类表示中随机访问的时间复杂度一致。
  • 指纹数据结构可实现:对于SLPs,LCE问题的求解时间为O(log N log ℓ);对于线性SLPs,时间为O(log ℓ log log ℓ + log log N),其中ℓ为LCE长度。
  • 提出一种新的指针前驱归约方法,利用基于指针的访问机制,实现线性SLPs中高效的位置查询,D = |i - j|时查询时间为O(log log D)。
  • 指纹验证算法的时间复杂度为O(N log N),空间复杂度为O(n),或在相同空间下以O(N²/n log N)时间运行,实现对无碰撞指纹函数的高效验证。
  • 通过利用根子串的结构与高效的滑动窗口技术,线性SLPs上的指纹验证时间进一步降低至O(N log N log log N),空间复杂度仍为O(n)。

更好的研究,从现在开始

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

无需绑定信用卡

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