A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Maior Subseqüência Comum

Apresentações semelhantes


Apresentação em tema: "Maior Subseqüência Comum"— Transcrição da apresentação:

1 Maior Subseqüência Comum
ATAL – Programação Dinâmica Maior Subseqüência Comum 11/19/2018

2 Programação Dinâmica Mais eficiente do que o método da força bruta, quando existe overlap de subproblemas Divisão-e-Conquista + memória Características: Subestrutura ótima Tabela Bottom-up 11/19/2018

3 Maior Subseqüência Comum (LCS)
Ex: X= {A B C B D A B }, Y= {B D C A B A} Maior Subseqüência comum é: X = A B C B D A B Y = B D C A B A 11/19/2018

4 Solução para LCS Solução força bruta: comparar cada subseqüência de X com os símbolos de Y. Se |X| = m, |Y| = n: 2m subseqüências de X Solução força bruta é O(n 2m) LCS exibe subestrutura ótima: soluções de subproblemas fazem parte da solução final Existe melhor idéia? 11/19/2018

5 A solução usando PD Achar LCS para prefixos de X e Y
Sejam Xi, Yj prefixos de X e Y de tamanhos i e j respectivamente c[i,j] é o tamanho da LCS de Xi e Yj Logo, LCS de X e Y vai ser guardado em c[m,n] Como definir uma solução recursiva para c[i,j]? 11/19/2018

6 Solução Recursiva Caso base: i = j = 0 (substrings vazios de X e Y)
Se X0 e/ou Y0 são strings vazios: para todo i e j: c[0, j] = c[i,0] = 0 11/19/2018

7 Solução Recursiva Primeiro Caso:
x[i]=y[j]: mais um símbolo em X e Y confere Logo, LCS para Xi e Yj é igual ao LCS de Xi-1 e Yi-1 , mais 1 11/19/2018

