• Nenhum resultado encontrado

Análise de Complexidade

No documento Alinhamento de Seqüências Biológicas (páginas 86-92)

2.5 Método de Carrillo-Lipman

2.5.5 Análise de Complexidade

Para simplificar as análises, vamos adotar como convenção que todas as seqüências sendo alinhadas possuem tamanho igual a n. Os limites deduzidos aqui são facilmente adaptados se as seqüências não forem todas do mesmo tamanho.

Embora o método de Carrillo-Lipman possa levar a uma redução de tempo para preen-cher a parte relevante da matriza, não é possível fornecer garantias de que há sempre uma economia de tempo, já que o tempo depende do valor de U passado para o algoritmo (i.e., de quão “longe” o alinhamento A estiver de A em termos de custo) e, de acordo com a desigualdade (2.6), o algoritmo pode não conseguir descartar muitos vértices se a constante C ou se k forem grandes.

O Algoritmo Dist-CL calcula as matrizes melhorsi,sj para cada par de seqüências da entrada. Cada matriz melhorsi,sj pode ser computada como a soma das matrizes asi,sj e

2.5 Método de Carrillo-Lipman 69

Algoritmo 2.6 Dist-CL(k, s1, . . . , sk, U)

Entrada: Seqüênciass1, . . . , sk, com k≥2, e um racionalU, com SP(s1, . . . , sk)≤U. Saída: A matrizacom ponteiros indicando os mínimos para cálculo de um caminho ótimo.

1: para todoi, j com 1≤i < jkfaça

2: asi,sj ←Dist(si, sj);

3: bsi,sj ←Dist-Rev(si, sj);

4: melhorsi,sjasi,sj+bsi,sj;

5: LPi<jc(si, sj) =Pi<jasi,sj[ni, nj];

6: CUL;

7: Q←novafila; QQ∪ {~0}; // A união é feita como inclusão na fila

8: enquanto Q6=∅ faça

9: v←início(Q);

10: para b∈ {0,1}k\ {~0} em ordem lexicográficafaça

11: se v+b~ne v+bé relevante então

12: sev+bjá foi visto então

13: // v+b visto significaa[v+b] inicializada

14: a[v+b]←min{a[v] + SP(b⊗s[v+b]), a[v+b]};

15: senão

16: // v+b foi atingido pela primeira vez ea[v+b] deve ser inicializada

17: a[v+b]a[v] + SP(bs[v+b]);

18: QQ∪ {v+b};

19: senão

20: Ignorev+b;

21: Devolvap

bsi,sj em tempo O(n2). Como existem k2 pares de seqüências, o tempo total para este pré-processamento é k2O(n2) = O(k2n2). As outras inicializações (cálculo de L e de C) podem ser feitas em tempo total igual aO(k2).

O teste de relevância de uma entrada da matrizapode ser feito também em tempoO(k2), pois, fixado um vértice v, verifica-se, para cada par 1i < jk, se melhorsi,sj(vi, vj)≤ s(si, sj)+C=asi,sj[n, n]+C. No pior caso, o algoritmo pode precisar visitar todos os (n+1)k vértices e, para cada vértice v, calcular a entradaa[v]. Isso significa que, essencialmente, o AlgoritmoDist-CLexecuta os passos do AlgoritmoDist-AVS, fazendo um passo adicional de verificar a relevância de cada entrada da matriz. Logo, o tempo gasto pelo algoritmo é O(k2n2) +O((n+ 1)kk22k) +O((n+ 1)kk2) = O((n+ 1)kk22k), onde o primeiro termo corresponde ao pré-processamento, o segundo ao tempo de preencher todas as células da matriz ae o terceiro, ao teste de relevância das (n+ 1)k entradas da matriz a.

Um alinhamento ótimo pode ser obtido facilmente se durante os cálculos de mínimo do Algoritmo Dist-CL forem mantidos ponteiros para as posições que resultaram nos valores mínimos. Pode-se determinar o alinhamento em tempo linear, como feito para o algoritmo básico de programação dinâmica para o Problema AVS, isto é, em tempo O(kl) =O(k(kn)) =O(k2n).

Finalmente, em relação ao espaço, o algoritmo pode preencher todas as entradas de ae usar (como no caso básico de programação dinâmica), espaço O((n+ 1)k) e mais uma vez o comentário a respeito de complexidade de espaço feito para o algoritmo básico é válido.

É interessante notar a semelhança de funcionamento entre o Algoritmo Dist-CL e o Algoritmo de Dijkstra para caminhos mínimos, incluindo a coleção de nós mantida em forma de uma fila pelos algoritmos (no caso do Algoritmo de Dijkstra, a fila deve ser uma fila de prioridades para garantir o processamento dos vértices em ordem de seus rótulos).

Capítulo 3

Complexidade do Problema AVS

“This solution is gloriously non-deterministic.”

— E. W. Dijkstra (1930–2002)

3.1 Introdução

