• Nenhum resultado encontrado

2017 Dr. Walter F. de Azevedo Jr.

N/A
N/A
Protected

Academic year: 2021

Share "2017 Dr. Walter F. de Azevedo Jr."

Copied!
122
0
0

Texto

(1)

© 2 0 1 7 Dr . W a lte r F . d e A z e v e d o Jr . 000000000000000000000000000000000000000 000000000000000000000000000000000000000 000000000000111111111110001100000000000 000000000001111111111111111111000000001 000000000111111111111111111111111000000 000000000111111111111111111111111000000 000000000011111111111111111111100000000 000000001111111111111111111111111000000 000011111111111111111111111111111000000 001111111111111111111111111111110000000 111111111111111111111111111110000000000 111111111111111111111111111110000000000 000011111111111111111111111111111110000 001111111111111111111111111111111111000 011111111111111111111111111111111111000 001111111111111111111111111111111111100 000000011111111111111111111111111111110 000000001111111111111111111111111111110 000000000001111111111111111111111111110 000000000000011111111111111111111111110 000000000000000111111111111111111111000 000000000000000000000000001111000000000 000000000000000000000000000000000000000 000000000000000000000000000000000000000 000000000000000000000000000000000000000 www.python.org 1

(2)

Consideremos um algoritmo que tem um tempo de execução t dado t = 5n2 +12n+18

(linha azul do gráfico abaixo), onde n é o tamanho da entrada. Dizemos que este algoritmo tem um tempo de execução de ordem quadrática, ou O(n2) pois este é o

termo de mais alto grau do polinômio.

De uma forma geral, podemos determinar uma constante c para o qual a desigualdade

5n2 +12n+18 c.n2 se verifica, assim o tempo de execução é uma função quadrática.

Quando usamos essa aproximação, estamos usando a notação Big-O.

Notação Big-O www.python.org t(s) n t = 5n2 +12n+18 t = 35n2 2

(3)

O desenvolvimento de algoritmos para Bioinformática teve um grande crescimento nos últimos anos. Iremos descrever as ideias centrais das técnicas mais usadas na pesquisa científica em Bioinformática.

 Busca Exaustiva  “Branch-and-Bound”  “Greedy”  Aprendizado de Máquina  Algoritmos Randomizados  Dividir e Conquistar  Programação Dinâmica

Algoritmos para Bioinformática

www.python.org

(4)

Para ilustrar os conceitos atrás das técnicas de desenho de algoritmos, vamos considerar um problema hipotético de procurarmos um telefone sem fio em casa. Para complicar a situação estamos com as duas mãos ocupadas e está escuro, de forma que não podemos confiar na visão, como indicado abaixo (Jones & Pevzner, 2004).

Fonte: Jones, N. C. & Pevzner, P. A. An Introduction to Bioinformatics Algorithms. The MIT Press,Cambridge, 2004. Algoritmos para Bioinformática

www.python.org

(5)

O algoritmo de busca exaustiva, ou força bruta, testa todas as alternativas do problema, para encontrar uma solução particular. No exemplo do telefone, ignoramos o som do toque do telefone, e, assim, simplesmente procuramos por cada cm2 da

casa, até acharmos o telefone. Os algoritmos que seguem este desenho, são fáceis de entender, mas tem como principal problema o tempo de execução. Outra característica que podemos destacar, é como iremos dividir a casa para procurar o telefone, um parâmetro comumente considerado em algoritmos de busca. Por exemplo, se procurarmos em quadrados de 10 cm de lado teremos um tempo, e usarmos um quadrado de 1 cm de lado, teremos um tempo bem maior.

Algoritmo de Busca Exaustiva (ou Força Bruta)

www.python.org

Fonte: Jones, N. C. & Pevzner, P. A. An Introduction to

(6)

Nesta classe de algoritmo, ao iniciarmos o algoritmo de foça bruta, podemos omitir certas alternativas, diminuindo o tempo da busca. No exemplo do telefone, considere que ao chegarmos no segundo andar da casa escutamos a campainha do telefone como vinda do andar de cima. Nesta situação, podemos ignorar o andar inferior.

Algoritmo do Tipo “Branch-and-Bound”

www.python.org

Fonte: Jones, N. C. & Pevzner, P. A. An Introduction to

(7)

Muitos algoritmos são iterativos, os algoritmos do tipo “greedy’ consideram em cada iteração a alternativa mais promissora. Tomando-se o exemplo do telefone, podemos considerar que nos movimentaremos na direção de onde vem o som do telefone. Isto pode causar alguns problemas, como ilustrado abaixo, mas é uma forma de reduzirmos as alternativas testadas. Em cada aplicação temos que identificar como determinar a solução mais atrativa.

Algoritmo do Tipo “Greedy”

www.python.org

Fonte: Jones, N. C. & Pevzner, P. A. An Introduction to

(8)

Algoritmos de Aprendizado de Máquina (Machine Learning) usam o comportamento prévio do sistema para a decidir como varrer as alternativas. No exemplo do telefone, temos da experiência prévia que em 85 % da vezes o telefone estava sobre o sofá da sala, em 5 % das vezes no quarto do casal, em 4 % das vezes na cozinha, e em 6 % em outros locais. Assim, podemos começar procurando no sofá da sala e seguimos a ordem indicada.

Algoritmo com Aprendizado de Máquina

www.python.org

Fonte: Jones, N. C. & Pevzner, P. A. An Introduction to Bioinformatics Algorithms. The MIT Press,Cambridge, 2004.

85 %

5 % 4 %

(9)

No algoritmo estocástico, a faixa de alternativas a serem testadas é escolhida de forma aleatória. Assim, no exemplo do telefone, consideremos que temos uma casa com seis cômodos, podemos atribuir números de 1 a 6 aos cômodos e jogar um dado para escolher que cômodo começar. Podemos também pensar que jogamos uma moeda e decidimos se começamos com os cômodos da parte superior ou da inferior. Em todo caso, temos um componente aleatório na decisão.

Algoritmo Estocástico

www.python.org

Fonte: Jones, N. C. & Pevzner, P. A. An Introduction to

(10)

A ideia atrás desta classe e dividir um problema maior em subproblemas, independentes. Depois os subproblemas são resolvidos e combinados de forma a obtermos a solução do problema original. O ponto crítico nesta classe de algoritmos é como combinar as soluções dos subproblemas para obtermos a solução do problema principal.

Algoritmo do Tipo Dividir e Conquistar

www.python.org

Fonte: Jones, N. C. & Pevzner, P. A. An Introduction to

(11)

O algoritmo de programação dinâmica tem uma abordagem mais refinada do algoritmo de dividir em conquistar. Ao dividir o problema, em subproblemas menores, o algoritmo evita repetir computações já realizadas, usando valores armazenados de iterações anteriores. Vamos dar como exemplo o jogo das pedras.

No jogo das Pedras consideramos dois jogadores e duas pilhas de pedras. Cada jogador pode tirar uma pedra da pilha 1, ou uma pedra do pilha 2, ou duas pedras, sendo uma de cada pilha. Os jogadores não podem tirar duas pedras da mesma pilha. Vence o jogador que tirar a última pedra. Vamos montar um gráfico que ilustra o mapa de como ganhar o jogo. Para exemplificar, vamos considerar que temos duas pilhas de 10 pedras cada.

