¿Qué estructuras de datos / algoritmos de coincidencia usa vimdiff?

Las diferencias son parte del problema de subsecuencia común más largo (http://en.wikipedia.org/wiki/Lon…). Este es un problema difícil de NP que básicamente trata de encontrar secuencias continuas en datos arbitrarios, es decir, muchos archivos fuente / secuencia de disparos de ADN.

Sin embargo, diffs solo opera en 2 secuencias, lo que reduce la complejidad de la búsqueda a O (m * n), siendo m / n la longitud de los archivos (gracias a Peter Scott).

Estoy bastante seguro de que vimdiff usa la herramienta de diferencias estándar (http://en.wikipedia.org/wiki/Dif…) para atacar este problema:

Esto solo funciona cuando un comando estándar “diff” está disponible. Ver ‘diffexpr’.

Fuente: http://vimdoc.sourceforge.net/ht…

En sistemas basados ​​en Unix, Vim debería funcionar sin problemas porque debería haber un programa de diferencias “estándar” disponible

Fuente: http://vim.wikia.com/wiki/Runnin…

Diff utiliza principalmente el algoritmo descrito en el documento, Algoritmo de diferencia An O (ND) y sus variaciones (http://www.xmailserver.org/diff2…), que se encuentra en http://stackoverflow.com/questio….

Se incluyen otras referencias en el código fuente que se encuentra aquí http://ftp.gnu.org/gnu/diffutils/:

El algoritmo básico se describe en “Un algoritmo de diferencia O (ND) y sus variaciones”, Eugene W. Myers, ‘Algorithmica’ Vol. 1 No. 2, 1986, págs. 251-266; y en “Un programa de comparación de archivos”, Webb Miller y Eugene W. Myers, “Software – Practice and Experience” vol. 15 No. 11, 1985, págs. 1025-1040. El algoritmo se descubrió independientemente como se describe en “Algoritmos para la coincidencia aproximada de cadenas”, E. Ukkonen, “Información y control” vol. 64, 1985, págs. 100-118.

El código para varios idiomas se puede encontrar en http://code.google.com/p/google-…

Más discusión aquí: http://c2.com/cgi/wiki?DiffAlgor…