A diff
implementação no OpenBSD possui uma -d
opção não padrão com a seguinte documentação:
-d
Tente muito difícil produzir um diff tão pequeno quanto possível. Isso pode consumir muito poder de processamento e memória ao processar arquivos grandes com muitas alterações.
A implementação GNU diff
tem a mesma opção com a documentação mais curta
-d
,--minimal
tente encontrar um conjunto menor de alterações
De vez em quando eu usei essa opção apenas para ver se ela gera uma saída que está em alguma forma ou formato diferente do mesmo diff
comando sem a opção, mas nunca vi nenhuma diferença (sem trocadilhos).
Alguém poderia fornecer ou apontar para um exemplo em que essa opção realmente produz um resultado diferente do mesmo comando sem -d
? Alternativamente, se alguém pudesse explicar as circunstâncias necessárias para esta opção entrar em ação. Também não tenho certeza se "mínimo" significa "menos linhas de saída" ou "menos pedaços".
Um palpite ignorante é que tem a ver com pedaços muito grandes.
No GNU
diff
, também usado no FreeBSD, o--minimal
sinalizador aciona uma variação do algoritmo de Paul Eggert que faz com que "limite o custo aoO(N**1.5 log N)
preço de produzir saída abaixo do ideal para grandes entradas com diferenças". Mais especificamente, faz com que não aplique várias heurísticas que tratam de encontrar soluções meramente próximas de ótimas e de descartar linhas "confusas" como diferenças extras.No OpenBSD
diff
, que usa o algoritmo Unix mais antigodiff
da década de 1970, o algoritmo empregado é creditado a Harold Stone, e o--minimal
sinalizador aciona uma pesquisa que é (efetivamente não) limitada pelo valor máximo de um inteiro sem sinal em vez da raiz quadrada do tamanho do intervalo de linhas que está sendo comparado (ou 256 se for maior).Leitura adicional