TEnho que fazer milhões de comparações e indexOf apenas retorna o indice qdo a string é exatamente igual.
Existe algum método eficiente para isso.
Estou trabalhando com Bioajava, mais os métodos de alinhamento são muito demorados e inviável para a quantidade de dados q possuo.
publicclassComparationTest{publicstaticvoidmain(String[]args){Stringx="ACCCCCCCCCCCCCCCGTGTGAGTGTTTTTTTTTT";Stringy="AGTCTT";booleant=true;intindex=0;Stringresult="Não fui mexido.";intyLen=y.length();while(t){// Nesta linha cortamos a string e um pedaço menorStringchomp=chomp(yLen,x,index);intcount=hamming(chomp,y);if(count==1||count==0){// Interrompirá se a distancia de hamming// indicar que as strings são iguais ou um character diferente.t=false;result=chomp;}elseif(count==-1){t=false;// Não temos mais substrings com tamanho suficiente para comparar.}index++;}System.out.println(result);// O resultado será AGTGTT.}publicstaticStringchomp(intyLen,Stringx,intini){if(x.length()<yLen){return"";}returnx.substring(ini,ini+yLen);}publicstaticinthamming(Stringchomp,Stringy){// Hamming só funciona com strings do mesmo tamanho.intchompLen=chomp.length();if(chompLen!=y.length()){return-1;}intdistancia=0;for(intk=0;k<chompLen;k++){if(chomp.charAt(k)!=y.charAt(k)){distancia++;}}returndistancia;}}
Se calculei certo, este algoritmo é da seguinte ordem: O(n^2).
Problema interessante este, vc trabalha com bioinformática?
Até mais.
R
Roberto_Andrade
Obrigado csr_ pelo código. Será muito útil, pois eu posso controlar a variável distancia e obter strings com 1, 2 ou 3 caracteres incorretos.
Acho que funcionará bem, pois trabalho com genomas pequenos e dividi-los no tamanho da string procurada não consumirá tanta memória.
Procurei na doc Java por alguma função que pudesse aumentar a eficiência, mas pelo visto não há.
Abcs.
E
entanglement
É claro - para começar, evite usar Strings java, porque elas gastam 2 bytes por caracter - isso é característico da linguagem. Em vez disso, tente usar sequencias de bytes mesmo.
Outra coisa, você precisa começar a ler alguns papers sobre algoritmos melhores que indexOf (que obviamente não vai dar os resultados desejados).
Você pode procurar no Google com as palavras chave: dna sequences pattern matching