SlideShare uma empresa Scribd logo
1 de 26
Baixar para ler offline
1
Algoritmo de Needleman-Wunsch
Alinhamento global
Marcos Castro
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.
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.
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.
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
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)
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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/n
eedleman_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
25
Dúvidas?
mcastrosouza@live.com
Obrigado!
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

Mais conteúdo relacionado

Mais procurados

Infecções Fungicas - Microbiologia.pptx
Infecções Fungicas - Microbiologia.pptxInfecções Fungicas - Microbiologia.pptx
Infecções Fungicas - Microbiologia.pptxRodrigoShayd1
 
Aula sobre matrizes - Linguagem C
Aula sobre matrizes - Linguagem CAula sobre matrizes - Linguagem C
Aula sobre matrizes - Linguagem Cprofjr
 
Reposta Imune Contra as Infecções
Reposta Imune Contra as InfecçõesReposta Imune Contra as Infecções
Reposta Imune Contra as InfecçõesLABIMUNO UFBA
 
ICSA17 - Células e Tecidos do Sistema Imune
ICSA17 - Células e Tecidos do Sistema ImuneICSA17 - Células e Tecidos do Sistema Imune
ICSA17 - Células e Tecidos do Sistema ImuneRicardo Portela
 
Hipersensibilidade tipo I
Hipersensibilidade tipo IHipersensibilidade tipo I
Hipersensibilidade tipo ILABIMUNO UFBA
 
Aula 4 imunidade adquirida humoral_2-2011
Aula 4 imunidade adquirida humoral_2-2011Aula 4 imunidade adquirida humoral_2-2011
Aula 4 imunidade adquirida humoral_2-2011mfernandamb
 
Tipos de ácidos graxos
Tipos de ácidos graxosTipos de ácidos graxos
Tipos de ácidos graxosCarlos Kramer
 
Aula de Biologia Molecular sobre Síntese de Proteínas
Aula de Biologia Molecular sobre Síntese de ProteínasAula de Biologia Molecular sobre Síntese de Proteínas
Aula de Biologia Molecular sobre Síntese de ProteínasJaqueline Almeida
 
6256 introducao a microbiologia
6256 introducao a microbiologia6256 introducao a microbiologia
6256 introducao a microbiologiaFlávia Fernandes
 
Protozoários - Parasitologia
Protozoários - ParasitologiaProtozoários - Parasitologia
Protozoários - ParasitologiaRaphael Machado
 
Djolse aula 1 - introdução aos calculos de processo para termodinâmica
Djolse   aula 1 - introdução aos calculos de processo para termodinâmicaDjolse   aula 1 - introdução aos calculos de processo para termodinâmica
Djolse aula 1 - introdução aos calculos de processo para termodinâmicaEdmilson Faustino
 
Pseudocódigo - Estrutura de Repetição (Lógica de Programação)
Pseudocódigo - Estrutura de Repetição (Lógica de Programação)Pseudocódigo - Estrutura de Repetição (Lógica de Programação)
Pseudocódigo - Estrutura de Repetição (Lógica de Programação)Gercélia Ramos
 
Introdução à imunologia
Introdução à imunologiaIntrodução à imunologia
Introdução à imunologiaMessias Miranda
 
ICSA17 - MHC e Apresentação de Antígenos
ICSA17 - MHC e Apresentação de AntígenosICSA17 - MHC e Apresentação de Antígenos
ICSA17 - MHC e Apresentação de AntígenosRicardo Portela
 
Sistema imunológico
Sistema imunológicoSistema imunológico
Sistema imunológicoErnesto Silva
 

Mais procurados (20)

Infecções Fungicas - Microbiologia.pptx
Infecções Fungicas - Microbiologia.pptxInfecções Fungicas - Microbiologia.pptx
Infecções Fungicas - Microbiologia.pptx
 
Aula sobre matrizes - Linguagem C
Aula sobre matrizes - Linguagem CAula sobre matrizes - Linguagem C
Aula sobre matrizes - Linguagem C
 
Reposta Imune Contra as Infecções
Reposta Imune Contra as InfecçõesReposta Imune Contra as Infecções
Reposta Imune Contra as Infecções
 
ICSA17 - Células e Tecidos do Sistema Imune
ICSA17 - Células e Tecidos do Sistema ImuneICSA17 - Células e Tecidos do Sistema Imune
ICSA17 - Células e Tecidos do Sistema Imune
 
Imunidade Inata
Imunidade InataImunidade Inata
Imunidade Inata
 
Hipersensibilidade tipo I
Hipersensibilidade tipo IHipersensibilidade tipo I
Hipersensibilidade tipo I
 
PCR
PCRPCR
PCR
 
