






Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Enunciado do exercício-programa 2010
Tipologia: Exercícios
1 / 11
Esta página não é visível na pré-visualização
Não perca as partes importantes!







O último exercício-programa do semestre será baseado em uma área de pesquisas bastante ativa e importante, que é a biologia molecular computacional, em que técnicas computacio- nais são utilizadas para o desenvolvimento de pesquisas em biologia molecular. Você talvez observe que o enunciado do exercício é mais complexo que os anteriores e exige mais dedicação e atenção para entender o problema e o que é pedido para ser resolvido. Isso é proposital. Um dos objetivos didáticos desse exercício-programa é mostrar, ainda que de forma um pouco simplicada, o tipo de problemas que, ao menos no contexto de pesquisas cientícas, requerem o uso de programas de computador para serem resolvidos, na forma como eles se apresentam para os pesquisadores e desenvolvedores de software. A solução do EP, porém, não exige a compreensão de todos os fenômenos biológicos relacionados com o problema.
Primeiramente, vamos rever alguns conceitos de biologia, que servirão de base para a formu- lação do exercício proposto. Esses conceitos são apresentados para contextualizar o exercício, e para você ter uma ideia da relevância potencial do programa desenvolvido. O exercício propriamente dito está proposto nas próximas seções. Existem três tipos principais de sequências biológicas: as sequências de DNA,e as proteí- nas. Cada elemento da sequência de DNA é um dos quatro nucleotídeos: A, C, T ou G. No casos das proteínas, são 20 os possíveis aminoácidos que aparecem nas sequências a formarem as proteínas. Um alinhamento de sequências de DNA, de RNA ou proteínas de diferentes espécies de seres vivos descreve uma hipótese de evolução entre os nucleotídeos ou aminoácidos que constituem as sequências biológicas dos indivíduos de cada espécie. Os alinhamentos são importantes para inferir a história evolutiva das sequências. Um alinhamento múltiplo,
envolvendo múltiplas sequências, é utilizado para extrair e representar similaridades biolo- gicamente importantes de um conjunto de sequências, que por sua vez se tornam bem mais evidentes quando várias sequências são comparadas. Um alinhamento de k sequências biológicas é uma disposição matricial destas k sequên- cias. Cada linha da matriz é formada pelos símbolos da sequência em questão, eventual- mente com símbolos - (representando buracos) acrescentados entre símbolos consecutivos da sequência original. Colunas somente com buracos não são permitidas, o alinhamento com maior número de colunas possível é um em que em cada coluna há k − 1 buracos e um único símbolo que relativo a uma das k sequências. Na Figura 1 vemos um exemplo de alinhamento de três proteínas (sequências de letras num alfabeto de 20 aminoácidos). Na primeira coluna
IVNGEEAvpgSWPWQVSLQDktgF---HFCGGSLINENWVVTAAHCgvttSDVVVA-GEFdqgsssekiQKLKIA IVGGYTCganTVPYQVSLN--SgY---HFCGGSLINSQWVVSAAHCyksGIQVRL--GEDninvvegneQFISAS VVGGTEAqrnSWPSQISLQYrsgsswAHTCGGTLIRQNWVMTAAHCvdrelTFRVVVGEHnlnqnngteQYVGVQ
Figura 1: Alinhamento das proteínas: chymotripsina bovina, tripsina bovina, e elastase suína. As 20 letras usadas representam os 20 aminoácidos possíveis. Letras maiúsculas foram usadas em colunas com maior pontuação. Hífens representam buracos, por exemplo devidos à remoção histórica de algum símbolo.
do alinhamento, vemos alinhados os aminoácidos I, I e V, que descreve uma substituição do símbolo I na primeira e segunda sequências pelo símbolo V na terceira. Diversos alinha- mentos são possíveis para um mesmo conjunto de sequências e a próxima seção descreve estratégias usadas para escolher um que seja melhor. Além disso, descreveremos implicita- mente um modo alternativo para representar um alinhamento através de um conjunto de arestas ligando pontos de coordenadas inteiras, que serão melhor denidos a seguir.
3 Pontuação de um alinhamento
Vários alinhamentos (hipóteses evolutivas) podem ser propostos para um mesmo conjunto de sequências. Um problema que naturalmente se coloca é o de qual é o melhor alinhamento. O melhor alinhamento A está associado a uma pontuação que resulta de métodos estatísticos e que maximiza a probabilidade de que o alinhamento A reita as evoluções do ancestral comum às sequências em questão. Costumeiramente são feitas várias hipóteses simplicadoras nas elaborações dos modelos matemáticos usados em biologia computacional. Por exemplo, comumente adota-se a hipó- tese de que a pontuação adequada de um alinhamento é a soma de pontuações das colunas e as pontuações das colunas de um alinhamento independem completamente da pontuação das demais colunas. Para cada coluna, sua pontuação depende apenas dos símbolos presentes na coluna. Comumente adota-se o esquema de pontuação conhecido como soma de pares em que a pontuação adotada para a coluna é a soma das pontuações dos pares de símbolos presentes em linhas distintas na coluna. Se temos k linhas na coluna, temos k(k − 1)/ 2 pares de símbolos possíveis na coluna. Para k = 3, temos três pares.
(3, 4 , 4). (Observe que 3 , 4 e 4 são os respectivos comprimentos das sequências x, y e z.) A aresta do caminho destacada por linha pontilhada vermelha, por exemplo, corresponde à coluna do alinhamento destacada por linha pontilhada vermelha. Nesta coluna estão pre- sentes os símbolos - , G e -. Equivale a dizer que não é alinhado nenhum nucleotídeo das sequências x e z, denotado pelos buracos - , enquanto que é alinhado o nucleotídeo G da sequência y. Observe que somente a coordenada da sequência y sofreu alteração já que a aresta em questão parte do ponto (0, 1 , 1) para chegar ao ponto (0, 2 , 1). De fato, os símbolos presentes são muito bem denidos pelas coordenadas dos pontos de partida e chegada da aresta em questão: um buraco - é usado se e só se a coordenada em questão não muda.
De uma maneira geral, seja uma aresta que parte do ponto P e chega no ponto Q e seja ji a i-ésima coordenada do destino Q da aresta. O símbolo associado à sequência Si na coluna do alinhamento é:
A cada diferença possível Q−P chamamos de deslocamento. Observe que o conjunto dos des- locamentos são os vértices no cubo k-dimensional de coordenadas 0 ou 1 , exceto (0, 0 ,... , 0), como os cubos na Figura 3. Denimos o conjunto
∆ = { 0 , 1 }k^ \ { 0 }k
como sendo este conjunto de diferenças possíveis. Observe que ∆ tem 2 k^ − 1 deslocamentos, e que ∆ = {(0, 0 , 1), (0, 1 , 0), (0, 1 , 1), (1, 0 , 0), (1, 0 , 1), (1, 1 , 0), (1, 1 , 1)} no caso em que k = 3. Nesta gura, vemos exemplos para k = 2 sequências e para k = 3 sequências. A pontua- ção numa tal coluna associada a uma aresta do ponto P até o ponto Q é denotada por
W (P, Q).
Voltando ao exemplo da Figura 2, a pontuação da coluna pontilhada vermelha é a soma das pontuações associadas aos pares (-,G), (-,-) e (G,-), que dá g + 0 + g = 2g. Podemos fazer o mesmo para a aresta e coluna destacadas por linhas tracejadas azuis, que corresponde ao alinhamento de três A's. Neste caso todas as coordenadas são incrementadas de 1 quando se considera a origem (0, 3 , 1) e o destino (1, 4 , 2) da aresta. A pontuação da coluna é 3 r. Outro exemplo de alinhamento múltiplo para as mesmas sequências pode ser visto na Figura 4, onde as três colunas nais do alinhamento são diferentes, apesar da pontuação dos dois alinhamentos ser a mesma.
4 A formulação do problema
Assim estamos prontos para a formulação do problema de alinhamento múltiplo de sequên- cias:
k=2 k=
Figura 3: Cubos k-dimensionais correspondentes às diferenças entre pontos consecutivos associados a colunas do alinhamento para k = 2 e k = 3. Quando k = 3, temos 2 k^ − 1 = 7 diferenças possíveis a formar o conjunto de diferenças possíveis ∆.
x
y
z
0,0,
0,1,
1,4,
0,2,1 0,3,1 1,4, 2,4,
3,4, A
T
C
C
A
C G G A
C
T
x: - - - A - T C
y: C G G A - - -
z: C - - A C T -
Figura 4: Um alinhamento alternativo para as sequências ATC, CGGA e CACT.
Tabela 1: Conjunto U para o exemplo da Figura 2.
Como exemplo, tomemos o ponto Q = (2, 4 , 2). O conjunto de S(Q) associado a este ponto é formado pelos prexos AT, CGGA, CA. Observe que na própria Figura 2 temos um alinhamento para S(Q) ao tomarmos o alinhamento formado pelas cinco primeiras colunas do alinhamento ali exibido. A última coluna deste alinhamento, a quinta coluna, é associada ao deslocamento δ = (1, 0 , 0), de forma que o ponto Q − δ = (1, 4 , 2), e um alinhamento para S(Q − δ) é o alinhamento obtido ao remover a quinta coluna e car apenas com as quatro primeiras colunas. (Caso tenhamos que o alinhamento da gura seja ótimo, aos alinhamentos de S(Q) e S(Q − δ) descritos acima também deverão ser ótimos, como também deverá ser ótimo o alinhamento de qualquer ponto na trajetória de (0, 0 , 0) a (3, 4 , 4) que está na linha azul em destaque.) O conjunto de deslocamentos ∆ para o caso em questão é aquele da Figura 3, caso k = 3. Ao se querer computar p(Q) usando as recorrências (1), somos levados a tomar o máximo sobre 7 valores possíveis, cada um deles em função de uma possível escolha de δ em ∆. Cada uma destas escolhas, dene um ponto Q − δ. As recorrências (1) recorrem à aplicação da função p em cada um dos pontos Q − δ, que em nosso caso são: (2, 4 , 1), (2, 3 , 2), (2, 3 , 1), (1, 4 , 2), (1, 4 , 1), (1, 3 , 2) e (1, 3 , 1). (Na Tabela 1, estes 7 pontos Q − δ estão dentro de um retângulo, enquanto que o ponto Q está em negrito.) Para δ = (1, 0 , 0), o ponto Q − δ é (1, 4 , 2) e contribui no cálculo do máximo com o valor
p((1, 4 , 2)) + W ((1, 4 , 2), (2, 4 , 2)).
A coluna associada à aresta de (1, 4 , 2) a (2, 4 , 2) é
T − −
e que possui pontuação g + g + 0 = 2g. Assim, W ((1, 4 , 2), (2, 4 , 2)) = 2g.
5 Recorrendo a uma matriz
Para calcular a função recorrente p : U −→ R denida acima, a maneira mais apropriada ao conteúdo visto em aula é através do uso de uma matriz tridimensional M de tamanho (n 1 + 1)(n 2 + 1)(n 3 + 1). Para cada ponto Q ∈ U , armazenamos em M [Q 1 ][Q 2 ][Q 3 ] o valor de p(Q). Assim, usando as recorrências (1), podemos calcular os valores da Matriz M pela fórmula abaixo:
M [Q 1 ][Q 2 ][Q 3 ] = max({M [P 1 ][P 2 ][P 3 ]+W (P, Q) | P = Q−δ ∈ U para algum δ ∈ ∆}), (2)
que toma o máximo num conjunto de no máximo 7 valores (um para cada possível δ ∈ ∆). Através de três laços (loops) encaixados é possível facilmente varrer todos os pontos de U , realizando os cálculos necessários e buscando os valores M [P 1 ][P 2 ][P 3 ] vistos na própria matriz M. Na Tabela 1, por exemplo, vemos os pontos de U listados numa ordem tal que, ao computarmos p em cada um destes pontos Q e armazenar na posição correspondente da
O que deve ser entregue
O aluno deve entregar um programa escrito em C que leia do teclado três inteiros r, q e g, um inteiro k = 3^3 e k strings S 1 , S 2 , S 3 correspondentes às k = 3 sequências em questão. O programa lê ainda um parâmetro listamatriz. O programa deve imprimir a pontuação do alinhamento múltiplo de maior pontuação. Deve ainda listar a matriz de pontuação no estilo da Tabela 2 caso listamatriz seja diferente de 0. Para o exemplo do alinhamento da Figura 2, os dados de entrada bem poderiam ser:
10 -1 - 3 ATC CGGA CACT 1
Teste com estes dados. (Após calcular um alinhamento ótimo, pode-se conferir se o exemplo da Figura 2 é um alinhamento ótimo ou não.) O programa escrito deve implementar funções em C cujos protótipos são fornecidos a seguir.
#define K 3 #define DOISKUM 7 /* 2^k - 1 */ #define NMAX 60
int Vizinho( int Q[K], int d, int P[K]); (^3) Na prática, como o valor k é xo, ele não precisaria ser lido. Mantivemos esse parâmetro, entretanto, considerando que alguns alunos podem querer tentar generalizar seus programas para outros valores de k. Esse exercício é interessante e encorajamos seu desenvolvimento, mas ele NÃO será solicitado para entrega NEM considerado para nota.
int W( int P[K], int Q[K], char S[K][NMAX], int r, int q, int g );
6 Executáveis, consistência e entrega do EP
Exemplos de dados e executáveis deste exercício-programa poderão ser encontrados oportu- namente em http://www.ime.usp.br/~mac2166/ep4. Caso você tenha dúvidas sobre qual deve ser o comportamento do seu programa em alguma situação, veja como se comporta este executável. O seu programa não precisa fazer consistência de dados. O programa pode supor que todos os dados lidos (opções, número,... ) estão corretos. Todo exercício programa deve seguir as observações contidas na página http://www.ime.usp.br/~mac2166/infoeps, onde estão descritas as diretrizes para forma de entrega do exercício, aspectos importantes na avaliação etc.
7 Apêndice
Por curiosidade^5 , pode-se observar que o tempo de execução é proporcional a k(k 2 − 1)(2k^ −
k^22 knk,
se as k sequências tiverem o mesmo comprimento n. Para duas sequências (k = 2), o tempo é quadrático e é cúbico para k = 3. O espaço de memória usado neste algoritmo descrito é proporcional à matriz de tamanho (n 1 + 1)(n 2 + 1) · · · (nk + 2). De fato, para cada um destes 2 k^ − 1 elementos de onde os máximos são tomados, computamos uma pontuação da forma W (Q − δ, Q), que demora tempo proporcional a k(k 2 − 1)como já vimos. Isto é feito em cada posição da matriz.
(^4) O exercício complementar não é obrigatório e não vale nota. Ele é um desao complementar para os alunos que tiverem interesse e vontade de enfrentá-lo. (^5) Este parágrafo tem por nalidade fazer uma rápida análise do algoritmo descrito neste EP, ainda que ela não seja necessária à própria elaboração do EP.