8 Solução Recursiva Por que não repetir LCS(Xi-1, Yj-1) ? Segundo caso:
Se os símbolos não casam, não podemos melhorar a nossa resposta: (i.e. max(LCS(Xi, Yj-1) e LCS(Xi-1,Yj)) Por que não repetir LCS(Xi-1, Yj-1) ? 11/19/2018

9 O Algoritmo LCS(X, Y) 1. m = length(X) 2. n = length(Y)
3. for i = 1 to m c[i,0] = 0 // caso base: Y0 4. for j = 1 to n c[0,j] = 0 // caso base: X0 5. for i = 1 to m 6. for j = 1 to n 7. if ( Xi == Yj ) 8. c[i,j] = c[i-1,j-1] + 1 9. else c[i,j] = max( c[i-1,j], c[i,j-1] ) 10. return c(m, n) 11/19/2018

10 Exemplo Determine o tamanho da LCS de X e Y. Considere: X = ABCB
Y = BDCAB Determine o tamanho da LCS de X e Y. 11/19/2018

11 Exemplo ABCB BDCAB X = ABCB; m = |X| = 4 Y = BDCAB; n = |Y| = 5
j i Yj B D C A B Xi A 1 B 2 3 C 4 B ABCB BDCAB X = ABCB; m = |X| = 4 Y = BDCAB; n = |Y| = 5 11/19/2018

12 Exemplo: caso base ABCB BDCA for i = 1 to m c[i,0] = 0
j i Yj B D C A B Xi A 1 B 2 3 C 4 B for i = 1 to m c[i,0] = 0 for j = 1 to n c[0,j] = 0 ABCB BDCA 11/19/2018

13 Exemplo: primeiro valor
j i Yj B D C A B Xi A 1 B 2 3 C 4 B if ( Xi == Yj ) c[i,j] = c[i-1,j-1] + 1 else c[i,j] = max( c[i-1,j], c[i,j-1] ) ABCB BDCAB 11/19/2018

14 ABCB BDCAB j 0 1 2 3 4 5 i Yj B D C A B Xi A 1 B 2 3 C 4 B
A 1 B 2 3 C 4 B ABCB BDCAB if ( Xi == Yj ) c[i,j] = c[i-1,j-1] + 1 else c[i,j] = max( c[i-1,j], c[i,j-1] ) 11/19/2018

15 ABCB BDCAB j 0 1 2 3 4 5 i Yj B D C A B Xi A 1 1 B 2 3 C 4 B
A 1 1 B 2 3 C 4 B if ( Xi == Yj ) c[i,j] = c[i-1,j-1] + 1 else c[i,j] = max( c[i-1,j], c[i,j-1] ) ABCB BDCAB 11/19/2018

16 ABCB BDCAB j 0 1 2 3 4 5 i Yj B D C A B Xi A 1 1 1 B 2 3 C 4 B
A 1 1 1 B 2 3 C 4 B if ( Xi == Yj ) c[i,j] = c[i-1,j-1] + 1 else c[i,j] = max( c[i-1,j], c[i,j-1] ) ABCB BDCAB 11/19/2018

17 ABCB BDCAB j 0 1 2 3 4 5 i Yj B D C A B Xi A 1 1 1 B 2 1 3 C 4 B
A 1 1 1 B 2 1 3 C 4 B if ( Xi == Yj ) c[i,j] = c[i-1,j-1] + 1 else c[i,j] = max( c[i-1,j], c[i,j-1] ) ABCB BDCAB 11/19/2018

18 ABCB BDCAB j 0 1 2 3 4 5 i Yj B D C A B Xi A 1 1 1 B 2 1 1 1 1 3 C 4 B
A 1 1 1 B 2 1 1 1 1 3 C 4 B ABCB BDCAB if ( Xi == Yj ) c[i,j] = c[i-1,j-1] + 1 else c[i,j] = max( c[i-1,j], c[i,j-1] ) 11/19/2018

19 ABCB BDCAB j 0 1 2 3 4 5 i Yj B D C A B Xi A 1 1 1 B 2 1 1 1 1 2 3 C 4
A 1 1 1 B 2 1 1 1 1 2 3 C 4 B if ( Xi == Yj ) c[i,j] = c[i-1,j-1] + 1 else c[i,j] = max( c[i-1,j], c[i,j-1] ) ABCB BDCAB 11/19/2018

20 ABCB BDCAB j 0 1 2 3 4 5 i Yj B D C A B Xi A 1 1 1 B 2 1 1 1 1 2 3 C 1
A 1 1 1 B 2 1 1 1 1 2 3 C 1 1 4 B if ( Xi == Yj ) c[i,j] = c[i-1,j-1] + 1 else c[i,j] = max( c[i-1,j], c[i,j-1] ) ABCB BDCAB 11/19/2018

21 ABCB BDCAB j 0 1 2 3 4 5 i Yj B D C A B Xi A 1 1 1 B 2 1 1 1 1 2 3 C 1
A 1 1 1 B 2 1 1 1 1 2 3 C 1 1 2 4 B if ( Xi == Yj ) c[i,j] = c[i-1,j-1] + 1 else c[i,j] = max( c[i-1,j], c[i,j-1] ) ABCB BDCAB 11/19/2018

22 ABCB BDCAB j 0 1 2 3 4 5 i Yj B D C A B Xi A 1 1 1 B 2 1 1 1 1 2 3 C 1
A 1 1 1 B 2 1 1 1 1 2 3 C 1 1 2 2 2 4 B ABCB BDCAB if ( Xi == Yj ) c[i,j] = c[i-1,j-1] + 1 else c[i,j] = max( c[i-1,j], c[i,j-1] ) 11/19/2018

23 ABCB BDCAB j 0 1 2 3 4 5 i Yj B D C A B Xi A 1 1 1 B 2 1 1 1 1 2 3 C 1
A 1 1 1 B 2 1 1 1 1 2 3 C 1 1 2 2 2 4 B 1 ABCB BDCAB if ( Xi == Yj ) c[i,j] = c[i-1,j-1] + 1 else c[i,j] = max( c[i-1,j], c[i,j-1] ) 11/19/2018

24 ABCB BDCAB j 0 1 2 3 4 5 i Yj B D C A B Xi A 1 1 1 B 2 1 1 1 1 2 3 C 1
A 1 1 1 B 2 1 1 1 1 2 3 C 1 1 2 2 2 4 B 1 1 2 2 if ( Xi == Yj ) c[i,j] = c[i-1,j-1] + 1 else c[i,j] = max( c[i-1,j], c[i,j-1] ) ABCB BDCAB 11/19/2018

25 3 ABCB BDCAB j 0 1 2 3 4 5 i Yj B D C A B Xi A 1 1 1 B 2 1 1 1 1 2 3 C
A 1 1 1 B 2 1 1 1 1 2 3 C 1 1 2 2 2 3 4 B 1 1 2 2 ABCB BDCAB if ( Xi == Yj ) c[i,j] = c[i-1,j-1] + 1 else c[i,j] = max( c[i-1,j], c[i,j-1] ) 11/19/2018

26 Análise do Algoritmo O(m*n)
Qual o tempo de execução? O(m*n) cada c[i,j] é calculado em tempo constante, e existem m*n células 11/19/2018

27 Como encontrar a LCS Por exemplo, c[i,j] = c[i-1,j-1] +1 = 2+1=3
Mesmo esquema usado nos problemas da mochila e distância de edição mínima Cada c[i,j] depende de c[i-1,j] e c[i,j-1] e c[i-1, j-1] Podemos identificar como cada c[i,j] foi obtido: Por exemplo, c[i,j] = c[i-1,j-1] +1 = 2+1=3 2 2 2 3 11/19/2018

28 Começar de c[m,n] e retornar
Sabemos que: Começar de c[m,n] e retornar Sempre que c[i,j] = c[i-1, j-1]+1, guardar x[i] (x[i] faz parte da LCS) Se i=0 or j=0 (retorno chega ao fim) A saída é o conjunto de símbolos guardados em ordem inversa 11/19/2018

29 Voltando ao nosso exemplo
j i Yj B D C A B Xi A 1 1 1 B 2 1 1 1 1 2 3 C 1 1 2 2 2 3 4 B 1 1 2 2 11/19/2018

30 Finding LCS (2) 3 B C B LCS (ordem inversa): j 0 1 2 3 4 5 i Yj B D C
Xi A 1 1 1 B 2 1 1 1 1 2 3 C 1 1 2 2 2 3 4 B 1 1 2 2 B C B LCS (ordem inversa): 11/19/2018


Carregar ppt "Maior Subseqüência Comum"

Apresentações semelhantes


Anúncios Google