Dag_vector is a project mainly written in C++, based on the BSD-3-Clause license.
direct accessible compressed vector
Author: Daisuke Okanohara ([email protected])
Libarary of a collection of direct accessible vectors.
dag_vector is a direct accessible gamma code vector. dag_vector stores positive integers space-efficiently, and supports push_back() and fast random access.
comp_vector is a compressed vector for arbitrary objects. In comp_vector, each distinct object is assigned a unique positive value, and this value is stored by dag_vector. The object should support comparator (bool operator< (const object& ) const). If the frequency distribution of elements is skewed, comp_vector efficiently stores objects.
sparse_set is a space-efficient set for positive integers [0, 1, ...].
dag::dag_vector dv;
// you can use dag_vector as vector
dv.push_back(7); dv.push_back(1); dv.push_back(100); dv.push_back(0); dv.push_back(1000000000);
// All operations are const except push_back(); // To lookup dv[i], it requires O(log dv[i]) time.
assert(dv[0] == 7); assert(dv[1] == 1); assert(dv[2] == 100); assert(dv[3] == 0); assert(dv[4] == 1000000000);
// dag_vector supports prefix_sum() operation // dv.prefix_sum(i) returns dv[0] + dv[1] + ... + dv[i-1] in O(log max_val) time // where max_val = max(dv[0], dv[1], ...dv[i-1])
assert(dv.prefix_sum(0) == 0); assert(dv.prefix_sum(1) == 7); assert(dv.prefix_sum(2) == 8); assert(dv.prefix_sum(3) == 108); assert(dv.prefix_sum(4) == 108); assert(dv.prefix_sum(5) == 1000000108);
dag::comp_vector
cv.push_back(string("hoge")); cv.push_back(string("fuga")); cv.push_back(string("hoge")); cv.push_back(string("hoge")); cv.push_back(string("fuga"));
assert(cv[0] == "hoge"); assert(cv[1] == "fuga"); assert(cv[2] == "hoge"); assert(cv[3] == "hoge"); assert(cv[4] == "fuga");
I use criterion.h (https://github.com/tanakh/criterion) for performance test. Thanks tanakh.