diff
Realizacja w OpenBSD ma niestandardową -d
opcję z następującej dokumentacji:
-d
Staraj się bardzo ciężko wyprodukować różnicę tak małą, jak to możliwe. Może to zużywać dużo mocy obliczeniowej i pamięci podczas przetwarzania dużych plików z wieloma zmianami.
diff
Implementacja GNU ma tę samą opcję z krótszą dokumentacją
-d
,--minimal
staraj się znaleźć mniejszy zestaw zmian
Od czasu do czasu korzystałem z tej opcji, aby sprawdzić, czy generuje dane wyjściowe, które są w dowolnym kształcie lub w innej formie niż to samo diff
polecenie bez opcji, ale nigdy nie widziałem żadnej różnicy (nie ma zamiaru grać słów).
Czy ktoś może podać lub wskazać przykład, w którym ta opcja faktycznie daje inny wynik niż to samo polecenie bez -d
? Alternatywnie, jeśli ktoś mógłby wyjaśnić okoliczności wymagane do uruchomienia tej opcji. Nie jestem również pewien, czy „minimalny” oznacza „mniej linii wyjściowych” czy „mniej kawałków”.
Niewykształcone przypuszczenie, że ma to związek z bardzo dużymi kawałkami mięsa.
info diff performance
wyjaśnia to IIRCgdiff -d
, aby sprawdzić, czy dodatki do OpenBSD są przydatne. Z moich testów nie mogłem dostrzec żadnych różnic, ale oczywiste jest, że kod OpenBSD spowalnia wydajność, co wygląda na znaczący wpływ, ponieważ algorytm różnicowy z Douglasa McIlroya jest szybszy niż gdiff, o ile używasz normalnych rozmiarów plików.Odpowiedzi:
W GNU
diff
, również używanym we FreeBSD,--minimal
flaga wyzwala wariację algorytmu Paula Eggerta, która powoduje, że „ogranicza koszt doO(N**1.5 log N)
ceny produkcji nieoptymalnej wydajności dla dużych nakładów z różnicami”. Mówiąc dokładniej, powoduje to, że nie stosuje on kilku heurystyk, które zajmują się znajdowaniem zaledwie zbliżonych do optymalnych rozwiązań i wyrzucaniem „mylących” linii jako dodatkowych różnic.OpenBSD
diff
, w którym stosuje się starsze Unixdiff
algorytm z 1970, algorytm stosowany jest kredytowany Harold Stone'a flaga powoduje wyszukiwania, który jest skuteczny (UN) ograniczony przez wartość maksymalnie liczba całkowita bez znaku, a nie przez pierwiastek kwadratowy wielkości zakresu porównywanych linii (lub 256, jeśli jest większa).--minimal
Dalsza lektura
źródło