2013-08-20 78 views
0

我試圖得到兩個字符串之間的全局序列對齊。但它給了我一個錯誤的答案。 我的方法如下生成評分矩陣。如何構建全局序列比對的評分矩陣?

public void makeScoringMatrix(String v,String w) 
{ 
    int ar[][]=new int[v.length()+1][w.length()+1]; 
    for(int i=v.length()-1;i>=0;i--) 
    { 
     for(int j=w.length()-1;j>=0;j--) 
     { 
      if(v.charAt(i)==w.charAt(j)) 
       ar[i][j]=ar[i+1][j+1]+1; 
      else if(v.charAt(i)!=w.charAt(j)) 
       ar[i][j]=ar[i+1][j+1]+0; 
      else 
       ar[i][j]=Math.max(ar[i][j+1],Math.max(ar[i+1][j],ar[i+1][j+1])); 
     } 
    } 
    //printArray(ar); 
    getGlobalAlignment(ar,v,w); 
} 

public void getGlobalAlignment(int ar[][],String v,String w) 
{ 
    int i=0,j=0,index=0; 
    while(i<v.length() && j<w.length()) 
    { 
     if(v.charAt(i)==w.charAt(j)) 
     { 
      System.out.print(v.charAt(i)); 
      i++; 
      j++; 
      index++; 

     } 
     else if(ar[i+1][j]>ar[i][j+1]) 
     { 
      i++; 
     } 
     else 
     { 
      j++; 
     } 
    } 

} 

有人請幫幫我...!

+0

的代碼是什麼'getGlobalAlignment'(你怎麼知道的錯誤,不是嗎?)你能舉出一個錯誤答案的輸入和輸出例子嗎?否則,幾乎不可能找到該錯誤。 –

+0

點擊編輯並將其放入您的問題。 –

+0

我已將它添加到代碼中。 –

回答

0

試試這個代碼...

public void makeMatrix(String v,String w) 
{ 
    int[][] maxDist=new int[v.length()+1][w.length()+1]; 
    for(int i=0;i<=v.length();i++) 
    { 
     for(int j=0;j<=w.length();j++) 
     { 
      if(i==0) 
       maxDist[i][j]=-j; 
      else if(j==0) 
       maxDist[i][j]=-i; 
      else 
       maxDist[i][j]=0; 
     } 
    } 
    fillMatrix(maxDist, v, w); 
} 

public int weight(String v,String w,int i,int j) 
{ 
    if(v.charAt(i-1)==w.charAt(j-1)) 
     return 1; 
    else 
     return -1; 
} 

public void fillMatrix(int[][] ar,String v,String w) 
{ 
    for(int i=1;i<=v.length();i++) 
    { 
     for(int j=1;j<=w.length();j++) 
     { 
      int scoreDiagonal=ar[i-1][j-1]+weight(v, w, i, j); 
      int scoreLeft=ar[i][j-1]-1; 
      int scoreUp=ar[i-1][j]-1; 

      ar[i][j]=Math.max(scoreDiagonal, Math.max(scoreLeft, scoreUp)); 
     } 
    } 
} 

希望這是你正在尋找...

1

您的評分​​矩陣不正確。如果您打印的矩陣,你會看到,它看起來像這樣:

A T C A 
A [3, 0, 0, 1, 0] 
G [3, 0, 0, 1, 0] 
C [3, 0, 0, 1, 0] 
A [3, 0, 0, 1, 0] 
    [3, 0, 0, 1, 0] 

問題是你是比較v [I]每一個W [J],當它應該只比最多2個相鄰位置(我和我+ 1)。

您還會注意到,當它應該是第一行並且第一列被認爲是終端值(這就是爲什麼矩陣是長度+1)時,最後一列全部爲0。我相信在回溯全局對齊期間,你應該從矩陣的最後位置開始向後走(因此術語trace- 。當你向前走時,你會比較序列相似的序列中,而不是在我不認爲矩陣的分數是正確的

你應該看看在尼德曼 - 翁施http://en.wikipedia.org/wiki/Needleman-Wunsch_algorithm維基百科的文章或閱讀的算法書籍之一; Durbin等的生物序列分析是涵蓋成對比對的經典(但很難理解)的書。