Algoritmo Needleman-Wunsch
-
Upload
marcos-castro -
Category
Science
-
view
1.872 -
download
1
Transcript of Algoritmo Needleman-Wunsch
![Page 1: Algoritmo Needleman-Wunsch](https://reader031.fdocumentos.tips/reader031/viewer/2022012316/55aca4cf1a28ab8c3b8b45e8/html5/thumbnails/1.jpg)
1
Algoritmo de Needleman-Wunsch
Alinhamento global
Marcos Castro
![Page 2: Algoritmo Needleman-Wunsch](https://reader031.fdocumentos.tips/reader031/viewer/2022012316/55aca4cf1a28ab8c3b8b45e8/html5/thumbnails/2.jpg)
2
Introdução
O Algoritmo de Needleman-Wunsch é utilizado em Bioinformática para realizar o alinhamento global de sequências de proteínas ou nucleotídeos.
Essa foi uma das primeiras aplicações que utilizaram programação dinâmica para comparar sequências biológicas.
O algoritmo leva o nome dos seus autores: Needleman e Wunsch.
![Page 3: Algoritmo Needleman-Wunsch](https://reader031.fdocumentos.tips/reader031/viewer/2022012316/55aca4cf1a28ab8c3b8b45e8/html5/thumbnails/3.jpg)
3
Alinhamento global vs local
Alinhamento global é um alinhamento que se faz em toda a extensão da sequência.
No alinhamento local se procura alinhar fragmentos das sequências e não toda a extensão das mesmas.
O algoritmo de Needleman-Wunsch realiza o alinhamento global garantindo solução ótima.
![Page 4: Algoritmo Needleman-Wunsch](https://reader031.fdocumentos.tips/reader031/viewer/2022012316/55aca4cf1a28ab8c3b8b45e8/html5/thumbnails/4.jpg)
4
Algoritmo de Needleman-Wunsch
O algoritmo faz uso de uma matriz de pontuação (scores) para medir a similaridade entre os caracteres.
Temos os parâmetros: match (caracteres iguais), mismatch (caracteres diferentes) e gap penalty (penalidade por lacuna).
Exemplo: match = 1, mismatch = -1 e gap penalty = -1.
![Page 5: Algoritmo Needleman-Wunsch](https://reader031.fdocumentos.tips/reader031/viewer/2022012316/55aca4cf1a28ab8c3b8b45e8/html5/thumbnails/5.jpg)
5
Supor uma sequência s1 e outra sequência s2, tam_s1 e tam_s2 serão os tamanhos dessas sequências.
“M” será o nome da nossa matriz. O primeiro passo é alocar uma matriz (tam_s2 + 1) linhas por (tam_s1 + 1) colunas.
Iremos indexar a partir do zero. M[0][0] corresponde ao elemento da primeira linha e primeira coluna, M[0][1] corresponde ao elemento da primeira linha e segunda coluna e assim por diante.
Algoritmo de Needleman-Wunsch
![Page 6: Algoritmo Needleman-Wunsch](https://reader031.fdocumentos.tips/reader031/viewer/2022012316/55aca4cf1a28ab8c3b8b45e8/html5/thumbnails/6.jpg)
6
Algoritmo de Needleman-Wunsch
O M[0][0] será 0. O restante dos elementos da primeira linha serão preenchidos da seguinte forma:
M[0][i] = M[0][i - 1] + gap_penalty (i > 0)
O restante dos elementos da primeira coluna serão preenchidos da seguinte forma:
M[j][0] = M[j - 1][0] + gap_penalty (j > 0)
![Page 7: Algoritmo Needleman-Wunsch](https://reader031.fdocumentos.tips/reader031/viewer/2022012316/55aca4cf1a28ab8c3b8b45e8/html5/thumbnails/7.jpg)
7
Exemplo para inicializar a primeira linha:
gap_penalty = -1
M[0][1] = M[0][0] + gap_penalty = 0 + (-1) = -1
M[0][2] = M[0][1] + gap_penalty = -1 + (-1) = -2
e assim por diante...
Exemplo para inicializar a primeira coluna:
M[1][0] = M[0][0] + gap_penalty = 0 + (-1) = -1
M[2][0] = M[1][0] + gap_penalty = -1 + (-1) = -2
e assim por diante...
Algoritmo de Needleman-Wunsch
![Page 8: Algoritmo Needleman-Wunsch](https://reader031.fdocumentos.tips/reader031/viewer/2022012316/55aca4cf1a28ab8c3b8b45e8/html5/thumbnails/8.jpg)
8
Iremos alinhar as sequências GCAT e GAT.
Supor os valores para os seguintes parâmetros:
match = 1, mismatch = -1, gap_penalty = -1
Preenchemos a primeira linha e primeira coluna:
Algoritmo de Needleman-Wunsch
- G C A T
- 0 -1 -2 -3 -4
G -1
A -2
T -3
![Page 9: Algoritmo Needleman-Wunsch](https://reader031.fdocumentos.tips/reader031/viewer/2022012316/55aca4cf1a28ab8c3b8b45e8/html5/thumbnails/9.jpg)
9
Para preencher o restante da matriz, precisamos calcular o valor que vem da diagonal superior esquerda, do topo e da esquerda de cada célula da matriz. Iremos calcular esses valores para M[1][1] que está representado pelo ponto de interrogação.
Algoritmo de Needleman-Wunsch
- G C A T
- 0 -1 -2 -3 -4
G -1 ?
A -2
T -3
![Page 10: Algoritmo Needleman-Wunsch](https://reader031.fdocumentos.tips/reader031/viewer/2022012316/55aca4cf1a28ab8c3b8b45e8/html5/thumbnails/10.jpg)
10
O valor da diagonal é calculado:
diagonal = M[i - 1][j - 1] + score
“score” será igual a “match” se os caracteres forem iguais, caso contrário será igual a “mismatch”.
Algoritmo de Needleman-Wunsch
- G C A T
- 0 -1 -2 -3 -4
G -1 ?
A -2
T -3
![Page 11: Algoritmo Needleman-Wunsch](https://reader031.fdocumentos.tips/reader031/viewer/2022012316/55aca4cf1a28ab8c3b8b45e8/html5/thumbnails/11.jpg)
11
diagonal = M[i - 1][j - 1] + score
Para M[1][1] (i = 1 e j = 1) ficará:
diagonal = M[0][0] + score
diagonal = 0 + (+1) (match) = 1
Algoritmo de Needleman-Wunsch
- G C A T
- 0 -1 -2 -3 -4
G -1 ?
A -2
T -3
![Page 12: Algoritmo Needleman-Wunsch](https://reader031.fdocumentos.tips/reader031/viewer/2022012316/55aca4cf1a28ab8c3b8b45e8/html5/thumbnails/12.jpg)
12
O topo calcula-se da seguinte forma:
topo = M[i - 1][j] + gap_penalty
Para M[1][1] temos que (gap_penalty = -1):
topo = M[0][1] + (-1) = (-1) + (-1) = -2
Algoritmo de Needleman-Wunsch
- G C A T
- 0 -1 -2 -3 -4
G -1 ?
A -2
T -3
![Page 13: Algoritmo Needleman-Wunsch](https://reader031.fdocumentos.tips/reader031/viewer/2022012316/55aca4cf1a28ab8c3b8b45e8/html5/thumbnails/13.jpg)
13
A esquerda calcula-se da seguinte forma:
esquerda = M[i][j - 1] + gap_penalty
Para M[1][1] temos que (gap_penalty = -1):
esquerda = M[1][0] + (-1) = (-1) + (-1) = -2
Algoritmo de Needleman-Wunsch
- G C A T
- 0 -1 -2 -3 -4
G -1 ?
A -2
T -3
![Page 14: Algoritmo Needleman-Wunsch](https://reader031.fdocumentos.tips/reader031/viewer/2022012316/55aca4cf1a28ab8c3b8b45e8/html5/thumbnails/14.jpg)
14
Temos os valores da diagonal, do topo e da esquerda:
diagonal = 1, topo = -2, esquerda = -2
Para saber o M[1][1] basta calcular o máximo desses valores:
M[1][1] = max(1, -2, -2) = 1
Algoritmo de Needleman-Wunsch
- G C A T
- 0 -1 -2 -3 -4
G -1 ?
A -2
T -3
![Page 15: Algoritmo Needleman-Wunsch](https://reader031.fdocumentos.tips/reader031/viewer/2022012316/55aca4cf1a28ab8c3b8b45e8/html5/thumbnails/15.jpg)
15
Agora iremos calcular o M[1][2]:
diagonal = -1 + (-1) (mismatch) = -2
topo = -2 + (-1) = -3
esquerda = -1 + (-1) = 0
M[1][2] = max(-2, -3, 0) = 0
Algoritmo de Needleman-Wunsch
- G C A T
- 0 -1 -2 -3 -4
G -1 1 ?
A -2
T -3
![Page 16: Algoritmo Needleman-Wunsch](https://reader031.fdocumentos.tips/reader031/viewer/2022012316/55aca4cf1a28ab8c3b8b45e8/html5/thumbnails/16.jpg)
16
Matriz preenchida:
Algoritmo de Needleman-Wunsch
- G C A T
- 0 -1 -2 -3 -4
G -1 1 0 -1 -2
A -2 0 0 1 0
T -3 -1 -1 0 2
![Page 17: Algoritmo Needleman-Wunsch](https://reader031.fdocumentos.tips/reader031/viewer/2022012316/55aca4cf1a28ab8c3b8b45e8/html5/thumbnails/17.jpg)
17
O algoritmo permite reconhecer qual a célula que deu origem a cada entrada da matriz. Essa precedência é indicada pelas setas:
Essas setas é o nosso traceback que utilizaremos para realizar o alinhamento.
Algoritmo de Needleman-Wunsch
- G C A T
- 0 -1 -2 -3 -4
G -1 1 0 -1 -2
A -2 0 0 1 0
T -3 -1 -1 0 2
![Page 18: Algoritmo Needleman-Wunsch](https://reader031.fdocumentos.tips/reader031/viewer/2022012316/55aca4cf1a28ab8c3b8b45e8/html5/thumbnails/18.jpg)
18
Para construir o alinhamento, começa-se pela última célula que foi preenchida, para o nosso exemplo é a M[3][4] que possui o valor 2.
Utilizaremos a orientação das setas para construir o alinhamento.
Algoritmo de Needleman-Wunsch
- G C A T
- 0 -1 -2 -3 -4
G -1 1 0 -1 -2
A -2 0 0 1 0
T -3 -1 -1 0 2
![Page 19: Algoritmo Needleman-Wunsch](https://reader031.fdocumentos.tips/reader031/viewer/2022012316/55aca4cf1a28ab8c3b8b45e8/html5/thumbnails/19.jpg)
19
M[3][4] veio da diagonal, então as duas sequências recebem caracteres.
Sequência 1: T
Sequência 2: T
Algoritmo de Needleman-Wunsch
- G C A T
- 0 -1 -2 -3 -4
G -1 1 0 -1 -2
A -2 0 0 1 0
T -3 -1 -1 0 2
![Page 20: Algoritmo Needleman-Wunsch](https://reader031.fdocumentos.tips/reader031/viewer/2022012316/55aca4cf1a28ab8c3b8b45e8/html5/thumbnails/20.jpg)
20
M[2][3] veio da diagonal, então as duas sequências recebem caracteres.
Sequência 1: AT
Sequência 2: AT
Algoritmo de Needleman-Wunsch
- G C A T
- 0 -1 -2 -3 -4
G -1 1 0 -1 -2
A -2 0 0 1 0
T -3 -1 -1 0 2
![Page 21: Algoritmo Needleman-Wunsch](https://reader031.fdocumentos.tips/reader031/viewer/2022012316/55aca4cf1a28ab8c3b8b45e8/html5/thumbnails/21.jpg)
21
M[1][2] veio da esquerda, então coloca-se o caractere na sequência 1 e a lacuna (gap) na sequência 2.
Sequência 1: CAT
Sequência 2: -AT
Algoritmo de Needleman-Wunsch
- G C A T
- 0 -1 -2 -3 -4
G -1 1 0 -1 -2
A -2 0 0 1 0
T -3 -1 -1 0 2
![Page 22: Algoritmo Needleman-Wunsch](https://reader031.fdocumentos.tips/reader031/viewer/2022012316/55aca4cf1a28ab8c3b8b45e8/html5/thumbnails/22.jpg)
22
M[1][1] veio da diagonal, então as duas sequências recebem caracteres.
Sequência 1: GCAT
Sequência 2: G-AT
Algoritmo de Needleman-Wunsch
- G C A T
- 0 -1 -2 -3 -4
G -1 1 0 -1 -2
A -2 0 0 1 0
T -3 -1 -1 0 2
![Page 23: Algoritmo Needleman-Wunsch](https://reader031.fdocumentos.tips/reader031/viewer/2022012316/55aca4cf1a28ab8c3b8b45e8/html5/thumbnails/23.jpg)
23
Se tivesse uma seta apontando para o topo, colocaríamos uma lacuna na sequência 1 e o caractere na sequência 2.
Algoritmo de Needleman-Wunsch
- G C A T
- 0 -1 -2 -3 -4
G -1 1 0 -1 -2
A -2 0 0 1 0
T -3 -1 -1 0 2
![Page 24: Algoritmo Needleman-Wunsch](https://reader031.fdocumentos.tips/reader031/viewer/2022012316/55aca4cf1a28ab8c3b8b45e8/html5/thumbnails/24.jpg)
24
A implementação foi feita utilizando a linguagem de programação Python. O código encontra-se no endereço:
https://github.com/marcoscastro/msc_bioinfo/tree/master/needleman_wunsch
Para executar o nosso exemplo basta fazer:
python needleman_wunsch.py GCAT GAT 1 -1 -1
GCAT e GAT são as sequências. 1, -1 e -1 são os parâmetros match, mismatch e gap_penalty respectivamente.
Implementação
![Page 26: Algoritmo Needleman-Wunsch](https://reader031.fdocumentos.tips/reader031/viewer/2022012316/55aca4cf1a28ab8c3b8b45e8/html5/thumbnails/26.jpg)
26
http://www.cs.utoronto.ca/~brudno/bcb410/lec2notes.pdf
http://web.ist.utl.pt/ist155746/relatorio_2_bc.pdf
http://en.wikipedia.org/wiki/Needleman-Wunsch_algorithm
Referências