Rank-Select Indices Without Tears (1709.02377v1)
Abstract: A rank-select index for a sequence $B=(b_1,\ldots,b_n)$ of $n$ bits is a data structure that, if provided with an operation to access $\Theta(\log n)$ arbitrary consecutive bits of $B$ in constant time (thus $B$ is stored outside of the data structure), can compute $\mathit{rank}B(j)=\sum{i=1}j b_i$ for given $j\in{0,\ldots,n}$ and $\mathit{select}B(k)=\min{j:\mathit{rank}_B(j)\ge k}$ for given $k\in{1,\ldots,\sum{i=1}n b_i}$. We describe a new rank-select index that, like previous rank-select indices, occupies $O(n\log\log n/\log n)$ bits and executes $\mathit{rank}$ and $\mathit{select}$ queries in constant time. Its derivation is intended to be particularly easy to follow and largely free of tedious low-level detail, its operations are given by straight-line code, and we show that it can be constructed in $O(n/\log n)$ time.