我有一個代碼來寫學校的基礎上的Needleman & Wunsch比對算法。 我寫基於什麼老師告訴我們的算法,所以也許不是100%相同的Needleman & Wunsch算法。Alignement算法
我連接到數據庫,得到2串,並與他們合作。 我創建一個矩陣,大小[N + 1] [N + 1]的第一列和具有間隙(-1)初始化線。
public String[] AlgoNeedWunsch(){ //construction de la matrice (initialisation des gap puis comparaison)
int i,j, init = 0;
StringBuilder aligne1 = new StringBuilder();
StringBuilder aligne2 = new StringBuilder();
matrice = new int[sequence1.length()+1][sequence2.length()+1];
for(i = 0; i < sequence1.length()+1; i++){
matrice[i][0] = init;
init --;
}
for(i = 0, init = 0; i < sequence2.length()+1; i++){
matrice[0][i] = init;
init --;
}
for(i = 1; i <= sequence1.length(); i++){
for(j = 1; j <= sequence2.length(); j++){
if(sequence1.charAt(i-1) == sequence2.charAt(j-1)){
matrice[i][j] = matrice[i-1][j-1] + 1; // si match, on ajoute le socre diag +1
}
else{
if(matrice[i-1][j] > matrice[i][j-1])
matrice[i][j] = matrice[i-1][j]-1;
else
matrice[i][j] = matrice[i][j-1]-1;
}
}
}
//debut de l'alignement
for(i = sequence1.length(), j = sequence2.length(); i > 0 || j > 0;){
if(i > 0 && matrice[i][j] == matrice[i-1][j] + 1){
aligne1.append(sequence1.charAt(i-1));
aligne2.append("-");
i--;
}
else if(j > 0 && matrice[i][j] == matrice[i][j-1] + 1){
aligne2.append(sequence2.charAt(j-1));
aligne1.append("-");
j--;
}
else if(i > 0 && j > 0 && matrice[i][j] == matrice[i-1][j-1]){
aligne1.append(sequence1.charAt(i-1));
aligne2.append(sequence2.charAt(j-1));
i--;
j--;
}
}
return new String[]{aligne1.reverse().toString(), aligne2.reverse().toString()};
}
}
但是,當我嘗試運行這個,它看起來像它永遠不會結束。我是Java初學者,所以我不知道我是否錯過了一些東西,或者它只是我算法中的一個問題。
非常感謝您的幫助。