Micro-optimización para el cálculo de la distancia de edición: ¿es válido?

10

En Wikipedia , se proporciona una implementación para el esquema de programación dinámica ascendente para la distancia de edición. No sigue la definición completamente; Las células internas se calculan así:

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 puede ver, el algoritmo siempre elige el valor del vecino superior izquierdo si hay una coincidencia, guardando algunos accesos a la memoria, operaciones de ALU y comparaciones.

Sin embargo, la eliminación (o inserción) puede dar como resultado un valor menor , por lo tanto, el algoritmo es localmente incorrecto, es decir, rompe con el criterio de optimización. Pero tal vez el error no cambie el resultado final, podría cancelarse.

¿Es válida esta microoptimización y por qué (no)?

Rafael
fuente

Respuestas:

6

No creo que el algoritmo tenga fallas. Si dos cadenas coinciden, primero comparamos sus dos últimos caracteres (y luego recurse). Si son iguales, podemos unirlos para obtener una alineación óptima. Por ejemplo, considere las cadenas testy testat. Si no coincide con los dos últimos ts, uno de los ts permanece sin coincidir, ya que de lo contrario su coincidencia se vería así:

ingrese la descripción de la imagen aquí

Esto es imposible, ya que las flechas no pueden "cruzarse". La coincidencia tinduce varios insertos (cuadros verdes en la figura), como se muestra a la izquierda:

ingrese la descripción de la imagen aquí

Pero entonces simplemente puede encontrar una alineación igualmente buena, representada a la derecha. En ambos casos, coincide tcon ay tiene dos inserciones.

El argumento para una sustitución de uno de los últimos ts es el mismo. Entonces, si sustituye una de las últimas ts, puede combinar las dos últimas t y obtener una mejor alineación (vea la imagen).

ingrese la descripción de la imagen aquí

A.Schulz
fuente
Ah, un argumento de arriba hacia abajo para un problema de abajo hacia arriba. ¡Agradable!
Raphael