Ankur Gupta 2026-11-05
Ankur Gupta is the coauthor named with Roberto Grossi and Jeffrey Scott Vitter on their 2003 entropy-compressed text-index paper. Its wavelet tree represents a sequence through alphabet partitions and bitvectors. Navigating a symbol uses rank queries to map positions between successive partitions, supporting operations on a compressed index. This contribution concerns searchable sequence representations; it does not identify this author with unrelated people sharing the same name.[ref]
FM-index Created 2026-10-20 Updated 2026-10-24
An FM-index is a compressed text index supporting backward search through the Burrows-Wheeler transform and occurrence counts. Character rank queries locate a matching interval; sampled suffix array positions then allow the actual text positions to be recovered. Query length, number of matches and the chosen sampling density control different parts of the search cost.[ref]
Jeffrey Scott Vitter 2026-11-05
Jeffrey Scott Vitter coauthored the 2003 work on entropy-compressed text indexes with Roberto Grossi and Ankur Gupta. It develops compressed suffix-array representations and introduces a wavelet tree representation for symbol sequences. Bitvectors route a position through alphabet partitions, with rank queries translating that position into the selected subsequence. This connects compressed storage to efficient indexing rather than requiring full decompression for every query.[ref]
Build an FM-index: store the Burrows-Wheeler transform, cumulative character counts , and a structure supporting fast rank queries for . Then each step of backward search uses two rank queries instead of rescanning the last column. A wavelet tree or suitably checkpointed counts can supply these queries while keeping memory manageable. The counting cost is proportional to query length times the rank query cost, rather than repeatedly scanning the whole genome.[ref]
To recover genomic positions, store a sampled suffix array and follow the last-to-first mapping to a sampled position, adding the number of steps taken. More samples trade storage for faster position recovery. Index character counts and sample positions, rather than storing the quadratic-size full cyclic rotation matrix.
Rank query 2026-10-20
A character rank query asks how many occurrences of character appear in the first positions of a sequence. A prefix sum array answers a single-character version in constant time after linear preprocessing; a wavelet tree supports many characters more compactly.
Wavelet tree Created 2026-10-20 Updated 2026-11-05
A wavelet tree stores a sequence over an ordered alphabet by repeatedly splitting the alphabet into two parts. At an internal node, a bit vector records zero or one according to each element's part; the children receive the corresponding stable subsequences. The original wavelet-tree construction uses such relative position encodings to support compact indexed access.[ref]
To answer a rank query for character in the first positions, follow the branch containing . Replace by the number of that branch's bits among the current bit vector's first positions. At the leaf, the resulting is the answer. Stable filtering proves the invariant: it is the number of original-prefix elements reaching the current node.
For example, split as and . The string cadaba gives root bit vector 101000 and left subsequence aaba. In its first five characters there are three left-part elements. The left bit vector 0010 contains two zeros among those first three positions, so the number of a occurrences is two. With constant-time bit rank queries and a balanced alphabet split, character rank queries take time.