Algoritmo do Programação Dinâmica

www.python.org

(12)

O “W” considera a situação ganhadora e “L” a perdedora. A situação é ganhadora quando há pelo menos um movimento que leva você a vencer. Montaremos um mapa bidimensional considerando todas as situações para duas pilhas de 10 pedras.

0 1 2 3 4 5 6 7 8 9 10 0 W 1 W W 2 3 4 5 6 7 8 9 10 Pilha B Pilha A

Jogo das Pedras

www.python.org

(13)

Inicialmente consideremos um jogo com uma pedra na pilha A e zero pedras na pilha B, como indicado no mapa abaixo, ou seja, um jogo J1,0, usando-se a notação matricial. Esta é uma situação vencedora, visto que ao tirar a pedra o jogador vence.

0 1 2 3 4 5 6 7 8 9 10 0 1 W 2 3 4 5 6 7 8 9 10 Pilha B Pilha A J1,0

Jogo das Pedras

www.python.org

(14)

O mesmo é verdadeiro para um jogo J0,1, que indica uma pedra na pilha B. 0 1 2 3 4 5 6 7 8 9 10 0 W 1 W 2 3 4 5 6 7 8 9 10 Pilha B Pilha A

Jogo das Pedras

www.python.org

(15)

Quando o jogador encontra-se na situação J1,1, ele está numa situação vencedora, visto que ele pode tirar uma pedra de cada pilha.

0 1 2 3 4 5 6 7 8 9 10 0 W 1 W W 2 3 4 5 6 7 8 9 10 Pilha B Pilha A

Jogo das Pedras

www.python.org

(16)

No jogo J2,0 temos uma situação perdedora, pois só podemos tirar uma pedra da pilha A, o que leva a situação do jogo J1,0, que é vitoriosa para o adversário.

0 1 2 3 4 5 6 7 8 9 10 0 W 1 W W 2 L 3 4 5 6 7 8 9 10 Pilha B Pilha A

Jogo das Pedras

www.python.org

(17)

O mesmo é verdadeiro para no jogo J0,2. Observe que o jogo é simétrico, o que vale para Ji,j é mantido para Jj,i.

0 1 2 3 4 5 6 7 8 9 10 0 W L 1 W W 2 L 3 4 5 6 7 8 9 10 Pilha B Pilha A

Jogo das Pedras

www.python.org

(18)

No jogo J1,2 temos uma situação de vitória, pois podemos escolher tirar uma pedra da pilha A, o que leva o adversário a um jogo J0,2, onde ele perde.

0 1 2 3 4 5 6 7 8 9 10 0 W L 1 W W W 2 L 3 4 5 6 7 8 9 10 Pilha B Pilha A

Jogo das Pedras

www.python.org

(19)

Por simetria. 0 1 2 3 4 5 6 7 8 9 10 0 W L 1 W W W 2 L W 3 4 5 6 7 8 9 10 Pilha B Pilha A

Jogo das Pedras

www.python.org

(20)

No jogo J2,2 não importa o movimento, o adversário ganha, então temos uma situação perdedora. Aplicando-se o mesmo raciocínio podemos preencher o mapa.

0 1 2 3 4 5 6 7 8 9 10 0 W L 1 W W W 2 L W L 3 4 5 6 7 8 9 10 Pilha B Pilha A

Jogo das Pedras

www.python.org

(21)

0 1 2 3 4 5 6 7 8 9 10 0 W L 1 W W W 2 L W L 3 W 4 5 6 7 8 9 10 Pilha B Pilha A

Jogo das Pedras

www.python.org

(22)

0 1 2 3 4 5 6 7 8 9 10 0 W L W 1 W W W 2 L W L 3 W 4 5 6 7 8 9 10 Pilha B Pilha A

Jogo das Pedras

www.python.org

(23)

0 1 2 3 4 5 6 7 8 9 10 0 W L W 1 W W W 2 L W L 3 W W 4 5 6 7 8 9 10 Pilha B Pilha A

Jogo das Pedras

www.python.org

(24)

0 1 2 3 4 5 6 7 8 9 10 0 W L W 1 W W W W 2 L W L 3 W W 4 5 6 7 8 9 10 Pilha B Pilha A

Jogo das Pedras

www.python.org

(25)

0 1 2 3 4 5 6 7 8 9 10 0 W L W 1 W W W W 2 L W L 3 W W W 4 5 6 7 8 9 10 Pilha B Pilha A

Jogo das Pedras

www.python.org

(26)

0 1 2 3 4 5 6 7 8 9 10 0 W L W 1 W W W W 2 L W L W 3 W W W 4 5 6 7 8 9 10 Pilha B Pilha A

Jogo das Pedras

www.python.org

(27)

0 1 2 3 4 5 6 7 8 9 10 0 W L W 1 W W W W 2 L W L W 3 W W W W 4 5 6 7 8 9 10 Pilha B Pilha A

Jogo das Pedras

www.python.org

(28)

0 1 2 3 4 5 6 7 8 9 10 0 W L W 1 W W W W 2 L W L W 3 W W W W 4 L 5 6 7 8 9 10 Pilha B Pilha A

Jogo das Pedras

www.python.org

(29)

0 1 2 3 4 5 6 7 8 9 10 0 W L W L 1 W W W W 2 L W L W 3 W W W W 4 L 5 6 7 8 9 10 Pilha B Pilha A

Jogo das Pedras

www.python.org

(30)

0 1 2 3 4 5 6 7 8 9 10 0 W L W L 1 W W W W 2 L W L W 3 W W W W 4 L W 5 6 7 8 9 10 Pilha B Pilha A

Jogo das Pedras

www.python.org

(31)

0 1 2 3 4 5 6 7 8 9 10 0 W L W L 1 W W W W W 2 L W L W 3 W W W W 4 L W 5 6 7 8 9 10 Pilha B Pilha A

Jogo das Pedras

www.python.org

(32)

0 1 2 3 4 5 6 7 8 9 10 0 W L W L 1 W W W W W 2 L W L W 3 W W W W 4 L W L 5 6 7 8 9 10 Pilha B Pilha A

Jogo das Pedras

www.python.org

(33)

0 1 2 3 4 5 6 7 8 9 10 0 W L W L 1 W W W W W 2 L W L W L 3 W W W W 4 L W L 5 6 7 8 9 10 Pilha B Pilha A

Jogo das Pedras

www.python.org

(34)

0 1 2 3 4 5 6 7 8 9 10 0 W L W L 1 W W W W W 2 L W L W L 3 W W W W 4 L W L W 5 6 7 8 9 10 Pilha B Pilha A

Jogo das Pedras

www.python.org

(35)

0 1 2 3 4 5 6 7 8 9 10 0 W L W L 1 W W W W W 2 L W L W L 3 W W W W W 4 L W L W 5 6 7 8 9 10 Pilha B Pilha A

Jogo das Pedras

www.python.org

(36)

0 1 2 3 4 5 6 7 8 9 10 0 W L W L 1 W W W W W 2 L W L W L 3 W W W W W 4 L W L W L 5 6 7 8 9 10 Pilha B Pilha A

Jogo das Pedras

www.python.org

(37)

