rivetTDA / rivet

RIVET is a tool for Topological Data Analysis, in particular two-parameter persistent homology.
GNU General Public License v3.0
73 stars 24 forks source link

Memory Efficiency for Computing Betti Numbers w/out Coarsening #104

Open mlesnick opened 6 years ago

mlesnick commented 6 years ago

The RIVET code is optimized for computing bigraded Betti numbers in the case where the bigrades of generators (simplices) live on a relatively small grid; for larger grids, our code has some memory inefficiencies that should be fairly straightforward to address.

-Currently, we implicitly store bigrades of all generators in a dense matirx called the IndexMatrix whose dimensions are the same as those of a grid containing all generators. We would probably want to move to a row-sparse version of the IndexMatrix.

-Currently, we compute and store the dimension function (i.e. Hilbert function) of the module during the Betti number computation, and use this to expedite the computation of xi_2. This works well for problems on a small gird. However, for a Betti number computation on a large grid, we would want to instead compute xi_2 directly, and avoid computing the dimension function altogether.

The need for these improvements is mitigated by the fact that in practice, there is little or no problem with light coarsening of the module. But given that we are also interested in scalable bigraded Betti number computation, these improvements may be worth implementing.