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<em>g;
for(j=0;j<=t2;j++) m[0][j]=j</em>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:n" + obj.getSeq1() + "n" +
obj.getSeq2() + "n" + "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
Exercício de similaridade
G
1 Resposta
R
Tenta isso:
Ah, é um JavaBean.
public class testaDNA
{
private static char[] sequencia1;
private static char[] sequencia2;
private static int compatibilidade = 0;
public static void setSequencia1(char[] vSeq1)
{
sequencia1 = vSeq1;
}
public static void setSequencia1(char[] vSeq2)
{
sequencia2 = vSeq2;
}
public static String getSequencia1()
{
return ( sequencia1.toString() );
}
public static String getSequencia2()
{
return ( sequencia2.toString() );
}
public static int getSequencia1()
{
igualaTamanho();
int resultado comparaSequencias();
return ( resultado );
}
private static void igualaTamanho()
{
char [] temp;
if (sequencia1.length <= sequencia2.length)
{
temp = new char[sequencia2.length];
for (int i = 0; i < sequencia2.length; i++)
if (i > sequencia1.length)
temp[i] = " ";
else
temp[i] = sequencia1[i];
setSequencia1(temp);
}
else
{
temp = new char[sequencia1.length];
for (int i = 0; i < sequencia1.length; i++)
if (i > sequencia2.length)
temp[i] = " ";
else
temp[i] = sequencia2[i];
setSequencia2(temp);
}
}
private static int comparaSequencias()
{
int temp = 0;
for ( int i = 0; i < sequencia1.length; i++ )
if ( sequencia1[i].equalsIgnoreCase(sequencia2[i]) )
temp += 1;
/* Se a primeira sequencia não puder ter espaços " ", adiciona isso:
&& (sequencia1[i].equalsIgnoreCase(" ") */
else if ( sequencia2[i].equalsIgnoreCase(" ") )
temp += -2;
else if ( ! sequencia1[i].equalsIgnoreCase(sequencia2[i]) )
temp += -1;
return ( temp );
}
}
[]s
Criado 8 de março de 2003
Ultima resposta 5 de mai. de 2005
Respostas 1
Participantes 2
Alura Git Flow: entenda o que é, como e quando utilizar Entenda o que é Git Flow, como funciona seu fluxo com branches como Master, Develop, Feature, Release e Hotfix, além de vantagens e desvantagens.
Casa do Codigo Ontologias e Web Semantica: Do conceito a aplicacao Por Ivam Galvao Filho — Casa do Codigo