Esa es una pregunta compleja. Realizar una diferencia significa encontrar la distancia de edición mínima entre los dos archivos. Es decir, la cantidad mínima de cambios que debe realizar para transformar un archivo en el otro. Esto es equivalente a encontrar la subsecuencia común más larga de líneas entre los dos archivos, y esta es la base de los diversos programas de diferencias. El problema de subsecuencia común más largo es bien conocido, y debería ser capaz de encontrar la solución de programación dinámica en google.
El problema con el enfoque de programación dinámica es que es O (n^2). Por lo tanto, es muy lento en archivos grandes e inutilizable para cadenas binarias grandes. La parte más difícil al escribir un programa de diferencias es optimizar el algoritmo para su dominio problemático, de modo que obtenga un rendimiento razonable (y resultados razonables). El documento "Un algoritmo para la comparación de archivos diferenciales" de Hunt y McIlroy ofrece una buena descripción de una versión temprana de la utilidad de diferencias de Unix.
Los archivos que voy a diferenciar son muy pequeños, de 10 a 50 líneas, por lo que la velocidad del algoritmo no es un problema. – scottm
Y Kristo ya mencionó un documento que lo reduce a O (ND). – beef2k