13.04.2013 Views

Algoritmos e complexidade Notas de aula - Arquivo Escolar

Algoritmos e complexidade Notas de aula - Arquivo Escolar

Algoritmos e complexidade Notas de aula - Arquivo Escolar

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

5. Programação dinâmica<br />

5.2.2. Similarida<strong>de</strong> entre strings<br />

Consi<strong>de</strong>re o problema <strong>de</strong> <strong>de</strong>terminar o número mínimo <strong>de</strong> operações que transformam<br />

um string s em um string t, se as operações permitidas são a inserção<br />

<strong>de</strong> um caracter, a <strong>de</strong>leção <strong>de</strong> um caracter ou a substituição <strong>de</strong> um caracter<br />

para um outro. O problema po<strong>de</strong> ser visto como um alinhamento <strong>de</strong> dois<br />

strings da forma<br />

sonhar<br />

vo--ar<br />

em que cada coluna com um caracter diferente (inclusive a “falta” <strong>de</strong> um caracter<br />

-) tem custo 1 (uma coluna (a, −) correspon<strong>de</strong> à uma <strong>de</strong>leção no primeiro<br />

ou uma inserção no segundo string, etc.). Esse problema tem subestrutura<br />

ótima: Uma solução ótima contém uma solução ótima do subproblema sem<br />

a última coluna, senão po<strong>de</strong>mos obter uma solução <strong>de</strong> menor custo. Existem<br />

quatro casos possíveis para a última coluna:<br />

<br />

a<br />

;<br />

−<br />

<br />

−<br />

;<br />

a<br />

<br />

a<br />

<br />

;<br />

a<br />

<br />

a<br />

<br />

b<br />

com caracteres a, b diferentes. O caso (a, a) somente se aplica, se os últimos<br />

caracteres são iguais, o caso (a, b) somente, se eles são diferentes. Portanto,<br />

consi<strong>de</strong>rando todos casos possíveis fornece uma solução ótima:<br />

d(s, t) =<br />

<br />

max(|s|, |t|) se |s |= 0 ou |t |= 0<br />

min(d(s ′ , t) + 1, d(s, t ′ ) + 1, d(s ′ , t ′ ) + [c1 = c2]) se s = s ′ c1 e t = t ′ c2<br />

Essa distância está conhecida como distância <strong>de</strong> Levenshtein [48]. Uma implementação<br />

direta é<br />

Distância <strong>de</strong> Edição<br />

Algoritmo 5.4 (Distância)<br />

Entrada Dois strings s, t e seus respectivos tamanhos n e m medidos em<br />

número <strong>de</strong> caracteres.<br />

104<br />

Saída A distância mínima entre s e t.

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

Saved successfully!

Ooh no, something went wrong!