Algoritmos e complexidade Notas de aula - Arquivo Escolar

Algoritmos e complexidade Notas de aula - Arquivo Escolar Algoritmos e complexidade Notas de aula - Arquivo Escolar

arquivoescolar.org
from arquivoescolar.org More from this publisher
13.04.2013 Views

5. Programação dinâmica 11 sol1 := mi,j−1 + 1 12 sol2 := mi−1,j + 1 13 mi,j := min(sol0, sol1, sol2) ; 14 end for 15 return mi,j Distância entre textos Valores armazenados na matriz M para o cálculo da distância entre ALTO e LOIROS -ALTO- LOIROS Distância entre textos · L O I R O S · 0 1 2 3 4 5 6 A 1 1 2 3 4 5 6 L 2 1 2 3 4 5 6 T 3 2 2 3 4 5 6 O 4 3 2 3 4 4 5 Algoritmo 5.6 (PD-distância) Entrada Dois strings s e t, e n e m, seus respectivos tamanhos medidos em número de caracteres. 106 Saída A distância mínima entre s e t e uma matriz P = (pi,j) que armazena a sequência de operações. Comentário O algoritmo usa uma matriz M = (mi,j) ∈ N (n+1)×(m+1) que armazena as distâncias mínimas mi,j entre os prefixos s[1 . . . i] e t[1 . . . j]. 1 PD− d i s t â n c i a ( s , t , n ,m):= 2 for i := 0, . . . , n do mi,0 = i; pi,0 := −1 3 for i := 1, . . . , m do m0,i = i; p0,i := −1

4 for i := 1, . . . , n do 5 for j := 1, . . . , m do 6 i f (si = tj ) then 7 sol0 = mi−1,j−1 8 else 9 sol0 = mi−1,j−1 + 1 10 end i f 11 sol1 := mi,j−1 + 1 12 sol2 := mi−1,j + 1 13 mi,j := min(sol0, sol1, sol2) ; 14 pi,j := min{i | soli = mij} 15 end for 16 return mi,j Reconstrução da Sequência de Operações 5.2. Comparação de sequências Algoritmo 5.7 (PD-operações) Entrada Uma matriz P = (pij) de tamanho n × m com marcação de operações, strings s, t, posições i e j. Saída Uma sequência a1, a2, ax de operações executadas. 1 PD−operações (P, s , t , i , j ):= 2 case 3 pi,j = −1 : 4 return 5 pi,j = 0 : 6 PD−operações (s ,t ,i − 1 ,j − 1) 7 p r i n t ( ’M’ ) 8 pi,j = 1 : 9 PD−operações (s ,t ,i ,j − 1) 10 p r i n t ( ’ I ’ ) 11 pi,j = 2 : 12 PD−operações (s ,t ,i − 1 ,j ) 13 p r i n t ( ’D’ ) 14 end case 107

4 for i := 1, . . . , n do<br />

5 for j := 1, . . . , m do<br />

6 i f (si = tj ) then<br />

7 sol0 = mi−1,j−1<br />

8 else<br />

9 sol0 = mi−1,j−1 + 1<br />

10 end i f<br />

11 sol1 := mi,j−1 + 1<br />

12 sol2 := mi−1,j + 1<br />

13 mi,j := min(sol0, sol1, sol2) ;<br />

14 pi,j := min{i | soli = mij}<br />

15 end for<br />

16 return mi,j<br />

Reconstrução da Sequência <strong>de</strong> Operações<br />

5.2. Comparação <strong>de</strong> sequências<br />

Algoritmo 5.7 (PD-operações)<br />

Entrada Uma matriz P = (pij) <strong>de</strong> tamanho n × m com marcação <strong>de</strong><br />

operações, strings s, t, posições i e j.<br />

Saída Uma sequência a1, a2, ax <strong>de</strong> operações executadas.<br />

1 PD−operações (P, s , t , i , j ):=<br />

2 case<br />

3 pi,j = −1 :<br />

4 return<br />

5 pi,j = 0 :<br />

6 PD−operações (s ,t ,i − 1 ,j − 1)<br />

7 p r i n t ( ’M’ )<br />

8 pi,j = 1 :<br />

9 PD−operações (s ,t ,i ,j − 1)<br />

10 p r i n t ( ’ I ’ )<br />

11 pi,j = 2 :<br />

12 PD−operações (s ,t ,i − 1 ,j )<br />

13 p r i n t ( ’D’ )<br />

14 end case<br />

107

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!