#b-tree #canonical #phylogenetic #matrix #distance #neighbor-joining #rapid-nj

bin+lib speedytree

Rust 中的邻接法(Neighbor-joining)的规范和 RapidNJ 实现

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