Exercício de similaridade

1 resposta
G
Opa galera e  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  -2)


Ex: ACG combinado com CG isso dará zero (0).


ACG


_CG





Bem o código da similaridade eu  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),  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

1 Resposta

R

Tenta isso:

Ah, é um JavaBean.

public class testaDNA
&#123;
  private static char&#91;&#93; sequencia1;
  private static char&#91;&#93; sequencia2;
  private static int compatibilidade = 0;
  
  public static void setSequencia1&#40;char&#91;&#93; vSeq1&#41;
  &#123;
    sequencia1 = vSeq1;
  &#125;
  
  public static void setSequencia1&#40;char&#91;&#93; vSeq2&#41;
  &#123;
    sequencia2 = vSeq2;
  &#125;
  
  public static String getSequencia1&#40;&#41;
  &#123;
    return &#40; sequencia1.toString&#40;&#41; &#41;;
  &#125;
  
  public static String getSequencia2&#40;&#41;
  &#123;
    return &#40; sequencia2.toString&#40;&#41; &#41;;
  &#125;
  
  public static int getSequencia1&#40;&#41;
  &#123;
    igualaTamanho&#40;&#41;;
    int resultado comparaSequencias&#40;&#41;;
  
    return &#40; resultado &#41;;
  &#125;
  
  private static void igualaTamanho&#40;&#41;
  &#123;
    char &#91;&#93; temp;
    
    if &#40;sequencia1.length &lt;= sequencia2.length&#41;
    &#123;
      temp = new char&#91;sequencia2.length&#93;;
      for &#40;int i = 0; i &lt; sequencia2.length; i++&#41;
        if &#40;i &gt; sequencia1.length&#41;
          temp&#91;i&#93; = &quot; &quot;;
        else
          temp&#91;i&#93; = sequencia1&#91;i&#93;;
      setSequencia1&#40;temp&#41;;
    &#125;
    else
    &#123;
      temp = new char&#91;sequencia1.length&#93;;
      for &#40;int i = 0; i &lt; sequencia1.length; i++&#41;
        if &#40;i &gt; sequencia2.length&#41;
          temp&#91;i&#93; = &quot; &quot;;
        else
          temp&#91;i&#93; = sequencia2&#91;i&#93;;
      setSequencia2&#40;temp&#41;;
    &#125;
  &#125;
  
  private static int comparaSequencias&#40;&#41;
  &#123;
    int temp = 0;
    
    for &#40; int i = 0; i &lt; sequencia1.length; i++ &#41;
      if &#40; sequencia1&#91;i&#93;.equalsIgnoreCase&#40;sequencia2&#91;i&#93;&#41; &#41;
        temp += 1;
      /* Se a primeira sequencia não puder ter espaços &quot; &quot;, adiciona isso&#58;
         &amp;&amp; &#40;sequencia1&#91;i&#93;.equalsIgnoreCase&#40;&quot; &quot;&#41; */
      else if &#40; sequencia2&#91;i&#93;.equalsIgnoreCase&#40;&quot; &quot;&#41; &#41; 
        temp += -2;
      else if &#40; ! sequencia1&#91;i&#93;.equalsIgnoreCase&#40;sequencia2&#91;i&#93;&#41; &#41;
        temp += -1;
        
    return &#40; temp &#41;;
  &#125;
&#125;

[]s

Criado 8 de março de 2003
Ultima resposta 5 de mai. de 2005
Respostas 1
Participantes 2