Nos capítulos anteriores, nossa atenção esteve principalmente voltada para o desenvol-vimento e análise de algoritmos para encontrar alinhamentos ótimos. Embora os algoritmos desenvolvidos tenham complexidade polinomial para qualquer número fixado de seqüências, eles tornam-se pouco práticos até mesmo para um pequeno número de seqüências (depen-dendo das instâncias a serem resolvidas), ainda que métodos para economia de espaço e de tempo (como o de Carrillo-Lipman) sejam usados [Fue97, GKS95].

Infelizmente, não se conhecem algoritmos ou técnicas que sirvam para resolver os Pro-blemas APS e AVS de maneira exata (isto é, que encontrem alinhamentos que minimizem suas respectivas funções objetivo) e em toda sua generalidade com complexidades de espaço e de tempo de pior caso assintoticamente menores do que as dos algoritmos que já vimos.

É claro que exceção deve ser feita ao considerarmos versões mais restritas dos problemas, que são casos em que pode haver algoritmos que resolvam tais versões em tempo ou espaço menores do que os algoritmos mais gerais.

Há ainda outra classe de algoritmos para os problemas de alinhamentos. Um exemplo de um algoritmo para o Problema APS que opera com complexidade de pior caso igual à dos algoritmos de programação dinâmica, mas que pode requerer menos recursos para grande parte das instâncias é o algoritmo proposto em 1983 por Ukkonen para o problema de alinhar pares de seqüências em que a distância de edição é a função objetivo. O algoritmo tem complexidade de tempo igual aO(d(s, t)·min(|s|,|t|)) e complexidade de espaço igual a O(d(s, t)2) para encontrar um alinhamento ótimo entre duas seqüências set. No pior caso, a distância entre duas seqüências de tamanho n é Θ(n) e este algoritmo exibe também o comportamento quadrático de tempo e espaço do algoritmo básico de programação dinâmica para o Problema APS, embora ele possa ser melhor em situações em que as seqüências sejam

“próximas”. Se apenas a distância de edição entre as seqüências for desejada, a complexidade de espaço do Algoritmo de Ukkonen pode ser reduzida para O(d(s, t)) [Ukk83, Ukk85].

A complexidade de tempo do algoritmo básico de programação dinâmica (inclusive no caso multidimensional) e a necessidade de encontrar rapidamente “bons” alinhamentos para

aplicações práticas de Biologia levaram ao projeto e uso de algoritmos e heurísticas que não necessariamente encontram alinhamentos ótimos para todas instâncias do problema, mas que rodam em tempo “aceitável na prática” e que devolvem “respostas razoáveis”.

Cabe aqui reiterar o comentário de que a modelagem do problema de encontrar alinha-mentos não captura todos os aspectos biologicamente significativos (como, por exemplo, similaridades de estruturas secundárias de seqüências de RNA e mutações compensatórias), sendo a modelagem matemática uma simplificação da situação encontrada na prática. Na realidade, até mesmo programas1 que empregam várias heurísticas para obter as respostas parecem não satisfazer em vários casos às necessidades que surgem em Biologia e os alinha-mentos produzidos como resposta são geralmente inspecionados e modificados manualmente antes do uso. A expressão “respostas razoáveis” deve ser, portanto, interpretada de acordo [HSP00].

Toda a dificuldade em obter algoritmos rápidos para encontrar alinhamentos obviamente nos conduz à pergunta de se é possível, de fato, desenvolver algoritmos que sejam rápidos (mais precisamente, de tempo de execução polinomial no tamanho da entrada) para o Problema AVS. Uma questão um pouco mais ambiciosa é descobrir não apenas se é ou não possível projetar um algoritmo de tempo polinomial para o problema, mas de descobrir quais são os recursos de tempo necessários para um algoritmo qualquer que o resolva.

Embora não saibamos responder às perguntas acima de maneira direta (à semelhança de muitos outros casos, conforme exposto por Garey e Johnson [GJ79, Capítulo 1]), pode-se mostrar que para uma ampla claspode-se de instâncias, o Problema AVS é pelo menos tão difícil, em termos de complexidade de tempo, quanto outros problemas combinatórios, no sentido de que se houver um algoritmo que resolva o Problema AVS em tempo polinomial para qualquer entrada, então cada um dos problemas de uma grande classe, a classe dos Problemas NP, também admitirá um algoritmo de tempo polinomial.

O presente capítulo possui natureza diferente dos capítulos anteriores: enquanto lá estivemos preocupados com o desenvolvimento de algoritmos, aqui o foco é o problema de alinhamentos em si de uma maneira mais geral e abstrata, independente de quais são os algoritmos usados para resolvê-lo. Nosso objetivo é mostrar a relação entre o Problema AVS e os problemas mais difíceis da classe NP de problemas de decisão, os problemas NP-completos.

