1 个不稳定版本
0.1.0 | 2024年3月21日 |
---|
#1837 在 算法 中
65KB
1.5K SLoC
speedytree
Speedytree 是从大型 Phylip 距离矩阵构建系统发育树时使用邻接法的 Rust 实现。有两种策略:规范算法(类似于 QuickTree)以及类似 RapidNJ 的方法,但使用 B 树。
您可以在 这里 了解更多关于邻接法的信息。RapidNJ 算法在非常大的问题上应该更快,但会牺牲更大的内存开销。
您可能还会对关于此项目的 幻灯片 感兴趣。
基准测试
您可以使用 make benchmark
运行基准测试。例如,包含了一个小的 sth 文件,但您可能想要添加自己的。我使用的对齐文件包含在发行版的二进制可执行文件中。
测试
Speedytree 有一个测试套件,可以使用 cargo test
运行。有三种类型的测试
- 单元测试,测试单个函数。
- 集成测试,使用小矩阵测试整个程序。
- 属性测试,使用随机加法的二叉树测试程序。这些测试依赖于程序应该输出与输入相同的树。
关于命令行应用程序
安装
您可以从发行页面下载二进制文件,或者自己构建。如果您自己构建,则需要安装 Rust。然后您可以使用 cargo build --release
构建二进制文件。二进制文件将位于 target/release/speedytree
。
使用方法
Speedytree 以 Phylip 距离矩阵为输入,输出 Newick 树。它可以使用如下方式
speedytree < input.phy > output.nwk
Speedytree提供了一些选项,可以用来调整输出。您可以通过运行speedytree --help
来查看它们。最重要的选项包括
-c
用于设置要使用的线程数。默认情况下,它将使用1个线程。--naive
用于使用规范实现。该算法与QuickTree等价,对于小型矩阵在实际应用中速度很快。--rapidnj
用于使用RapidNJ启发式算法,但使用BTrees实现。--hybrid
用于混合使用这两种算法。
依赖项
~6–12MB
~133K SLoC