У меня есть 2 последовательности, AACAGTTACC
и TAAGGTCA
, и я пытаюсь найти глобальное выравнивание последовательностей. Мне удалось создать 2D-массив и создать матрицу, и я даже заполнил ее полудинамическим подходом.глобальное выравнивание последовательностей динамическое программирование нахождение минимума в матрице
Вот мой код, чтобы заполнить матрицу:
void process() {
for (int i = 1; i <= sequenceA.length; i++) {
for (int j = 1; j <= sequenceB.length; j++) {
int scoreDiag = opt[i-1][j-1] + equal(i, j);
int scoreLeft = opt[i][j-1] - 1;
int scoreUp = opt[i-1][j] - 1;
opt[i][j] = Math.max(Math.max(scoreDiag, scoreLeft), scoreUp);
}
}
}
private int equal(int i, int j) {
if (sequenceA[i - 1] == sequenceB[j - 1]) {
return 1;
} else {
return -1;
}
}
Моя главная проблема заключается в том, что этот код генерирует следующий вывод:
0 -1 -2 -3 -4 -5 -6 -7 -8
-1 -1 0 -1 -2 -3 -4 -5 -6
-2 -2 0 1 0 -1 -2 -3 -4
-3 -3 -1 0 0 -1 -2 -1 -2
-4 -4 -2 0 -1 -1 -2 -2 0
-5 -5 -3 -1 1 0 -1 -2 -1
-6 -4 -4 -2 0 0 1 0 -1
-7 -5 -5 -3 -1 -1 1 0 -1
-8 -6 -4 -4 -2 -2 0 0 1
-9 -7 -5 -5 -3 -3 -1 1 0
-10 -8 -6 -6 -4 -4 -2 0 0
Но я хочу, чтобы это выглядело, как это (мне все равно это номера в изображениях):
Я иду t для применения штрафных санкций: за несоответствие 1 и за пробел 2, если его совпадение 0.
«Проблема LCS» - это не «выравнивание поблема» - совсем другое. – towi