La diff
implementación en OpenBSD tiene una -d
opción no estándar con la siguiente documentación:
-d
Esfuércese por producir una diferencia lo más pequeña posible. Esto puede consumir mucha potencia de procesamiento y memoria al procesar archivos grandes con muchos cambios.
La diff
implementación de GNU tiene la misma opción con la documentación más corta
-d
,--minimal
esforzarse por encontrar un conjunto más pequeño de cambios
De vez en cuando he usado esta opción solo para ver si genera resultados que tienen cualquier forma o forma diferente del mismo diff
comando sin la opción, pero nunca he visto ninguna diferencia (sin juego de palabras).
¿Podría alguien proporcionar o señalar un ejemplo en el que esta opción realmente produzca un resultado diferente del mismo comando sin él -d
? Alternativamente, si alguien pudiera explicar las circunstancias requeridas para que esta opción funcione. Tampoco estoy seguro de si "mínimo" significa "menos líneas de salida" o "menos trozos".
Una suposición sin educación es que tiene que ver con trozos muy grandes.
info diff performance
lo explica IIRCgdiff -d
para verificar si las adiciones a OpenBSD son útiles. De mis pruebas, no pude obtener ninguna diferencia, pero es obvio que el código de OpenBSD ralentiza el rendimiento, lo que parece un impacto significativo, ya que el Algoritmo de diferencia de Douglas McIlroy es más rápido que gdiff siempre que use tamaños de archivo normales.Respuestas:
En GNU
diff
, también utilizado en FreeBSD, el--minimal
indicador desencadena una variación del algoritmo por Paul Eggert que hace que "limite el costo alO(N**1.5 log N)
precio de producir una producción subóptima para entradas grandes con diferencias". Más específicamente, hace que no aplique varias heurísticas que tratan de encontrar soluciones meramente cercanas a las óptimas y de descartar líneas "confusas" como diferencias adicionales.En OpenBSD
diff
, que utiliza el antiguodiff
algoritmo de Unix de la década de 1970, el algoritmo empleado se acredita a Harold Stone, y el--minimal
indicador desencadena una búsqueda que está (efectivamente no) limitada por el valor máximo de un entero sin signo en lugar de por la raíz cuadrada del tamaño del rango de líneas que se compara (o 256 si es mayor).Otras lecturas
fuente