You are on page 1of 3

1

Algoritmo

Utilizando a recurso encontrada (COLOCAR REF) e tendo em vista a soa breposio de problemas escrevemos o Algoritmo 1 de programao dinmica ca ca a para solucion-lo. O algoritmo tem como entrada trs sequncia de caracteres a e e X = < x1 , x2 , .., xm >, Y = < y1 , y2 , .., yn > e Z = < z1 , z2 , .., zp >. Ele armazena os valores em uma matriz de trs dimenses, c[0..m, 0..n, 0..p], cada e o dimenso para uma sequncia de caracteres. Cada elemento c[i, j, k] contm o a e e comprimento da 3-LCS das subsequncia Xi , Yj , Zk . Tambm utilizado uma e e e matriz adicional b, de mesmo comprimento de c, para construir a soluo tima ca o encontrada. O algoritmo possui complexidade de tempo e espao (mnp). c Entrada: Trs sequncia de caracteres X, Y e Z e e Sa da: Matrizes b e c, que, respectivamente, representam o caminho e custo da soluo tima encontrada ca o m comprimento[X] n comprimento[Y ] p comprimento[Z] Zerando os elementos nas extremidades (zero) do cubo para i 0 at m faa e c para k 0 at p faa c[i, 0, k] 0 e c m para j 0 at n faa e c para k 0 at p faa c[0, j, k] 0 e c m para i 1 at m faa e c para j 1 at n faa e c para k 1 at p faa e c se xi = yj = zk ento a c[i, j, k] c[i, j, k] + 1 b[i, j, k] seno se c[i 1, j, k] c[i, j 1, k] e a c[i 1, j, k] c[i, j, k 1] ento a c[i, j, k] c[i 1, j, k] b[i, j, k] seno se c[i, j 1, k] c[i 1, j, k] e a c[i, j 1, k] c[i, j, k 1] ento a c[i, j, k] c[i, j 1, k] b[i, j, k] seno a c[i, j, k] c[i, j, k 1] b[i, j, k] m m m m retorna b e c Algoritmo 1: CALCULO-3LCS

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

18 19 20

21 22 23 24 25 26 27 28 29 30

A primeira parte do algoritmo zera as extremidades da nossa matriz tridimensional. A razo disto para facilitar as comparaes do algoritmo para a e co que ele no perca a generalidade e simplicidade do algoritmo com checagem a de extremidades. Visto que o algoritmo usa as subsequncias j conhecidas e a (esquerda, superior, etc.) para calcular e construir a nova. Por exemplo, na subsequncia X1 , Y1 , Z1 o algoritmo pode checar o tamanho das seguintes sube sequncia: X0 , Y1 , Z1 , X1 , Y0 , Z1 e X1 , Y1 , Z0 . A Figura 1 mostra a matriz trie dimensional com as extremidades zeradas.

Figura 1: Representao da matriz tridimensional ca As entradas na tabela b so s a mbolos que representam vetores (direo) de ca qual a a maior 3-LCS encontrada. As direes so consideradas levando em e co a conta a matriz formada cortando o plano xi da matriz tridimensional. Quando xi = yj = zk implica que achamos uma nova subsequncia mxima e ela ir e a a apontar para a diagonal, i.e., para a subsequncia Xi1 , Yj1 , e Zk1 . A direo e ca plano superior diz que a funo mximo retorno para a subsequncia do plano ca a e anterior, i.e., para Xi1 , Yj , e Zk . Enquanto que a direo esquerda aponta ca para a subsequncia, Xi , Yj1 , e Zk . Lembre-se que estamos vendo a matriz e resultante do corte de um xi qualquer. Finalmente, a direo entrando para ca e quando a funo mximo retorna a subsequncia Xi , Yj e Zk1 . Para facilitar ca a e a compreenso dos s a mbolos da tabela b, criamos um exemplo na Figura 2. Nela, cortamos um plano xi e mostramos a matriz resultante do corte. A maior subsequncia do elemento xi , y3 , z3 a da esquerda, i.e., xi , y2 , z3 . Finalmente, e e denimos b[i, j, k] como: nova sub sequncia encontrada, i.e., (xi = yj = zk ) e plano superior, i.e., Xi1 , Yj e Zk b[i, j, k] = esquerda, i.e., Xi , Yj1 e Zk entrando, i.e., Xi , Yj e Zk1 2

Figura 2: Representao da matriz tridimensional ca

Print 3LCS
Entrada: Matriz caminho b, sequncia de caracteres X e e ndices i, j, k Sa da: Impresso da 3-LCS de tamanho Xi , Yj e Zk a se i = 0 ou j = 0 ou k = 0 ento a retorna m se b[i, j, k] = ento a IM P RIM IR 3LCS(b, X, i 1, j 1, k 1) imprimir xi seno se b[i, j, k] = ento a a IM P RIM IR 3LCS(b, X, i 1, j, k) seno se b[i, j, k] = ento a a IM P RIM IR 3LCS(b, X, i, j 1, k) seno a IM P RIM IR 3LCS(b, X, i, j, k 1) m Algoritmo 2: IMPRIMIR-3LCS

1 2 3 4 5 6 7 8 9 10 11 12 13