Micro-otimização para editar o cálculo da distância: é válido?

10

Na Wikipedia , é fornecida uma implementação para o esquema de programação dinâmica de baixo para cima para a distância de edição. Não segue a definição completamente; as células internas são calculadas assim:

if s[i] = t[j] then  
  d[i, j] := d[i-1, j-1]       // no operation required
else
  d[i, j] := minimum
             (
               d[i-1, j] + 1,  // a deletion
               d[i, j-1] + 1,  // an insertion
               d[i-1, j-1] + 1 // a substitution
             )
}

Como você pode ver, o algoritmo sempre escolhe o valor do vizinho superior esquerdo, se houver uma correspondência, economizando alguns acessos à memória, operações da ALU e comparações.

No entanto, a exclusão (ou inserção) pode resultar em um valor menor , portanto o algoritmo está localmente incorreto, ou seja, quebra com o critério de otimização. Mas talvez o erro não mude o resultado final - ele pode ser cancelado.

Essa micro-otimização é válida e por que (não)?

Rafael
fonte

Respostas:

6

Eu não acho que o algoritmo é falho. Se duas cadeias forem correspondidas, comparamos primeiro os dois últimos caracteres (e depois recorremos). Se forem iguais, podemos combiná-los para obter um alinhamento ideal. Por exemplo, considere as seqüências de caracteres teste testat. Se você não corresponder aos dois últimos ts, um deles tnão será correspondido, pois, caso contrário, sua correspondência seria assim:

insira a descrição da imagem aqui

Isso é impossível, pois as setas não podem "cruzar". A correspondência tinduz várias inserções (caixas verdes na figura), conforme ilustrado à esquerda:

insira a descrição da imagem aqui

Mas então você pode simplesmente encontrar um alinhamento igualmente bom, representado à direita. Nos dois casos, você corresponde a te possui duas inserções.

O argumento para a substituição de um dos últimos ts é o mesmo. Portanto, se você substituir um dos últimos ts, poderá combinar os dois últimos te conseguir um melhor alinhamento (veja a figura).

insira a descrição da imagem aqui

A.Schulz
fonte
Ah, um argumento de cima para baixo para um problema de baixo para cima. Agradável!
Raphael