Che effetto ha l'opzione "-d" con diff?


24

L' diffimplementazione su OpenBSD ha -dun'opzione non standard con la seguente documentazione:

-d

Fai del tuo meglio per produrre un differenziale il più piccolo possibile. Ciò potrebbe consumare molta potenza di elaborazione e memoria durante l'elaborazione di file di grandi dimensioni con molte modifiche.

L' diffimplementazione GNU ha la stessa opzione con la documentazione più breve

-d, --minimal

fai del tuo meglio per trovare una serie più piccola di modifiche

Di tanto in tanto ho usato questa opzione solo per vedere se genera output che è in qualsiasi forma o forma diversa dallo stesso diffcomando senza l'opzione, ma non ho mai visto alcuna differenza (nessun gioco di parole previsto).

Qualcuno potrebbe fornire o indicare un esempio in cui questa opzione produce effettivamente un risultato diverso dallo stesso comando senza -d? In alternativa, se qualcuno potesse spiegare le circostanze necessarie per attivare questa opzione. Sono anche incerto se "minimo" significhi "meno righe di output" o "meno hunk".

Un'ipotesi non istruita è che abbia a che fare con pezzi molto grandi.


1
unix.stackexchange.com/questions/472528 ha suscitato la tua curiosità, vero? (-:
JdeBP,

@JdeBP Sì davvero. Mi ha ricordato questa bandiera e il fatto che semplicemente non so cosa fa dal momento che non l'ho mai visto fare nulla.
Kusalananda

1
info diff performancelo spiega IIRC
Stéphane Chazelas,

1
Chiaramente correlati . Purtroppo nessun esempio di myers -> risultati minimi.
Isaac,

1
Vorrei davvero fare un esempio che creerebbe un output diverso gdiff -dper verificare se le aggiunte a OpenBSD sono utili. Dai miei test, non sono riuscito a ottenere alcuna differenza, ma è ovvio che il codice OpenBSD rallenta le prestazioni che sembrano un impatto significativo, poiché l'algoritmo diff di Douglas McIlroy è più veloce di gdiff fintanto che si utilizzano file di dimensioni normali.
schily,

Risposte:


15

In GNU diff, usato anche su FreeBSD, il --minimalflag innesca una variazione dell'algoritmo di Paul Eggert che gli fa "limitare il costo O(N**1.5 log N)al prezzo di produzione di un output non ottimale per input di grandi dimensioni con differenze". Più in particolare, si induce a non applicare diverse euristiche che si occupano di trovare solo vicino a soluzioni ottimali e buttare fuori "confondendo" linee le differenze in più.

In OpenBSD diff, che utilizza l' diffalgoritmo Unix più vecchio degli anni '70, l'algoritmo impiegato viene accreditato su Harold Stone, e la --minimalbandiera innesca una ricerca che è (effettivamente non-) limitata dal valore massimo di un intero senza segno anziché dalla radice quadrata della dimensione dell'intervallo di linee da confrontare (o 256 se è maggiore).

Ulteriori letture


1
Quando ho creato una differenza migliore dalle fonti UNIX, ho controllato il miglioramento di OpenBSD e non sono riuscito a trovare risultati migliori. Nota che la funzione stone () originale usa: `} while ((y = b [++ j])> 0);` e BTW: per dimensioni file normali, il mio diff UNIX migliorato è più veloce del diff GNU.
schily,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.