Die diff
Implementierung unter OpenBSD bietet eine -d
Sonderoption mit der folgenden Dokumentation:
-d
Versuchen Sie sehr, ein möglichst kleines Diff zu erzeugen. Dies kann bei der Verarbeitung großer Dateien mit vielen Änderungen viel Rechenleistung und Speicherplatz verbrauchen.
Die GNU- diff
Implementierung hat dieselbe Option wie die kürzere Dokumentation
-d
,--minimal
bemühen Sie sich, eine kleinere Reihe von Änderungen zu finden
Von Zeit zu Zeit habe ich diese Option verwendet , nur um zu sehen , ob es eine Ausgabe generiert , die in irgendeiner Form anders aus derselben ist diff
ohne die Option Befehl, aber ich habe nie einen Unterschied (kein Wortspiel beabsichtigt) gesehen.
Könnte jemand ein Beispiel angeben oder auf ein Beispiel verweisen, bei dem diese Option tatsächlich ein anderes Ergebnis als derselbe Befehl erzeugt, ohne das dies der Fall ist -d
? Alternativ, wenn jemand die Umstände erläutern könnte, die für das Aktivieren dieser Option erforderlich sind. Ich bin mir auch nicht sicher, ob "minimal" "weniger Ausgabezeilen" oder "weniger Hunks" bedeutet.
Eine ungebildete Vermutung ist, dass es sich um sehr große Kerle handelt.
info diff performance
erklärt es IIRCgdiff -d
um zu prüfen, ob die Ergänzungen zu OpenBSD nützlich sind. Bei meinen Tests konnte ich keine Unterschiede feststellen, aber es ist offensichtlich, dass der OpenBSD-Code die Leistung verlangsamt, was sich erheblich auswirkt, da der diff-Algorithmus von Douglas McIlroy schneller ist als gdiff, solange Sie normale Dateigrößen verwenden.Antworten:
In GNU
diff
, das auch unter FreeBSD verwendet wird,--minimal
löst das Flag eine Algorithmusvariante von Paul Eggert aus, die "die KostenO(N**1.5 log N)
auf den Preis für die Erzeugung einer suboptimalen Ausgabe für große Eingaben mit Unterschieden beschränkt". Insbesondere werden dadurch nicht mehrere Heuristiken angewendet, bei denen es darum geht , nur annähernd optimale Lösungen zu finden und "verwirrende" Zeilen als zusätzliche Unterschiede auszublenden.In OpenBSD
diff
, das den älteren Unix-diff
Algorithmus aus den 1970er Jahren verwendet, wird der verwendete Algorithmus Harold Stone gutgeschrieben, und das--minimal
Flag löst eine Suche aus, die (praktisch) nicht durch die Quadratwurzel, sondern durch den Maximalwert einer vorzeichenlosen Ganzzahl begrenzt ist der Größe des zu vergleichenden Zeilenbereichs (oder 256, falls dieser größer ist).Weitere Lektüre
quelle