[][src]Crate k2_tree

A collection designed to efficiently compress sparsely-populated bit-matrices.

See the original proposal here.

Note: This library heavily relies upon bit_vec to optimally store its data. If you have k2_tree as a dependancy, always try to compile with optimisations! bit_vec is very slow without them!

How it Works:

Original Bit-Matrix:

This example is not tested
00|00||10|10
00|00||00|11
------------
00|00||00|00
00|00||00|10
============
10|10||00|11
10|00||00|00
------------
00|00||00|00
00|00||00|00

As shown above, the 8x8 bit-matrix is sub-divided into sub-matrices where:

  • The smallest is width k
  • All others are k * children_width

Modified Matrix

Then, all sub-matrices containing only zeroes are substituted by a single zero, like so:

This example is not tested
0    ||10|10
     ||00|11
     ||-----
     ||0 |00
     ||  |10
============
10|10||0 |11
10|00||  |00
------------
0 |0 ||0 |0 
  |  ||  |  

K2Tree Representation of Modified Matrix

And then the K2Tree is built from this modified matrix:

This example is not tested
               0111
            ____|||________
            |    |         |
          1101 1100      0100
  |----|----|    |----|    |
1000 1011 0010 1010 1000 1100

In the first layer of the tree, each bit refers to one of the 4 largest quadrants in the modified matrix in the order:

  • The top-left contains nothing
  • The top-right contains something
  • The bottom-left contains something
  • The bottom-right contains something

Then, for the second layer each block refers to the sub-matrices of each quadrant:

  • The top-right quadrant contains the following sub-quadrants:
    • The top-left, top-right and bottom-right contain something
    • The bottom-left contains nothing
  • The bottom-left qudrant contains the following:
    • Top-left and top-right contains something
    • Bottom-left and bottom-right contains nothing
  • And so on for the final quadrant

The final layer is referred to as the leaf-layer and contains the actual data in the matrix:

  • The top-left sub-quadrant of the top-right quadrant contains the bits: 1000
  • Etc.

Bit Representation of K2Tree

Finally, the above K2Tree is stored as a series of bits:

0111::1101,1100,0100::1000,1011,0010,1010,1000,1100

(Where :: separates layers and , separates blocks)

Modules

error

Library error types.

tree

K2Tree structure and assosciated types.

Structs

K2Tree

A collection designed to efficiently compress sparsely-populated bit-matrices.