Opa galera e aí tudo em cima?
Estou tentando fazer um exercício em cima de um algoritmo de similaridade para que ele faço o seguinte:
Ele deve pegar uma sequência de DNA (ATCG) e compará-la com uma outra qualquer, dessa comparação ele deve achar a maior pontuação possível, sendo que: (Letras combinadas igualmente dão 1 ponto, letras diferentes dão -1 e espaço sobrando dá -2)
Ex: ACG combinado com CG isso dará zero (0).
ACG
_CG
Bem o código da similaridade eu já tenho:
public class Similaridade{
private String s1, s2;
private final int g=-2;
private int[][] m;
private int i,j;
public void setSequencias(String ps1, String ps2){
if (ps1!=null && ps2!=null){
s1=ps1;
s2=ps2;
}
}
//pegando a 1º sequencia
public String getSeq1(){
return s1;
}
//pegando a 2º
public String getSeq2(){
return s2;
}
//Montando uma matriz que fará a conta a partir da quantidade de elementos
//da sequência.
public int getSim(){
int t1=s1.length();
int t2=s2.length();
m=new int[t1+1][t2+1];
for(i=0;i<=t1;i++) m[i][0]=i*g;
for(j=0;j<=t2;j++) m[0][j]=j*g;
for(i=1;i<=t1;i++){
for(j=1;j<=t2;j++){
m[i][j]=maior(m[i-1][j]+g, m[i-1][j-1]+comp(i,j), m[i][j-1]+g);
}
}
i--;
j--;
return m[i][j];
}
//método para fazer o cálculo para descobrir qual será o maior número entre
//as combinações possíveis para ser colocado na matriz.
private int maior(int n1,int n2, int n3){
int aux=n1;
if(n2>aux) aux=n2;
if(n3>aux) aux=n3;
return aux;
}
//cálculo feito a partir da comparação se as letras são iguais ou diferentes
//iguais recebe 1; diferentes recebe -1.
private int comp(int i, int j){
return ((s1.charAt(i-1)==s2.charAt(j-1)?1:-1));
}
}
Agora o código para testar se a similaridade funciona.
import javax.swing.JOptionPane;
public class Teste{
public static void main(String[] args){
Similaridade obj = new Similaridade();
obj.setSequencias(JOptionPane.showInputDialog("Entre com a primeira sequencia"),
JOptionPane.showInputDialog("Entre com a segunda sequencia"));
JOptionPane.showMessageDialog(null,"Seqüências:
" + obj.getSeq1() + "
" +
obj.getSeq2() + "
" + "e a similaridade entre as duas é " + obj.getSim());
System.exit(0);
}
}
Obs: Esse código ainda está incompleto pois ele deve fazer a comparação das letras digitadas para ver se são as pertencentes a cadeia do DNA.
Agora o que eu não estou conseguindo achar uma solução é o seguinte.
Além dele mostrar o resultado ele mostrar a sequência tb ou seja, de acordo com o exemplo acima o resultado é zero(0), só que eu quero que seja mostrada a sequencia tb :
ACG
_CG
Se alguém tiver alguma idéia, puder ajudar, quiser tomar o programa mais complexo.
Agradeço