Aula 4 imunidade adquirida humoral_2-2011
Aula 4 imunidade adquirida humoral_2-2011Aula 4 imunidade adquirida humoral_2-2011
Aula 4 imunidade adquirida humoral_2-2011
 
Tipos de ácidos graxos
Tipos de ácidos graxosTipos de ácidos graxos
Tipos de ácidos graxos
 
Aula de Biologia Molecular sobre Síntese de Proteínas
Aula de Biologia Molecular sobre Síntese de ProteínasAula de Biologia Molecular sobre Síntese de Proteínas
Aula de Biologia Molecular sobre Síntese de Proteínas
 
Parte_0_ImunologiaBásica_Introdução à Imunologia_[Profª.Zilka]
Parte_0_ImunologiaBásica_Introdução à Imunologia_[Profª.Zilka]Parte_0_ImunologiaBásica_Introdução à Imunologia_[Profª.Zilka]
Parte_0_ImunologiaBásica_Introdução à Imunologia_[Profª.Zilka]
 
6256 introducao a microbiologia
6256 introducao a microbiologia6256 introducao a microbiologia
6256 introducao a microbiologia
 
Protozoários - Parasitologia
Protozoários - ParasitologiaProtozoários - Parasitologia
Protozoários - Parasitologia
 
Imunologia
Imunologia Imunologia
Imunologia
 
Djolse aula 1 - introdução aos calculos de processo para termodinâmica
Djolse   aula 1 - introdução aos calculos de processo para termodinâmicaDjolse   aula 1 - introdução aos calculos de processo para termodinâmica
Djolse aula 1 - introdução aos calculos de processo para termodinâmica
 
Pseudocódigo - Estrutura de Repetição (Lógica de Programação)
Pseudocódigo - Estrutura de Repetição (Lógica de Programação)Pseudocódigo - Estrutura de Repetição (Lógica de Programação)
Pseudocódigo - Estrutura de Repetição (Lógica de Programação)
 
Introdução à imunologia
Introdução à imunologiaIntrodução à imunologia
Introdução à imunologia
 
ICSA17 - MHC e Apresentação de Antígenos
ICSA17 - MHC e Apresentação de AntígenosICSA17 - MHC e Apresentação de Antígenos
ICSA17 - MHC e Apresentação de Antígenos
 
Aminoácidos e proteínas
Aminoácidos e proteínasAminoácidos e proteínas
Aminoácidos e proteínas
 
Sistema imunológico
Sistema imunológicoSistema imunológico
Sistema imunológico
 

Semelhante a Algoritmo Needleman-Wunsch

Algoritmo de Smith-Waterman
Algoritmo de Smith-WatermanAlgoritmo de Smith-Waterman
Algoritmo de Smith-WatermanMarcos Castro
 
Equações e inequações trigonométricas
Equações e inequações trigonométricasEquações e inequações trigonométricas
Equações e inequações trigonométricasArthur Moreira
 
Aula_07_Complexidade_de_Algoritmos.ppt
Aula_07_Complexidade_de_Algoritmos.pptAula_07_Complexidade_de_Algoritmos.ppt
Aula_07_Complexidade_de_Algoritmos.pptssuserd654cb1
 
Aula_07_Complexidade_de_Algoritmos (1).ppt
Aula_07_Complexidade_de_Algoritmos (1).pptAula_07_Complexidade_de_Algoritmos (1).ppt
Aula_07_Complexidade_de_Algoritmos (1).pptssuserd654cb1
 
Implementação mód4 - encontro 1-
Implementação   mód4 - encontro 1-Implementação   mód4 - encontro 1-
Implementação mód4 - encontro 1-inechidias
 
Implementação módulo4
Implementação   módulo4 Implementação   módulo4
Implementação módulo4 inechidias
 
Determinantes Sistemas Lineares
Determinantes Sistemas LinearesDeterminantes Sistemas Lineares
Determinantes Sistemas LinearesISJ
 
Determinantes sistemas lineares
Determinantes sistemas linearesDeterminantes sistemas lineares
Determinantes sistemas linearesISJ
 
Determinantes sistemas lineares
Determinantes sistemas linearesDeterminantes sistemas lineares
Determinantes sistemas linearesISJ
 
Lista 1 - Robótica (Jim & Ronie)
Lista 1 - Robótica (Jim & Ronie)Lista 1 - Robótica (Jim & Ronie)
Lista 1 - Robótica (Jim & Ronie)Jim Naturesa
 
Determinantes sistemas lineares
Determinantes sistemas linearesDeterminantes sistemas lineares
Determinantes sistemas linearesAntonio Carneiro
 