Abaixo temos a tabela completa. 0 1 2 3 4 5 6 7 8 9 10 0 W L W L W L W L W L 1 W W W W W W W W W W W 2 L W L W L W L W L W L 3 W W W W W W W W W W W 4 L W L W L W L W L W L 5 W W W W W W W W W W W 6 L W L W L W L W L W L 7 W W W W W W W W W W W 8 L W L W L W L W L W L 9 W W W W W W W W W W W 10 L W L W L W L W L W L Pilha B Pilha A

Jogo das Pedras

www.python.org

(38)

Completamos com o jogo J0,0 como uma situação hipotética de derrota. 0 1 2 3 4 5 6 7 8 9 10 0 L W L W L W L W L W L 1 W W W W W W W W W W W 2 L W L W L W L W L W L 3 W W W W W W W W W W W 4 L W L W L W L W L W L 5 W W W W W W W W W W W 6 L W L W L W L W L W L 7 W W W W W W W W W W W 8 L W L W L W L W L W L 9 W W W W W W W W W W W 10 L W L W L W L W L W L Pilha B Pilha A

Jogo das Pedras

www.python.org

(39)

A implementação da tabela abaixo identifica se dada uma posição de início, o jogador ganha ou perde. 0 1 2 3 4 5 6 7 8 9 10 0 L W L W L W L W L W L 1 W W W W W W W W W W W 2 L W L W L W L W L W L 3 W W W W W W W W W W W 4 L W L W L W L W L W L 5 W W W W W W W W W W W 6 L W L W L W L W L W L 7 W W W W W W W W W W W 8 L W L W L W L W L W L 9 W W W W W W W W W W W 10 L W L W L W L W L W L Pilha B Pilha A

Jogo das Pedras

www.python.org

(40)

Chamaremos este algoritmo, de programação dinâmica, de Rocks(n,m), ele retorna a string “W” ou “L” e tem como entrada o números de pedras em cada pilha.

0 1 2 3 4 5 6 7 8 9 10 0 L W L W L W L W L W L 1 W W W W W W W W W W W 2 L W L W L W L W L W L 3 W W W W W W W W W W W 4 L W L W L W L W L W L 5 W W W W W W W W W W W 6 L W L W L W L W L W L 7 W W W W W W W W W W W 8 L W L W L W L W L W L 9 W W W W W W W W W W W 10 L W L W L W L W L W L Pilha B Pilha A

Jogo das Pedras

www.python.org

(41)

Rocks(n,m) J0,0 = “L” Para i de 1 até n Se Ji-1,0 == “W” Ji,0 = “L” Senão Ji,0 = “W” Para j de 1 até m Se J0, j-1 == “W” J0,j = “L” Senão J0,j = “W” Para i de 1 até n Para j de 1 até m Se Ji-1, j-1 == “W” e Ji, j-1 == “W” e Ji-1, j == “W” Ji,j = “L” Senão J0,j = “W” Retorna Jn,m

Segue o pseudocódigo de Rocks(n,m).

Algoritmo do Programação Dinâmica (Rocks)

www.python.org

(42)

Se olharmos com atenção para a tabela veremos um padrão que facilita a programação. Veja que, quando i e j são pares, temos “L”. Nos outros casos temos “W”. 0 1 2 3 4 5 6 7 8 9 10 0 L W L W L W L W L W L 1 W W W W W W W W W W W 2 L W L W L W L W L W L 3 W W W W W W W W W W W 4 L W L W L W L W L W L 5 W W W W W W W W W W W 6 L W L W L W L W L W L 7 W W W W W W W W W W W 8 L W L W L W L W L W L 9 W W W W W W W W W W W 10 L W L W L W L W L W L Pilha B Pilha A

Algoritmo do Programação Dinâmica (FastRocks)

www.python.org

(43)

FastRocks(n,m)

Se n e m são ambos pares retorna “L”

Senão

retorna “W”

Segue o pseudocódigo de FastRocks(n,m).

Algoritmo do Programação Dinâmica (FastRocks)

www.python.org

(44)

O algoritmo de Needleman & Wunsch (Needleman and Wunsch, 1970) tem como foco o alinhamento global de sequências de DNA e proteínas. Com a explosão dos dados genômicos no final do século passado, um problema central nos estudos genômicos foi o alinhamento de sequências. Esses alinhamentos permitem inferir similaridade sequencial e relacionar com as aspectos biológicos, como evolução, função, conservação de estrutura tridimensional entre outros. O algoritmo de Needleman & Wunsch será descrito aqui como modelo para entendermos as principais características computacionais do alinhamento de sequências.

Algoritmo de Needleman & Wunsch

www.python.org

Referência:

Needleman, S. B. & Wunsch, C. D. (1970) "A General Method Applicable to the Search for Similarities in the Amino Acid Sequence of Two Proteins," J. Mol. Biol., 48, 443-453.

(45)

Considerando-se os tipos de algoritmos vistos até o momento, temos que o algoritmo de Needleman & Wunsch é de programação dinâmica.

O algoritmo de Needleman & Wunsch é dividido nas seguintes etapas:

1) Inicialização da matriz caminho; 2) Preenchimento da matriz caminho; 3) Alinhamento.

Para ilustrar o funcionamento do algoritmo, vamos considerar o alinhamento de duas sequências:

