CSBitVectors 是一个在 C# 中实现的简洁位向量数据结构。简洁位向量是一种利用索引增强的位向量,索引的大小相对于向量本身的大小“无关紧要”。该索引用于在亚线性时间内处理以下查询:

  1. rank:返回指定范围内 0 或 1 的数量。形式如下:

rank : BitVector -> Nat -> {0, 1} -> Nat

具体实现为:

rank vec k b = |{i | i <- [0, ..., k) vec[i] = b }|

(注意:上面声明的范围是排他性的,即 i <- [0, ..., k),但某些形式主义可能使用包含性的定义范围:i <- [0, ..., k]。)

  1. select:返回第 k 次出现 0 或 1 的位置。形式如下:

select : BitVector -> Nat -> {0, 1} -> Nat