This implements the banana tree data structure introduced in Cultrera di Montesano et al. "Dynamically Maintaining the Persistent Homology of Time Series" at SODA 2024.
The code is written in C++20.
Building requires boost (any reasonably recent version should do; we use the pool library and the intrusive library).
All other dependencies are in the ext directory.
To compile using meson and ninja:
mkdir build
meson setup --buildtype=release build .
ninja -C build/
If operator<< for std::chrono::duration types is not available, run meson setup -D fallback-operator=true build . instead.
Alternatively, run meson configure -D fallback-operator=true build after the setup step.
Replace release by debug for a debug build.
Tests are build if meson finds GTest and gtest_main.
Relevant executables are ex_construction, ex_local_maintenance, ex_topological_maintenance, ex_time_series.
Run with option --help to see the available options.
The string passed to --gen-args is described in docs/generators.md
ex_construction generates a time series and measures the time for constructing the banana tree.
ex_local_maintenance generates a time series and measures the time for value changes in an interval -m and -d, respectively).
ex_topological_maintenance generates a time series and measures the time for topological operations.
The size of the left interval relative to the total time series is given by the option -c.
Both ex_local_maintenance and ex_topological_maintenance can run worst-case scenarios by selecting the appropriate subcommand.
They use the correct generator by default.
To mix a random walk into the input, use generators local-wc and cut-wc, respectively, with the appropriate options; see docs/generators.md for details.
ex_time_series construct reads a time series from standard input in the form of a sequence of function values and constructs the banana tree.
Each executable outputs performance statistics to standard output.
This output can be converted into a csv-file using the python script tools/convert-to-csv.py.
Structural properties of the banana trees can be written to a separate file via the option -o.
This output can be converted into a csv-file using the python script tools/structure-convert-to-csv.py.
This repository, except files in ext/, is published under the MIT license.
See the files in ext/ for the respective licenses.
If you publish results using our algorithms, please acknowledge our work by citing the corresponding papers:
@inproceedings{cultrera24,
author = {Sebastiano Cultrera di Montesano and Herbert Edelsbrunner and Monika Henzinger and Lara Ost},
title = {Dynamically Maintaining the Persistent Homology of Time Series},
booktitle = {Proceedings of the 2024 Annual ACM-SIAM Symposium on Discrete Algorithms (SODA)},
year = {2024},
chapter = {},
pages = {243-295},
doi = {10.1137/1.9781611977912.11},
}
@misc{ost25,
title={Banana Trees for the Persistence in Time Series Experimentally},
author={Lara Ost and Sebastiano Cultrera di Montesano and Herbert Edelsbrunner},
year={2025},
eprint={2405.17920},
archivePrefix={arXiv},
primaryClass={cs.DS},
note={To appear},
url={https://arxiv.org/abs/2405.17920}
}