Skip to content
tb38 edited this page Aug 30, 2012 · 3 revisions
  • Modern CPUs today support advanced operations on 64bit words (along with the SSE4.2 instruction set). Like counting the number of set bits or get the leftmost/rightmost set bit in a word. This operations help to speed-up succinct data structures. If you compile your code with g++ (version >= 4.3) and your CPU support SSE4.2 then you can add the flag -msse4.2 and you get the maximum speed out of the sdsl. For example answering rank with the rank_support_v class will be about 30-40% faster.
  • You are looking for a 64bit implementation for very sparse bit vectors (i.e. the SD array)? Then the class sd_vector is exactly what you are searching. And the best thing: This implementation even uses less space then the original one, since we use a smaller select data structure for the dense bit vector.
  • You need a 64bit implementation that compressed the bit vectors to its zeroth order entropy i.e the representation of Raman, Raman and Rao? Then we have one classes for this: rrr_vector<block_size>. The parameter block_size can be used to get different time space trade-offs. Values between 7 and 256 are supported by the current implementation of rrr_vector. The runtime of the access operation (i.e. operator[]) depend linearly on block_size. A smaller value for block_size results in less space usage but longer runtimes for the access operation. There is on exemption: We provide a specialisation for block_size=15 which is about double as fast as block_size=16. We will a figure which shows the runtime of the operation as function of the block_size in the near future.
Clone this wiki locally