Next: Atividades Realizadas
Up: Melhorias do Algoritmo Básico
Previous: Economia de Espaço em
Acima, obtivemos a similaridade entre duas seqüências. Resta obtermos o alinhamento ótimo entre duas cadeias s1 e s2. Trata-se de uma tarefa mais complicada pois, no algoritmo antigo, tínhamos em mãos toda a matriz, algo que não ocorre agora.
Faremos uso de um algoritmo recursivo para resolver esta questão. Trata-se da estratégia da divisão e conquista, isto é, transformar um problema maior em dois subproblemas menores e, a seguir, juntar as soluções.
Note que a base T de s1, na figura acima, pode ser alinhada de duas formas diferentes:
- 1.
- Ela pode ser alinhada com uma base j de s2 (
,
neste exemplo).
- 2.
- Ela pode ser alinhada com um buraco de s2 (
,
neste exemplo).
Para uma determinada base i de s1, tendo decidido qual o caso em questão (1 ou 2) e determinada a posição j em s2, o alinhamento ótimo total entre as duas seqüêcias pode ser obtido da seguinte forma:
- 1.
-
- 2.
-
![\(Alin. \acute{O}timo(s_{1}[1..(i-1)], s_{2}[1..(j-1)]) + (s_{1}[i]<>'\_') + Alin. \acute{O}timo(s_{1}[(i+1)..m], s_{2}[(j+l)..n])\)](img8.png)
Só precisamos determinar o método com que a posição j (bem como as situações 1 e 2) é encontrada. Para uma dada base i de s1, precisamos encontrar pontuações ótimas entre o prefixo
s1[1..(i-1)] e os prefixos de s2. Também precisamos encontrar as pontuações ótimas entre o sufixo
s1[(i+1)..m] e os sufixos de s2. Munidos destes valores, poderemos determinar qual posição j nos dá o melhor alinhamento entre as duas cadeias.
Para encontrarmos tais valores, basta usarmos o algoritmo que encontra a similaridade máxima entre duas seqüências (já visto anteriormente). Deste modo, a cada passo, tomamos i como sendo a metade da cadeia 1, analisamos qual seu melhor alinhamento e, em seguida, buscamos o alinhamento ótimo entre os prefixos determinado pela própria posição i e pela recém encontrada j, bem como seus sufixos. Observe o exemplo abaixo:
No exemplo acima, a última linha da tabela Best Score nos dá os alinhamentos ótimos entre o prefixo s1[1..3] com todos os prefixos de s2 (s2[vazio], s2[1..1], s2[1..2], ...s2[1..7]). Já a última linha da tabela Best Score Reverso nos dá os alinhamentos ótimos entre o sufixo s1[5..7] e todos os sufixos de s2 (s2[1..7], s2[2..7], ...s2[vazio]). O melhor alinhamento é dado pela posição j=4:
prefixo[4] + sufixo[4] + Comp(sl[i=4] e s2[j=4])
ou seja
-1+(-1)+1=-1
Next: Atividades Realizadas
Up: Melhorias do Algoritmo Básico
Previous: Economia de Espaço em
Thiago Teixeira Santos
1999-08-03