2014-11-05 106 views
1

我想實現一個鄰居加入算法來創建系統發育樹。該算法在這裏所描述的,我已經使用作爲參考:Java中的鄰居加入算法

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

我已經得到的地方,我需要開始合併節點的點,在該示例它們被合併a和b成ü。我遇到了如何在java中實現這個問題。我有一個距離矩陣是這樣的:

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

我創建了一個Q矩陣沒有問題,並確定最小值,因此哪些節點需要合併。但是當涉及到實際編碼時,我很難過。我需要創建一個新的相似性矩陣,用A和B替換爲U,所以我假設我需要製作一個比我開始使用的矩陣小的新矩陣,所以我需要製作一個大小爲-1的全新矩陣?我還需要跟蹤索引,因爲它們對應於特定的序列。每次我合併時都需要向下移動,所以我想我需要一些列表來跟蹤序列的進展情況。

有人可以給我一個如何開始的想法嗎?

回答

0

如果您不想重建矩陣,可以將列標記爲「已死」。

保留每個列的聚合(合併)的內容。

聽起來很像經典的等級凝聚聚類(HAC)給我;應該有很多關於如何在矩陣上實現它的例子。