java - Java中的邻居加入算法

标签 java algorithm tree cluster-analysis

我正在尝试实现邻居加入算法来创建系统发育树。该算法在这里描述,我一直将其用作引用:

http://en.wikipedia.org/wiki/Neighbor_joining

我已经到了需要开始合并节点的地步,在示例中它们将 a 和 b 合并到 u 中。我在如何在 java 中实现它时遇到了问题。我有一个这样的距离矩阵:

double[][] distanceMatrix = new double[][]{
    {0, 7,11,14},
    {7, 0,6,9},
    {11,6,0,7},
    {14,9,7,0}
};

我创建一个 Q 矩阵没有问题,并确定最小值,因此需要合并哪些节点。但是当涉及到实际编码时,我被难住了。我需要创建一个新的相似矩阵,用 U 替换 A 和 B,所以我假设我需要创建一个比我开始使用的矩阵小的新矩阵,所以我需要创建一个大小为 -1 的全新矩阵?我还需要跟踪索引,因为它们对应于特定的序列。每次我合并时,它们都需要向下移动,所以我想我需要某种列表来跟踪序列的去向?

有人可以告诉我如何开始吗?

最佳答案

如果您不想重建矩阵,可以将列标记为“已死”。

为每一列保留一个列表,其中包含聚合(合并)的内容。

对我来说,这听起来很像经典的层次凝聚聚类 (HAC);应该有很多关于如何在矩阵上实现它的示例。

关于java - Java中的邻居加入算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26749895/

相关文章:

java - 在没有第三方库的情况下下载远程图像的最佳方法?

algorithm - 有没有办法把两个角压缩成2个字节?

c# - 在整数数组中找到具有最大乘积的连续序列

haskell - 查找 Haskell 树中节点的值

java - 避免对实例相关类型和原始类型进行检查

java - 带有列表的树上的 BFS

java - Java 中的 ActionEvent 和 getText() 遇到问题

java - Gson StackOverflowError

java - 使用 JXL 访问 Excel 中超过 256 列

arrays - 给定一个输入数组,输出对数组进行排序的最小交换次数