Para o estudo da intratabilidade computacional de problemas, é conveniente fazer dis-tinção entre os problemas que podem e os que não podem ser resolvidos por algoritmos de tempo polinomial. Dizemos que um algoritmo que usa tempo polinomial no tamanho de sua entrada é um algoritmo polinomial. Caso a complexidade de tempo de um algoritmo não possa ser limitada por um polinômio, o algoritmo é dito exponencial2. Os problemas que admitem um algoritmo polinomial que os resolva são ditos problemas de solução eficiente ou que podem serresolvidos eficientemente. Caso um problema não admita um algoritmo polinomial, ele é dito um problema intratável. Nesse sentido, a polinomialidade de solu-ções para um dado problema funciona como o limite para distinguir problemas “fáceis” de problemas “difíceis”.

Uma idéia central para estudar a complexidade de problemas é a idéia de redução. In-tuitivamente, um problema Π reduz-se a um problema Π0 se for possível resolver o problema Π usando-se algum algoritmo que resolva Π0, isto é, se for possível “adaptar” um algoritmo

1Como é o caso do Clustal W.

2É importante ressaltar que essa nomenclatura, apesar de tradicional, é incorreta, uma vez que se um algoritmo tiver complexidade de tempo superpolinomial, mas subexponencial (como é o caso da função nlogn=elog2n=o(en)) ele será ainda assim chamado de exponencial.

3.1 Introdução 73

que resolva o problema Π0 para resolver também o problema Π, de maneira que o problema Π possa ser observado como um caso particular do problema Π0, após uma “tradução” (que é a redução). Para efeito do estudo de complexidade dos problemas, queremos que as redu-ções sejam também algoritmos polinomiais. Dizemos que uma redução cuja complexidade de tempo é limitada superiormente por um polinômio é uma redução polinomial.

Uma classe muito grande de problemas ocupa uma posição de destaque em Ciência da Computação, a classe dos já mencionados problemas NP-completos. Para esses problemas, não se conhecem algoritmos eficientes, mas também não se conhecem provas de que eles sejam intratáveis. De qualquer maneira, esses problemas compartilham a curiosa caracte-rística de que todos problemas NP-completos são redutíveis em tempo polinomial a todos outros problemas da classe, o que significa que se um desses problemas puder ser resolvido em tempo polinomial, então todos os demais problemas da classe também poderão e, portanto, em relação à intratabilidade, todos eles são “iguais”. Pelo motivo de um grande número de importantes problemas pertencer a esta classe, por terem todos eles essencialmente “a mesma” dificuldade (no sentido de intratabilidade) e por nenhum algoritmo polinomial ser conhecido para nenhum destes problemas (ainda que nenhuma prova de sua complexidade inerente seja conhecida), o máximo que se pode dizer a respeito de tais problemas é que eles sãoaparentemente intratáveis3 [GJ79].

A primeira demonstração de dificuldade (no sentido de NP-completude) do Problema AVS foi publicada em 1994 por Wang e Jiang [WJ94]. A demonstração apresentada naquele artigo, apesar de concisa, restringe-se ao caso de pontuação SP em que a matriz de pontuação não é uma métrica (a matriz atribui pontuação não-nula a pares de caracteres iguais).

Em 2001, Bonizzoni e Vedova mostraram que o Problema AVS, em sua versão de de-cisão, é NP-completo também para uma matriz de pontuação que satisfaz aos axiomas de métrica [BV01], que era uma questão em aberto até então. Em um artigo posterior [Jus01], Winfried Just mostrou que o problema de alinhar seqüências é NP-difícil para uma ampla classe de matrizes de pontuação (que inclui as matrizes do artigo de Bonizzoni e Vedova).

No mesmo artigo, Just mostrou também que existe uma matriz de pontuação para a qual o Problema AVS é MAXSNP-difícil. Essa matriz, no entanto, não é uma métrica (ela atribui pontuação 0 a caracteres diferentes do alfabeto).

Uma questão em aberto sobre o Problema AVS diz respeito ao fato de o problema ser ou não MAXSNP-difícil para matrizes que sejam métricas. Na realidade, não se sabe se o Problema AVS é MAXSNP-difícil para matrizes de pontuação que tenham elementos nulos na diagonal principal e diferentes de zero fora da diagonal, mesmo que a matriz não seja uma métrica [Jus01, Jus02].

Neste capítulo, apresentamos a demonstração de Wang e Jiang, que é simples e estabelece a relação do problema de alinhar seqüências com outro problema que envolve seqüências de caracteres (além de ter sido a primeira demonstração de complexidade do Problema AVS) e a linha geral das várias demonstrações de complexidade do Problema AVS (e de versões mais restritas do problema) e aproximabilidade apresentadas por Just.

Para nossa discussão, supomos que o leitor esteja familiarizado com conceitos básicos de Teoria de Complexidade de Algoritmos. A notação adotada é padrão e pode ser encontrada em diversos livros-texto comuns sobre algoritmos como em [CLR90, Capítulo 36] ou [GJ79].

3Muitos pesquisadores acreditam que tais problemas necessitam, realmente, de algoritmos exponenciais para serem resolvidos.

No documento Alinhamento de Seqüências Biológicas (páginas 86-92)