Data Structures19 sections · 729 units
Open in Course

Bitvector Rank Operation

Count bits up to position

The rank operation counts occurrences of a bit value up to a position:

  • rank0(B,i)\text{rank}_0(B, i) = count of 0s in B[0..i1]B[0..i-1]
  • rank1(B,i)\text{rank}_1(B, i) = count of 1s in B[0..i1]B[0..i-1]
function rank(bitvector, bit, i)
    count := 0
    for j from 0 to i - 1
        if bitvector[j] = bit then
            count := count + 1
    return count

Naive: O(n)O(n). With preprocessing, you can do O(1)O(1) using prefix sums.

Note: rank0(B,i)+rank1(B,i)=i\text{rank}_0(B, i) + \text{rank}_1(B, i) = i.