GAATTCAGTTA (sequência #1) (temos m bases na sequência) GGATCGA (sequência #2) (temos n bases na sequência)

Algoritmo de Needleman & Wunsch

www.python.org

(46)

Na fase de inicialização do algoritmo, montamos uma matriz m x n, como indicado abaixo. Essa matriz é chamada matriz caminho (path matrix). Na matriz caminho, às primeiras coluna e linha atribuímos zero, visto que estamos considerando um alinhamento sem penalidade de gap inicial.

Algoritmo de Needleman & Wunsch (Inicialização)

www.python.org 0 G A A T T C A G T T A 0 0 0 0 0 0 0 0 0 0 0 0 0 G 0 G 0 A 0 T 0 C 0 G 0 A 0 Sequência #2 Sequência #1 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 8 9 10 11 46

(47)

Para o preenchimento da matriz, consideramos o início a partir da esquerda superior da matriz. Para cada elemento Mi,j da matriz, determinaremos a seguinte função

escore:

Mi,j = MAXIMUM[

Mi-1, j-1 + Si,j (coincidência ou não na diagonal da matriz), Mi,j-1 + w (gap na sequência #1),

Mi-1,j + w (gap na sequência #2)]

Onde w é o peso para inserção de um gap (intervalo), consideramos w = 0.

Si,j = 1 se a base na posição i da sequência #1 é a mesma da posição j na sequência #

2 (escore de coincidência), caso contrário,

Si,j = 0 (escore para não coincidência)

Algoritmo de Needleman & Wunsch (Preenchimento)

www.python.org

(48)

Aplicando-se o critério temos: M1,1 = MAXIMUM[

M0, 0 + S1,1 (coincidência ou não na diagonal da matriz), M1,0 + w (gap na sequência #1),

M0,1 + w (gap na sequência #2)] = MAXIMUM[1,0,0], ou seja, M1,1 = 1

Algoritmo de Needleman & Wunsch (Preenchimento)

www.python.org Sequência #2 0 G A A T T C A G T T A 0 0 0 0 0 0 0 0 0 0 0 0 0 G 0 1 G 0 A 0 T 0 C 0 G 0 A 0 Sequência #1 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 8 9 10 11 48

(49)

Aplicando-se o critério temos: M2,1 = MAXIMUM[

M1, 0 + S2,1 (coincidência ou não na diagonal da matriz), M2,0 + w (gap na sequência #1),

M1,1 + w (gap na sequência #2)] = MAXIMUM[1,0,1], ou seja, M2,1 = 1

Algoritmo de Needleman & Wunsch (Preenchimento)

www.python.org 0 G A A T T C A G T T A 0 0 0 0 0 0 0 0 0 0 0 0 0 G 0 1 G 0 1 A 0 T 0 C 0 G 0 A 0 Sequência #1 0 1 2 3 4 5 6 7 Sequência #2 0 1 2 3 4 5 6 7 8 9 10 11 49

(50)

Aplicando-se o critério temos: M3,1 = MAXIMUM[

M2, 0 + S3,1 (coincidência ou não na diagonal da matriz), M3,0 + w (gap na sequência #1),

M2,1 + w (gap na sequência #2)] = MAXIMUM[0,0,1], ou seja, M3,1 = 1

Algoritmo de Needleman & Wunsch (Preenchimento)

www.python.org 0 G A A T T C A G T T A 0 0 0 0 0 0 0 0 0 0 0 0 0 G 0 1 G 0 1 A 0 1 T 0 C 0 G 0 A 0 Sequência #1 0 1 2 3 4 5 6 7 Sequência #2 0 1 2 3 4 5 6 7 8 9 10 11 50

(51)

Aplicando-se o critério temos: M4,1 = MAXIMUM[

M3, 0 + S4,1 (coincidência ou não na diagonal da matriz), M4,0 + w (gap na sequência #1),

M3,1 + w (gap na sequência #2)] = MAXIMUM[0,0,1], ou seja, M4,1 = 1

Algoritmo de Needleman & Wunsch (Preenchimento)

www.python.org 0 G A A T T C A G T T A 0 0 0 0 0 0 0 0 0 0 0 0 0 G 0 1 G 0 1 A 0 1 T 0 1 C 0 G 0 A 0 Sequência #1 0 1 2 3 4 5 6 7 Sequência #2 0 1 2 3 4 5 6 7 8 9 10 11 51

(52)

Aplicando-se o critério temos: M5,1 = MAXIMUM[

M4, 0 + S5,1 (coincidência ou não na diagonal da matriz), M5,0 + w (gap na sequência #1),

M4,1 + w (gap na sequência #2)] = MAXIMUM[0,0,1], ou seja, M5,1 = 1

Algoritmo de Needleman & Wunsch (Preenchimento)

www.python.org 0 G A A T T C A G T T A 0 0 0 0 0 0 0 0 0 0 0 0 0 G 0 1 G 0 1 A 0 1 T 0 1 C 0 1 G 0 A 0 Sequência #1 0 1 2 3 4 5 6 7 Sequência #2 0 1 2 3 4 5 6 7 8 9 10 11 52

(53)

Aplicando-se o critério temos: M6,1 = MAXIMUM[

M5, 0 + S6,1 (coincidência ou não na diagonal da matriz), M6,0 + w (gap na sequência #1),

M5,1 + w (gap na sequência #2)] = MAXIMUM[1,0,1], ou seja, M6,1 = 1

Algoritmo de Needleman & Wunsch (Preenchimento)

www.python.org 0 G A A T T C A G T T A 0 0 0 0 0 0 0 0 0 0 0 0 0 G 0 1 G 0 1 A 0 1 T 0 1 C 0 1 G 0 1 A 0 Sequência #1 0 1 2 3 4 5 6 7 Sequência #2 0 1 2 3 4 5 6 7 8 9 10 11 53

(54)

Aplicando-se o critério temos: M7,1 = MAXIMUM[

M6, 0 + S7,1 (coincidência ou não na diagonal da matriz), M7,0 + w (gap na sequência #1),

M6,1 + w (gap na sequência #2)] = MAXIMUM[0,0,1], ou seja, M7,1 = 1

Algoritmo de Needleman & Wunsch (Preenchimento)

www.python.org 0 G A A T T C A G T T A 0 0 0 0 0 0 0 0 0 0 0 0 0 G 0 1 G 0 1 A 0 1 T 0 1 C 0 1 G 0 1 A 0 1 Sequência #1 0 1 2 3 4 5 6 7 Sequência #2 0 1 2 3 4 5 6 7 8 9 10 11 54

(55)

Aplicando-se o critério temos: M1,2 = MAXIMUM[

M0, 1 + S1,2 (coincidência ou não na diagonal da matriz), M1,1 + w (gap na sequência #1),

M0,2 + w (gap na sequência #2)] = MAXIMUM[0,1,0], ou seja, M1,2 = 1

Algoritmo de Needleman & Wunsch (Preenchimento)

www.python.org 0 G A A T T C A G T T A 0 0 0 0 0 0 0 0 0 0 0 0 0 G 0 1 1 G 0 1 A 0 1 T 0 1 C 0 1 G 0 1 A 0 1 Sequência #1 0 1 2 3 4 5 6 7 Sequência #2 0 1 2 3 4 5 6 7 8 9 10 11 55

(56)

Aplicando-se o critério temos: M1,3 = MAXIMUM[

M0, 2 + S1,3 (coincidência ou não na diagonal da matriz), M1,2 + w (gap na sequência #1),

M0,3 + w (gap na sequência #2)] = MAXIMUM[0,1,0], ou seja, M1,3 = 1

Algoritmo de Needleman & Wunsch (Preenchimento)

www.python.org 0 G A A T T C A G T T A 0 0 0 0 0 0 0 0 0 0 0 0 0 G 0 1 1 1 G 0 1 A 0 1 T 0 1 C 0 1 G 0 1 A 0 1 Sequência #1 0 1 2 3 4 5 6 7 Sequência #2 0 1 2 3 4 5 6 7 8 9 10 11 56

(57)

Aplicando-se o critério temos: M1,4 = MAXIMUM[

M0, 3 + S1,4 (coincidência ou não na diagonal da matriz), M1,3 + w (gap na sequência #1),

M0,4 + w (gap na sequência #2)] = MAXIMUM[0,1,0], ou seja, M1,4 = 1

Algoritmo de Needleman & Wunsch (Preenchimento)

www.python.org 0 G A A T T C A G T T A 0 0 0 0 0 0 0 0 0 0 0 0 0 G 0 1 1 1 1 G 0 1 A 0 1 T 0 1 C 0 1 G 0 1 A 0 1 Sequência #1 0 1 2 3 4 5 6 7 Sequência #2 0 1 2 3 4 5 6 7 8 9 10 11 57

(58)

Aplicando-se o critério temos: M1,5 = MAXIMUM[

M0, 4 + S1,5 (coincidência ou não na diagonal da matriz), M1,4 + w (gap na sequência #1),

M0,5 + w (gap na sequência #2)] = MAXIMUM[0,1,0], ou seja, M1,5 = 1

Algoritmo de Needleman & Wunsch (Preenchimento)

www.python.org 0 G A A T T C A G T T A 0 0 0 0 0 0 0 0 0 0 0 0 0 G 0 1 1 1 1 1 G 0 1 A 0 1 T 0 1 C 0 1 G 0 1 A 0 1 Sequência #1 0 1 2 3 4 5 6 7 Sequência #2 0 1 2 3 4 5 6 7 8 9 10 11 58

(59)

Aplicando-se o critério temos: M1,6 = MAXIMUM[

M0, 5 + S1,6 (coincidência ou não na diagonal da matriz), M1,5 + w (gap na sequência #1),

M0,6 + w (gap na sequência #2)] = MAXIMUM[0,1,0], ou seja, M1,6 = 1

Algoritmo de Needleman & Wunsch (Preenchimento)

www.python.org 0 G A A T T C A G T T A 0 0 0 0 0 0 0 0 0 0 0 0 0 G 0 1 1 1 1 1 1 G 0 1 A 0 1 T 0 1 C 0 1 G 0 1 A 0 1 Sequência #1 0 1 2 3 4 5 6 7 Sequência #2 0 1 2 3 4 5 6 7 8 9 10 11 59

(60)

Aplicando-se o critério temos: M1,7 = MAXIMUM[

M0, 6 + S1,7 (coincidência ou não na diagonal da matriz), M1,6 + w (gap na sequência #1),

M0,7 + w (gap na sequência #2)] = MAXIMUM[0,1,0], ou seja, M1,7 = 1

Algoritmo de Needleman & Wunsch (Preenchimento)

www.python.org 0 G A A T T C A G T T A 0 0 0 0 0 0 0 0 0 0 0 0 0 G 0 1 1 1 1 1 1 1 G 0 1 A 0 1 T 0 1 C 0 1 G 0 1 A 0 1 Sequência #1 0 1 2 3 4 5 6 7 Sequência #2 0 1 2 3 4 5 6 7 8 9 10 11 60

(61)

Aplicando-se o critério temos: M1,8 = MAXIMUM[

M0, 7 + S1,8 (coincidência ou não na diagonal da matriz), M1,7 + w (gap na sequência #1),

M0,8 + w (gap na sequência #2)] = MAXIMUM[1,1,0], ou seja, M1,8 = 1

Algoritmo de Needleman & Wunsch (Preenchimento)

www.python.org 0 G A A T T C A G T T A 0 0 0 0 0 0 0 0 0 0 0 0 0 G 0 1 1 1 1 1 1 1 1 G 0 1 A 0 1 T 0 1 C 0 1 G 0 1 A 0 1 Sequência #1 0 1 2 3 4 5 6 7 Sequência #2 0 1 2 3 4 5 6 7 8 9 10 11 61

(62)

Aplicando-se o critério temos: M1,9 = MAXIMUM[

M0, 8 + S1,9 (coincidência ou não na diagonal da matriz), M1,8 + w (gap na sequência #1),

M0,9 + w (gap na sequência #2)] = MAXIMUM[0,1,0], ou seja, M1,9 = 1

Algoritmo de Needleman & Wunsch (Preenchimento)

www.python.org 0 G A A T T C A G T T A 0 0 0 0 0 0 0 0 0 0 0 0 0 G 0 1 1 1 1 1 1 1 1 1 G 0 1 A 0 1 T 0 1 C 0 1 G 0 1 A 0 1 Sequência #1 0 1 2 3 4 5 6 7 Sequência #2 0 1 2 3 4 5 6 7 8 9 10 11 62

(63)

Aplicando-se o critério temos: M1,10 = MAXIMUM[

M0, 9 + S1,10 (coincidência ou não na diagonal da matriz), M1,9 + w (gap na sequência #1),

M0,10 + w (gap na sequência #2)] = MAXIMUM[0,1,0], ou seja, M1,10 = 1

Algoritmo de Needleman & Wunsch (Preenchimento)

www.python.org 0 G A A T T C A G T T A 0 0 0 0 0 0 0 0 0 0 0 0 0 G 0 1 1 1 1 1 1 1 1 1 1 G 0 1 A 0 1 T 0 1 C 0 1 G 0 1 A 0 1 Sequência #1 0 1 2 3 4 5 6 7 Sequência #2 0 1 2 3 4 5 6 7 8 9 10 11 63

(64)

Aplicando-se o critério temos: M1,11 = MAXIMUM[

M0, 10 + S1,11 (coincidência ou não na diagonal da matriz), M1,10 + w (gap na sequência #1),

M0,11 + w (gap na sequência #2)] = MAXIMUM[0,1,0], ou seja, M1,11 = 1

Algoritmo de Needleman & Wunsch (Preenchimento)

www.python.org 0 G A A T T C A G T T A 0 0 0 0 0 0 0 0 0 0 0 0 0 G 0 1 1 1 1 1 1 1 1 1 1 1 G 0 1 A 0 1 T 0 1 C 0 1 G 0 1 A 0 1 Sequência #1 0 1 2 3 4 5 6 7 Sequência #2 0 1 2 3 4 5 6 7 8 9 10 11 64

(65)

Aplicando-se o critério temos: M2,2 = MAXIMUM[

M1, 1 + S2,2 (coincidência ou não na diagonal da matriz), M2,1 + w (gap na sequência #1),

M1,2 + w (gap na sequência #2)] = MAXIMUM[1,1,1], ou seja, M2,2 = 1

Algoritmo de Needleman & Wunsch (Preenchimento)

www.python.org 0 G A A T T C A G T T A 0 0 0 0 0 0 0 0 0 0 0 0 0 G 0 1 1 1 1 1 1 1 1 1 1 1 G 0 1 1 A 0 1 T 0 1 C 0 1 G 0 1 A 0 1 Sequência #1 0 1 2 3 4 5 6 7 Sequência #2 0 1 2 3 4 5 6 7 8 9 10 11 65

(66)

Aplicando-se o critério temos: M3,2 = MAXIMUM[

M2, 1 + S3,2 (coincidência ou não na diagonal da matriz), M3,1 + w (gap na sequência #1),

M2,2 + w (gap na sequência #2)] = MAXIMUM[2,1,1], ou seja, M3,2 = 2

Algoritmo de Needleman & Wunsch (Preenchimento)

www.python.org 0 G A A T T C A G T T A 0 0 0 0 0 0 0 0 0 0 0 0 0 G 0 1 1 1 1 1 1 1 1 1 1 1 G 0 1 1 A 0 1 2 T 0 1 C 0 1 G 0 1 A 0 1 Sequência #1 0 1 2 3 4 5 6 7 Sequência #2 0 1 2 3 4 5 6 7 8 9 10 11 66

(67)

Aplicando-se o critério temos: M4,2 = MAXIMUM[

M3, 1 + S4,2 (coincidência ou não na diagonal da matriz), M4,1 + w (gap na sequência #1),

M3,2 + w (gap na sequência #2)] = MAXIMUM[1,1,2], ou seja, M4,2 = 2

Algoritmo de Needleman & Wunsch (Preenchimento)

www.python.org 0 G A A T T C A G T T A 0 0 0 0 0 0 0 0 0 0 0 0 0 G 0 1 1 1 1 1 1 1 1 1 1 1 G 0 1 1 A 0 1 2 T 0 1 2 C 0 1 G 0 1 A 0 1 Sequência #1 0 1 2 3 4 5 6 7 Sequência #2 0 1 2 3 4 5 6 7 8 9 10 11 67

(68)

Aplicando-se o critério temos: M5,2 = MAXIMUM[

M4, 1 + S5,2 (coincidência ou não na diagonal da matriz), M5,1 + w (gap na sequência #1),

M4,2 + w (gap na sequência #2)] = MAXIMUM[1,1,2], ou seja, M5,2 = 2

Algoritmo de Needleman & Wunsch (Preenchimento)

www.python.org 0 G A A T T C A G T T A 0 0 0 0 0 0 0 0 0 0 0 0 0 G 0 1 1 1 1 1 1 1 1 1 1 1 G 0 1 1 A 0 1 2 T 0 1 2 C 0 1 2 G 0 1 A 0 1 Sequência #1 0 1 2 3 4 5 6 7 Sequência #2 0 1 2 3 4 5 6 7 8 9 10 11 68

(69)

Aplicando-se o critério temos: M6,2 = MAXIMUM[

M5, 1 + S6,2 (coincidência ou não na diagonal da matriz), M6,1 + w (gap na sequência #1),

M5,2 + w (gap na sequência #2)] = MAXIMUM[1,1,2], ou seja, M6,2 = 2

Algoritmo de Needleman & Wunsch (Preenchimento)

www.python.org 0 G A A T T C A G T T A 0 0 0 0 0 0 0 0 0 0 0 0 0 G 0 1 1 1 1 1 1 1 1 1 1 1 G 0 1 1 A 0 1 2 T 0 1 2 C 0 1 2 G 0 1 2 A 0 1 Sequência #1 0 1 2 3 4 5 6 7 Sequência #2 0 1 2 3 4 5 6 7 8 9 10 11 69

(70)

Aplicando-se o critério temos: M7,2 = MAXIMUM[

M6, 1 + S7,2 (coincidência ou não na diagonal da matriz), M7,1 + w (gap na sequência #1),

M7,2 + w (gap na sequência #2)] = MAXIMUM[2,1,2], ou seja, M7,2 = 2

Algoritmo de Needleman & Wunsch (Preenchimento)

www.python.org 0 G A A T T C A G T T A 0 0 0 0 0 0 0 0 0 0 0 0 0 G 0 1 1 1 1 1 1 1 1 1 1 1 G 0 1 1 A 0 1 2 T 0 1 2 C 0 1 2 G 0 1 2 A 0 1 2 Sequência #1 0 1 2 3 4 5 6 7 Sequência #2 0 1 2 3 4 5 6 7 8 9 10 11 70

(71)

Aplicando-se o critério temos: M2,3 = MAXIMUM[

M1, 2 + S2,3 (coincidência ou não na diagonal da matriz), M2,2 + w (gap na sequência #1),

M1,3 + w (gap na sequência #2)] = MAXIMUM[1,1,1], ou seja, M2,3 = 1

Algoritmo de Needleman & Wunsch (Preenchimento)

www.python.org 0 G A A T T C A G T T A 0 0 0 0 0 0 0 0 0 0 0 0 0 G 0 1 1 1 1 1 1 1 1 1 1 1 G 0 1 1 1 A 0 1 2 T 0 1 2 C 0 1 2 G 0 1 2 A 0 1 2 Sequência #1 0 1 2 3 4 5 6 7 Sequência #2 0 1 2 3 4 5 6 7 8 9 10 11 71

(72)

Aplicando-se o critério temos: M2,4 = MAXIMUM[

M1, 3 + S2,4 (coincidência ou não na diagonal da matriz), M2,3 + w (gap na sequência #1),

M1,4 + w (gap na sequência #2)] = MAXIMUM[1,1,1], ou seja, M2,4 = 1

Algoritmo de Needleman & Wunsch (Preenchimento)

www.python.org 0 G A A T T C A G T T A 0 0 0 0 0 0 0 0 0 0 0 0 0 G 0 1 1 1 1 1 1 1 1 1 1 1 G 0 1 1 1 1 A 0 1 2 T 0 1 2 C 0 1 2 G 0 1 2 A 0 1 2 Sequência #1 0 1 2 3 4 5 6 7 Sequência #2 0 1 2 3 4 5 6 7 8 9 10 11 72

(73)

Aplicando-se o critério temos: M2,5 = MAXIMUM[

M1, 4 + S2,5 (coincidência ou não na diagonal da matriz), M2,4 + w (gap na sequência #1),

M1,5 + w (gap na sequência #2)] = MAXIMUM[1,1,1], ou seja, M2,5 = 1

Algoritmo de Needleman & Wunsch (Preenchimento)

www.python.org 0 G A A T T C A G T T A 0 0 0 0 0 0 0 0 0 0 0 0 0 G 0 1 1 1 1 1 1 1 1 1 1 1 G 0 1 1 1 1 1 A 0 1 2 T 0 1 2 C 0 1 2 G 0 1 2 A 0 1 2 Sequência #1 0 1 2 3 4 5 6 7 Sequência #2 0 1 2 3 4 5 6 7 8 9 10 11 73

(74)

Aplicando-se o critério temos: M2,6 = MAXIMUM[

M1, 5 + S2,6 (coincidência ou não na diagonal da matriz), M2,5 + w (gap na sequência #1),

M1,6 + w (gap na sequência #2)] = MAXIMUM[1,1,1], ou seja, M2,6 = 1

Algoritmo de Needleman & Wunsch (Preenchimento)

www.python.org 0 G A A T T C A G T T A 0 0 0 0 0 0 0 0 0 0 0 0 0 G 0 1 1 1 1 1 1 1 1 1 1 1 G 0 1 1 1 1 1 1 A 0 1 2 T 0 1 2 C 0 1 2 G 0 1 2 A 0 1 2 Sequência #1 0 1 2 3 4 5 6 7 Sequência #2 0 1 2 3 4 5 6 7 8 9 10 11 74

(75)

Aplicando-se o critério temos: M2,7 = MAXIMUM[

M1, 6 + S2,7 (coincidência ou não na diagonal da matriz), M2,6 + w (gap na sequência #1),

M1,7 + w (gap na sequência #2)] = MAXIMUM[1,1,1], ou seja, M2,7 = 1

Algoritmo de Needleman & Wunsch (Preenchimento)

www.python.org 0 G A A T T C A G T T A 0 0 0 0 0 0 0 0 0 0 0 0 0 G 0 1 1 1 1 1 1 1 1 1 1 1 G 0 1 1 1 1 1 1 1 A 0 1 2 T 0 1 2 C 0 1 2 G 0 1 2 A 0 1 2 Sequência #1 0 1 2 3 4 5 6 7 Sequência #2 0 1 2 3 4 5 6 7 8 9 10 11 75

(76)

Aplicando-se o critério temos: M2,8 = MAXIMUM[

M1, 7 + S2,8 (coincidência ou não na diagonal da matriz), M2,7 + w (gap na sequência #1),

M1,8 + w (gap na sequência #2)] = MAXIMUM[2,1,1], ou seja, M2,8 = 2

Algoritmo de Needleman & Wunsch (Preenchimento)

www.python.org 0 G A A T T C A G T T A 0 0 0 0 0 0 0 0 0 0 0 0 0 G 0 1 1 1 1 1 1 1 1 1 1 1 G 0 1 1 1 1 1 1 1 2 A 0 1 2 T 0 1 2 C 0 1 2 G 0 1 2 A 0 1 2 Sequência #1 0 1 2 3 4 5 6 7 Sequência #2 0 1 2 3 4 5 6 7 8 9 10 11 76

(77)

Aplicando-se o critério temos: M2,9 = MAXIMUM[

M1, 8 + S2,9 (coincidência ou não na diagonal da matriz), M2,8 + w (gap na sequência #1),

M1,9 + w (gap na sequência #2)] = MAXIMUM[1,2,1], ou seja, M2,9 = 2

Algoritmo de Needleman & Wunsch (Preenchimento)

www.python.org 0 G A A T T C A G T T A 0 0 0 0 0 0 0 0 0 0 0 0 0 G 0 1 1 1 1 1 1 1 1 1 1 1 G 0 1 1 1 1 1 1 1 2 2 A 0 1 2 T 0 1 2 C 0 1 2 G 0 1 2 A 0 1 2 Sequência #1 0 1 2 3 4 5 6 7 Sequência #2 0 1 2 3 4 5 6 7 8 9 10 11 77

(78)

Aplicando-se o critério temos: M2,10 = MAXIMUM[

M1, 9 + S2,10 (coincidência ou não na diagonal da matriz), M2,9 + w (gap na sequência #1),

M1,10 + w (gap na sequência #2)] = MAXIMUM[1,2,1], ou seja, M2,10 = 2

Algoritmo de Needleman & Wunsch (Preenchimento)

www.python.org 0 G A A T T C A G T T A 0 0 0 0 0 0 0 0 0 0 0 0 0 G 0 1 1 1 1 1 1 1 1 1 1 1 G 0 1 1 1 1 1 1 1 2 2 2 A 0 1 2 T 0 1 2 C 0 1 2 G 0 1 2 A 0 1 2 Sequência #1 0 1 2 3 4 5 6 7 Sequência #2 0 1 2 3 4 5 6 7 8 9 10 11 78

(79)

Aplicando-se o critério temos: M2,11 = MAXIMUM[

M1, 10 + S2,11 (coincidência ou não na diagonal da matriz), M2,10 + w (gap na sequência #1),

M1,11 + w (gap na sequência #2)] = MAXIMUM[1,2,1], ou seja, M2,11 = 2

Algoritmo de Needleman & Wunsch (Preenchimento)

www.python.org 0 G A A T T C A G T T A 0 0 0 0 0 0 0 0 0 0 0 0 0 G 0 1 1 1 1 1 1 1 1 1 1 1 G 0 1 1 1 1 1 1 1 2 2 2 2 A 0 1 2 T 0 1 2 C 0 1 2 G 0 1 2 A 0 1 2 Sequência #1 0 1 2 3 4 5 6 7 Sequência #2 0 1 2 3 4 5 6 7 8 9 10 11 79

(80)

Aplicando-se o critério temos: M3,3 = MAXIMUM[

M2, 2 + S3,3 (coincidência ou não na diagonal da matriz), M3,2 + w (gap na sequência #1),

M2,3 + w (gap na sequência #2)] = MAXIMUM[2,2,1], ou seja, M3,3 = 2

Algoritmo de Needleman & Wunsch (Preenchimento)

www.python.org 0 G A A T T C A G T T A 0 0 0 0 0 0 0 0 0 0 0 0 0 G 0 1 1 1 1 1 1 1 1 1 1 1 G 0 1 1 1 1 1 1 1 2 2 2 2 A 0 1 2 2 T 0 1 2 C 0 1 2 G 0 1 2 A 0 1 2 Sequência #1 0 1 2 3 4 5 6 7 Sequência #2 0 1 2 3 4 5 6 7 8 9 10 11 80

(81)

Aplicando-se o critério temos: M4,3 = MAXIMUM[

M3, 2 + S4,3 (coincidência ou não na diagonal da matriz), M4,2 + w (gap na sequência #1),

M3,3 + w (gap na sequência #2)] = MAXIMUM[2,2,2], ou seja, M4,3 = 2

Algoritmo de Needleman & Wunsch (Preenchimento)

www.python.org 0 G A A T T C A G T T A 0 0 0 0 0 0 0 0 0 0 0 0 0 G 0 1 1 1 1 1 1 1 1 1 1 1 G 0 1 1 1 1 1 1 1 2 2 2 2 A 0 1 2 2 T 0 1 2 2 C 0 1 2 G 0 1 2 A 0 1 2 Sequência #1 0 1 2 3 4 5 6 7 Sequência #2 0 1 2 3 4 5 6 7 8 9 10 11 81

(82)

Aplicando-se o critério temos: M5,3 = MAXIMUM[

M4, 2 + S5,3 (coincidência ou não na diagonal da matriz), M5,2 + w (gap na sequência #1),

M4,3 + w (gap na sequência #2)] = MAXIMUM[2,2,2], ou seja, M5,3 = 2

Algoritmo de Needleman & Wunsch (Preenchimento)

www.python.org 0 G A A T T C A G T T A 0 0 0 0 0 0 0 0 0 0 0 0 0 G 0 1 1 1 1 1 1 1 1 1 1 1 G 0 1 1 1 1 1 1 1 2 2 2 2 A 0 1 2 2 T 0 1 2 2 C 0 1 2 2 G 0 1 2 A 0 1 2 Sequência #1 0 1 2 3 4 5 6 7 Sequência #2 0 1 2 3 4 5 6 7 8 9 10 11 82

(83)

Aplicando-se o critério temos: M6,3 = MAXIMUM[

M5, 2 + S6,3 (coincidência ou não na diagonal da matriz), M6,2 + w (gap na sequência #1),

M5,3 + w (gap na sequência #2)] = MAXIMUM[2,2,2], ou seja, M6,3 = 2

Algoritmo de Needleman & Wunsch (Preenchimento)

www.python.org 0 G A A T T C A G T T A 0 0 0 0 0 0 0 0 0 0 0 0 0 G 0 1 1 1 1 1 1 1 1 1 1 1 G 0 1 1 1 1 1 1 1 2 2 2 2 A 0 1 2 2 T 0 1 2 2 C 0 1 2 2 G 0 1 2 2 A 0 1 2 Sequência #1 0 1 2 3 4 5 6 7 Sequência #2 0 1 2 3 4 5 6 7 8 9 10 11 83

(84)

Aplicando-se o critério temos: M7,3 = MAXIMUM[

M6, 2 + S7,3 (coincidência ou não na diagonal da matriz), M7,2 + w (gap na sequência #1),

M6,3 + w (gap na sequência #2)] = MAXIMUM[3,2,2], ou seja, M7,3 = 3

Algoritmo de Needleman & Wunsch (Preenchimento)

www.python.org 0 G A A T T C A G T T A 0 0 0 0 0 0 0 0 0 0 0 0 0 G 0 1 1 1 1 1 1 1 1 1 1 1 G 0 1 1 1 1 1 1 1 2 2 2 2 A 0 1 2 2 T 0 1 2 2 C 0 1 2 2 G 0 1 2 2 A 0 1 2 3 Sequência #1 0 1 2 3 4 5 6 7 Sequência #2 0 1 2 3 4 5 6 7 8 9 10 11 84

(85)

Aplicando-se o critério temos: M3,4 = MAXIMUM[

M2, 3 + S3,4 (coincidência ou não na diagonal da matriz), M3,3 + w (gap na sequência #1),

M2,4 + w (gap na sequência #2)] = MAXIMUM[1,2,1], ou seja, M3,4 = 2

Algoritmo de Needleman & Wunsch (Preenchimento)

www.python.org 0 G A A T T C A G T T A 0 0 0 0 0 0 0 0 0 0 0 0 0 G 0 1 1 1 1 1 1 1 1 1 1 1 G 0 1 1 1 1 1 1 1 2 2 2 2 A 0 1 2 2 2 T 0 1 2 2 C 0 1 2 2 G 0 1 2 2 A 0 1 2 3 Sequência #1 0 1 2 3 4 5 6 7 Sequência #2 0 1 2 3 4 5 6 7 8 9 10 11 85

(86)

Aplicando-se o critério temos: M3,5 = MAXIMUM[

M2, 4 + S3,5 (coincidência ou não na diagonal da matriz), M3,4 + w (gap na sequência #1),

M2,5 + w (gap na sequência #2)] = MAXIMUM[1,2,1], ou seja, M3,5 = 2

Algoritmo de Needleman & Wunsch (Preenchimento)

www.python.org 0 G A A T T C A G T T A 0 0 0 0 0 0 0 0 0 0 0 0 0 G 0 1 1 1 1 1 1 1 1 1 1 1 G 0 1 1 1 1 1 1 1 2 2 2 2 A 0 1 2 2 2 2 T 0 1 2 2 C 0 1 2 2 G 0 1 2 2 A 0 1 2 3 Sequência #1 0 1 2 3 4 5 6 7 Sequência #2 0 1 2 3 4 5 6 7 8 9 10 11 86

(87)

Aplicando-se o critério temos: M3,6 = MAXIMUM[

M2, 5 + S3,6 (coincidência ou não na diagonal da matriz), M3,5 + w (gap na sequência #1),

M2,6 + w (gap na sequência #2)] = MAXIMUM[1,2,1], ou seja, M3,6 = 2

Algoritmo de Needleman & Wunsch (Preenchimento)

www.python.org 0 G A A T T C A G T T A 0 0 0 0 0 0 0 0 0 0 0 0 0 G 0 1 1 1 1 1 1 1 1 1 1 1 G 0 1 1 1 1 1 1 1 2 2 2 2 A 0 1 2 2 2 2 2 T 0 1 2 2 C 0 1 2 2 G 0 1 2 2 A 0 1 2 3 Sequência #1 0 1 2 3 4 5 6 7 Sequência #2 0 1 2 3 4 5 6 7 8 9 10 11 87

(88)

Aplicando-se o critério temos: M3,7 = MAXIMUM[

M2, 6 + S3,7 (coincidência ou não na diagonal da matriz), M3,6 + w (gap na sequência #1),

M2,7 + w (gap na sequência #2)] = MAXIMUM[2,2,1], ou seja, M3,7 = 2

Algoritmo de Needleman & Wunsch (Preenchimento)

www.python.org 0 G A A T T C A G T T A 0 0 0 0 0 0 0 0 0 0 0 0 0 G 0 1 1 1 1 1 1 1 1 1 1 1 G 0 1 1 1 1 1 1 1 2 2 2 2 A 0 1 2 2 2 2 2 2 T 0 1 2 2 C 0 1 2 2 G 0 1 2 2 A 0 1 2 3 Sequência #1 0 1 2 3 4 5 6 7 Sequência #2 0 1 2 3 4 5 6 7 8 9 10 11 88

(89)

Aplicando-se o critério temos: M3,8 = MAXIMUM[

M2, 7 + S3,8 (coincidência ou não na diagonal da matriz), M3,7 + w (gap na sequência #1),

M2,8 + w (gap na sequência #2)] = MAXIMUM[1,2,2], ou seja, M3,8 = 2

Algoritmo de Needleman & Wunsch (Preenchimento)

www.python.org 0 G A A T T C A G T T A 0 0 0 0 0 0 0 0 0 0 0 0 0 G 0 1 1 1 1 1 1 1 1 1 1 1 G 0 1 1 1 1 1 1 1 2 2 2 2 A 0 1 2 2 2 2 2 2 2 T 0 1 2 2 C 0 1 2 2 G 0 1 2 2 A 0 1 2 3 Sequência #1 0 1 2 3 4 5 6 7 Sequência #2 0 1 2 3 4 5 6 7 8 9 10 11 89

(90)

Aplicando-se o critério temos: M3,9 = MAXIMUM[

M2, 8 + S3,9 (coincidência ou não na diagonal da matriz), M3,8 + w (gap na sequência #1),

M2,9 + w (gap na sequência #2)] = MAXIMUM[2,2,2], ou seja, M3,9 = 2

Algoritmo de Needleman & Wunsch (Preenchimento)

www.python.org 0 G A A T T C A G T T A 0 0 0 0 0 0 0 0 0 0 0 0 0 G 0 1 1 1 1 1 1 1 1 1 1 1 G 0 1 1 1 1 1 1 1 2 2 2 2 A 0 1 2 2 2 2 2 2 2 2 T 0 1 2 2 C 0 1 2 2 G 0 1 2 2 A 0 1 2 3 Sequência #1 0 1 2 3 4 5 6 7 Sequência #2 0 1 2 3 4 5 6 7 8 9 10 11 90

(91)

Aplicando-se o critério temos: M3,10 = MAXIMUM[

M2, 9 + S3,10 (coincidência ou não na diagonal da matriz), M3,9 + w (gap na sequência #1),

M2,10 + w (gap na sequência #2)] = MAXIMUM[2,2,2], ou seja, M3,10 = 2

Algoritmo de Needleman & Wunsch (Preenchimento)

www.python.org 0 G A A T T C A G T T A 0 0 0 0 0 0 0 0 0 0 0 0 0 G 0 1 1 1 1 1 1 1 1 1 1 1 G 0 1 1 1 1 1 1 1 2 2 2 2 A 0 1 2 2 2 2 2 2 2 2 2 T 0 1 2 2 C 0 1 2 2 G 0 1 2 2 A 0 1 2 3 Sequência #1 0 1 2 3 4 5 6 7 Sequência #2 0 1 2 3 4 5 6 7 8 9 10 11 91

Referências

Documentos relacionados

A composição e edição do boletim de informação da FPAm, «FPAm NEWS», é da responsabilidade da Federação Portuguesa de Aeromodelismo, sendo o boletim de publicação mensal,

Anais / 1 Escola Regional de Alto Desempenho; editores Tiarajú Asmuz Diverio, - Porto Alegre: SBC/ Instituto de Informática da UFRGS/ Faculdade de Informática da

Programa Brasil Arte Contemporânea, da Fundação Bienal de São Paulo e do Ministério da Cultura do Brasil.. Programa Brasil Arte Contemporânea, da Fundação Bienal de São Paulo e do

já tinha apresentado na reunião anterior, como as vantagens de se utilizar câmaras de arbitragem para a solução de contenciosos envolvendo cargas, armadores, embarcadores, agentes

[r]

· Outras informações Não existe mais nenhuma informação relevante disponível. 10 Estabilidade

a) será necessário esperar mais de 400 anos para que o objeto deixe de oferecer risco. b) já se passou 50 anos do início do processo radioativo. c) após exatamente 400 anos,

Para responder a essa questão, este estudo se propôs analisar as alterações posturais, a percepção de desconforto corporal (dor), o tempo de prática e as lesões