Computer Science > Data Structures and Algorithms
[Submitted on 17 Aug 2016 (v1), last revised 1 Nov 2017 (this version, v11)]
Title:In-Place Sparse Suffix Sorting
View PDFAbstract:Suffix arrays encode the lexicographical order of all suffixes of a text and are often combined with the Longest Common Prefix array (LCP) to simulate navigational queries on the suffix tree in reduced space. In space-critical applications such as sparse and compressed text indexing, only information regarding the lexicographical order of a size-$b$ subset of all $n$ text suffixes is often needed. Such information can be stored space-efficiently (in $b$ words) in the sparse suffix array (SSA). The SSA and its relative sparse LCP array (SLCP) can be used as a space-efficient substitute of the sparse suffix tree. Very recently, Gawrychowski and Kociumaka [SODA 2017] showed that the sparse suffix tree (and therefore SSA and SLCP) can be built in asymptotically optimal $O(b)$ space with a Monte Carlo algorithm running in $O(n)$ time. The main reason for using the SSA and SLCP arrays in place of the sparse suffix tree is, however, their reduced space of $b$ words each. This leads naturally to the quest for in-place algorithms building these arrays. Franceschini and Muthukrishnan [ICALP 2007] showed that the full suffix array can be built in-place and in optimal running time. On the other hand, finding sub-quadratic in-place algorithms for building the SSA and SLCP for \emph{general} subsets of suffixes has been an elusive task for decades. In this paper, we give the first solution to this problem. We provide the first in-place algorithm building the full LCP array in $O(n\log n)$ expected time and the first Monte Carlo in-place algorithms building the SSA and SLCP in $O(n + b\log^2 n)$ expected time. We moreover describe the first in-place solution for the suffix selection problem: to compute the $i$-th smallest text suffix.
Submission history
From: Nicola Prezza [view email][v1] Wed, 17 Aug 2016 20:54:07 UTC (71 KB)
[v2] Wed, 14 Sep 2016 14:53:16 UTC (29 KB)
[v3] Wed, 5 Oct 2016 09:03:17 UTC (32 KB)
[v4] Tue, 11 Oct 2016 11:04:06 UTC (33 KB)
[v5] Wed, 19 Oct 2016 15:45:00 UTC (33 KB)
[v6] Wed, 2 Nov 2016 13:54:27 UTC (33 KB)
[v7] Tue, 14 Feb 2017 13:36:18 UTC (80 KB)
[v8] Thu, 16 Feb 2017 10:29:45 UTC (80 KB)
[v9] Tue, 28 Feb 2017 12:42:08 UTC (81 KB)
[v10] Tue, 3 Oct 2017 07:40:44 UTC (45 KB)
[v11] Wed, 1 Nov 2017 10:57:39 UTC (28 KB)
References & Citations
Bibliographic and Citation Tools
Bibliographic Explorer (What is the Explorer?)
Connected Papers (What is Connected Papers?)
Litmaps (What is Litmaps?)
scite Smart Citations (What are Smart Citations?)
Code, Data and Media Associated with this Article
alphaXiv (What is alphaXiv?)
CatalyzeX Code Finder for Papers (What is CatalyzeX?)
DagsHub (What is DagsHub?)
Gotit.pub (What is GotitPub?)
Hugging Face (What is Huggingface?)
Papers with Code (What is Papers with Code?)
ScienceCast (What is ScienceCast?)
Demos
Recommenders and Search Tools
Influence Flower (What are Influence Flowers?)
CORE Recommender (What is CORE?)
arXivLabs: experimental projects with community collaborators
arXivLabs is a framework that allows collaborators to develop and share new arXiv features directly on our website.
Both individuals and organizations that work with arXivLabs have embraced and accepted our values of openness, community, excellence, and user data privacy. arXiv is committed to these values and only works with partners that adhere to them.
Have an idea for a project that will add value for arXiv's community? Learn more about arXivLabs.