Relatório do projecto computacional grupo 72
Relatório do projecto computacional   grupo 72Relatório do projecto computacional   grupo 72
Relatório do projecto computacional grupo 72Rafael Lucas
 
Método de Euler Progressivo
Método de Euler Progressivo Método de Euler Progressivo
Método de Euler Progressivo Rafael Lucas
 
Www.uff.br gma informacoes disciplinas_calc 03 -a- 2012-2_lista 6
Www.uff.br gma informacoes disciplinas_calc 03 -a- 2012-2_lista 6Www.uff.br gma informacoes disciplinas_calc 03 -a- 2012-2_lista 6
Www.uff.br gma informacoes disciplinas_calc 03 -a- 2012-2_lista 6Bowman Guimaraes
 
MODEL-REFERENCE ADAPTIVE SYSTEMS (MRAS)
MODEL-REFERENCE ADAPTIVE SYSTEMS (MRAS)MODEL-REFERENCE ADAPTIVE SYSTEMS (MRAS)
MODEL-REFERENCE ADAPTIVE SYSTEMS (MRAS)Pedro Barata
 

Semelhante a Algoritmo Needleman-Wunsch (20)

Algoritmo de Smith-Waterman
Algoritmo de Smith-WatermanAlgoritmo de Smith-Waterman
Algoritmo de Smith-Waterman
 
Equações e inequações trigonométricas
Equações e inequações trigonométricasEquações e inequações trigonométricas
Equações e inequações trigonométricas
 
Aula_07_Complexidade_de_Algoritmos.ppt
Aula_07_Complexidade_de_Algoritmos.pptAula_07_Complexidade_de_Algoritmos.ppt
Aula_07_Complexidade_de_Algoritmos.ppt
 
Aula_07_Complexidade_de_Algoritmos (1).ppt
Aula_07_Complexidade_de_Algoritmos (1).pptAula_07_Complexidade_de_Algoritmos (1).ppt
Aula_07_Complexidade_de_Algoritmos (1).ppt
 
Aula 4 poe
Aula 4 poeAula 4 poe
Aula 4 poe
 
Implementação mód4 - encontro 1-
Implementação   mód4 - encontro 1-Implementação   mód4 - encontro 1-
Implementação mód4 - encontro 1-
 
Implementação módulo4
Implementação   módulo4 Implementação   módulo4
Implementação módulo4
 
15022014
1502201415022014
15022014
 
Determinantes Sistemas Lineares
Determinantes Sistemas LinearesDeterminantes Sistemas Lineares
Determinantes Sistemas Lineares
 
Determinantes sistemas lineares
Determinantes sistemas linearesDeterminantes sistemas lineares
Determinantes sistemas lineares
 
Determinantes sistemas lineares
Determinantes sistemas linearesDeterminantes sistemas lineares
Determinantes sistemas lineares
 
Lista 1 - Robótica (Jim & Ronie)
Lista 1 - Robótica (Jim & Ronie)Lista 1 - Robótica (Jim & Ronie)
Lista 1 - Robótica (Jim & Ronie)
 
Determinantes sistemas lineares
Determinantes sistemas linearesDeterminantes sistemas lineares
Determinantes sistemas lineares
 
0001
00010001
0001
 
000003 complexidade
000003 complexidade000003 complexidade
000003 complexidade
 
Relatório do projecto computacional grupo 72
Relatório do projecto computacional   grupo 72Relatório do projecto computacional   grupo 72
Relatório do projecto computacional grupo 72
 
Método de Euler Progressivo
Método de Euler Progressivo Método de Euler Progressivo
Método de Euler Progressivo
 
Www.uff.br gma informacoes disciplinas_calc 03 -a- 2012-2_lista 6
Www.uff.br gma informacoes disciplinas_calc 03 -a- 2012-2_lista 6Www.uff.br gma informacoes disciplinas_calc 03 -a- 2012-2_lista 6
Www.uff.br gma informacoes disciplinas_calc 03 -a- 2012-2_lista 6
 
Determinantes
DeterminantesDeterminantes
Determinantes
 
MODEL-REFERENCE ADAPTIVE SYSTEMS (MRAS)
MODEL-REFERENCE ADAPTIVE SYSTEMS (MRAS)MODEL-REFERENCE ADAPTIVE SYSTEMS (MRAS)
MODEL-REFERENCE ADAPTIVE SYSTEMS (MRAS)
 

Mais de Marcos Castro

Árvores de Decisão
Árvores de DecisãoÁrvores de Decisão
Árvores de DecisãoMarcos Castro
 
Colored de Bruijn Graphs
Colored de Bruijn GraphsColored de Bruijn Graphs
Colored de Bruijn GraphsMarcos Castro
 
