NJ算法 = Neighbor-Joining Algorithm
常用在生物信息领域,是一个构造二叉树的算法。
过程
例子:进化树构建之邻接法(Neighbor-Joining)的介绍 | 生信技术
算法先从节点和节点之间的距离矩阵开始,计算一个“净分化距离”。净分化距离,是当前的单个节点到其他节点的总距离。
然后,有了净分化距离后,计算一个“净分化距离矩阵”,计算公式为:
- M 是一个净分化距离矩阵,是计算的目标
- d 为 i 到 j 的距离矩阵
- r 为 i 或 j 的净分化距离
继续,在净分化距离矩阵 M 中找到值最小的那个,取出对应的两个节点,在两个节点前设置一个父节点。将父节点视为这两个节点的集合,继续计算距离矩阵和净分化距离矩阵,最终得到一棵二叉树。
直觉
- 净分化距离:表示了一个节点的“离散程度”
- 净分化距离矩阵 M:里面的每一个值同时考虑了两个节点的距离和两个节点各自的净分化距离。
- 取净分化距离矩阵中的最小值:相当于是在取“两个离其他总体节点最远,并且两者相距较近的节点”
- 两个节点的集合:选择两个节点组成集合,赋予他们一个父节点,这里体现了集合论的思想,在此之后的计算,该父节点作为两个子节点的“代理”参与计算。
- 由此不断迭代,最终就可以获得一个“无根二叉树”,表示了总体数据的连接状态。