Distância de Levenshtein: da ideia à matriz
Definição. A distância de Levenshtein é o número mínimo de operações para transformar uma string noutra. Com os custos padrão, cada inserção, eliminação ou substituição custa 1. Não conta simplesmente as letras diferentes na mesma posição: procura a sequência mais económica de transformações.
pato → pratoAcrescentar «r»: custo 1.prato → patoRemover «r»: custo 1.gato → ratoTrocar «g» por «r»: custo 1.Exemplo do ficheiro: paypal.com → paypa1.com
Os dois domínios possuem 10 caracteres. As primeiras cinco letras paypa coincidem. Na sexta posição, o domínio de referência tem l (L minúsculo) e o domínio observado tem 1 (algarismo um). Basta uma substituição; a distância é 1.
Como preencher a matriz, célula por célula?
- Preparar. Escrevemos a origem nas linhas, o destino nas colunas, e acrescentamos uma posição vazia
∅em ambos. - Inicializar. Na primeira linha escrevemos
0,1,2…(inserções desde o vazio). Na primeira coluna escrevemos0,1,2…(eliminações). - Calcular. Para cada célula, calculamos três alternativas:
cima + 1(apagar),esquerda + 1(inserir),diagonal + custo(substituir se forem diferentes, manter se coincidirem). - Escolher. Guardamos o mínimo dos três custos. Um empate pode originar vários caminhos ótimos, mas a distância final será igual.
- Ler o resultado. O canto inferior direito indica o menor número de operações para transformar a palavra inteira.
D(i,j) = min[D(i−1,j)+1; D(i,j−1)+1; D(i−1,j−1)+c]c = 0 quando os caracteres coincidem; c = 1 quando são diferentes.“Construímos uma tabela de prefixos. Em cada célula comparamos três possibilidades e escolhemos o menor custo. Em paypal.com e paypa1.com, uma única substituição de «l» por «1» chega para tornar os textos iguais.”