Maratona de Programação
Maratona de ProgramaçãoMaratona de Programação
Maratona de ProgramaçãoMarcos Castro
 
Ferramentas para Bioinformática
Ferramentas para BioinformáticaFerramentas para Bioinformática
Ferramentas para BioinformáticaMarcos Castro
 
A importância da Bioinformática
A importância da BioinformáticaA importância da Bioinformática
A importância da BioinformáticaMarcos Castro
 
Redes Neurais Artificiais
Redes Neurais ArtificiaisRedes Neurais Artificiais
Redes Neurais ArtificiaisMarcos Castro
 
Problema do Caixeiro Viajante
Problema do Caixeiro ViajanteProblema do Caixeiro Viajante
Problema do Caixeiro ViajanteMarcos Castro
 
Metaheurística Simulated Annealing
Metaheurística Simulated AnnealingMetaheurística Simulated Annealing
Metaheurística Simulated AnnealingMarcos Castro
 
Expressões Regulares com Python 3
Expressões Regulares com Python 3Expressões Regulares com Python 3
Expressões Regulares com Python 3Marcos Castro
 
Programação dinâmica
Programação dinâmicaProgramação dinâmica
Programação dinâmicaMarcos Castro
 
Busca em largura - BFS
Busca em largura - BFSBusca em largura - BFS
Busca em largura - BFSMarcos Castro
 
Análise Assintótica
Análise AssintóticaAnálise Assintótica
Análise AssintóticaMarcos Castro
 
Listas, tuplas, conjuntos e dicionários
Listas, tuplas, conjuntos e dicionáriosListas, tuplas, conjuntos e dicionários
Listas, tuplas, conjuntos e dicionáriosMarcos Castro
 
Python - Dicionários
Python - DicionáriosPython - Dicionários
Python - DicionáriosMarcos Castro
 

Mais de Marcos Castro (20)

Árvores de Decisão
Árvores de DecisãoÁrvores de Decisão
Árvores de Decisão
 
Colored de Bruijn Graphs
Colored de Bruijn GraphsColored de Bruijn Graphs
Colored de Bruijn Graphs
 
Maratona de Programação
Maratona de ProgramaçãoMaratona de Programação
Maratona de Programação
 
Bioinformática
BioinformáticaBioinformática
Bioinformática
 
Arquivos FASTQ
Arquivos FASTQArquivos FASTQ
Arquivos FASTQ
 
Ferramentas para Bioinformática
Ferramentas para BioinformáticaFerramentas para Bioinformática
Ferramentas para Bioinformática
 
A importância da Bioinformática
A importância da BioinformáticaA importância da Bioinformática
A importância da Bioinformática
 
Bioinformática
BioinformáticaBioinformática
Bioinformática
 
Redes Neurais Artificiais
Redes Neurais ArtificiaisRedes Neurais Artificiais
Redes Neurais Artificiais
 
Problema do Caixeiro Viajante
Problema do Caixeiro ViajanteProblema do Caixeiro Viajante
Problema do Caixeiro Viajante
 
Metaheurística Simulated Annealing
Metaheurística Simulated AnnealingMetaheurística Simulated Annealing
Metaheurística Simulated Annealing
 
Expressões Regulares com Python 3
Expressões Regulares com Python 3Expressões Regulares com Python 3
Expressões Regulares com Python 3
 
Algoritmos gulosos
Algoritmos gulososAlgoritmos gulosos
Algoritmos gulosos
 
Programação dinâmica
Programação dinâmicaProgramação dinâmica
Programação dinâmica
 
Busca em largura - BFS
Busca em largura - BFSBusca em largura - BFS
Busca em largura - BFS
 
Análise Assintótica
Análise AssintóticaAnálise Assintótica
Análise Assintótica
 
Listas, tuplas, conjuntos e dicionários
Listas, tuplas, conjuntos e dicionáriosListas, tuplas, conjuntos e dicionários
Listas, tuplas, conjuntos e dicionários
 
Python - Set
Python - SetPython - Set
Python - Set
 
Python - Dicionários
Python - DicionáriosPython - Dicionários
Python - Dicionários
 
Tabela Hash
Tabela HashTabela Hash
Tabela Hash
 

Algoritmo Needleman-Wunsch

  • 2. 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.
  • 3. 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.
  • 4. 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.
  • 5. 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
  • 6. 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)
  • 7. 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
  • 8. 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
  • 9. 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
  • 10. 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
  • 11. 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
  • 12. 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
  • 13. 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
  • 14. 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
  • 15. 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
  • 16. 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
  • 17. 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
  • 18. 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
  • 19. 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
  • 20. 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
  • 21. 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
  • 22. 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
  • 23. 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
  • 24. 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/n eedleman_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