OpenTreeOfLife / otcetera

C++20 lib for manipulations of phylogenetic trees and supertree operations
Other
4 stars 3 forks source link

Speed up subproblem solver using faster version of BUILD for trees #59

Open bredelings opened 5 years ago

bredelings commented 5 years ago

(2018) Fast Compatibility Testing for Rooted Phylogenetic Trees

This paper allows compatibility testing directly on a collection of trees without first decomposing them into splits. It should allow performing this test in O(M*log^2(M)) where M=vertices+edges for all the trees T[i] in a "profile". I can't remember how bad our current implementation is (quadratic? cubic?) but this should be much better, especially since it eliminates the bottleneck step, which is to perform tons of set intersections between large sets.

Implementation issues:

bredelings commented 5 years ago

(2013) Faster deterministic fully-dynamic graph connectivity (2009) Maintaining dynamic minimum spanning trees: An experimental study (2001) An Experimental Study of Polylogarithmic, Fully Dynamic, Connectivity Algorithms

  1. Rust outils
bredelings commented 5 years ago

I suspect that implementing a not-quite-as-fast version of the connectivity test would still be a speedup.

bredelings commented 5 years ago

This is now being developed on the faster-solver branch. The plan is to get a minimal working version, and speed up things that seems to be taking the most time. This should take less time than beginning by implementing the full HDT fully-dynamic graph connectivity stuff.

bredelings commented 3 years ago

I've done initial coding to use HDT-0. It required

Other approaches to speed up the subtree solver involve trying to avoid redoing the BUILD problem completely for every new branch that we try and test. However, an initial approach using memoization on branch 'use-dict-in-solver' did not appear to produce a speedup either. So this is hard.