Apa efek yang dimiliki opsi "-d" dengan diff?

24

The diffimplementasi pada OpenBSD memiliki non-standar -dpilihan dengan dokumentasi berikut:

-d

Berusaha sangat keras untuk menghasilkan diff sekecil mungkin. Ini mungkin menghabiskan banyak daya pemrosesan dan memori saat memproses file besar dengan banyak perubahan.

diffImplementasi GNU memiliki opsi yang sama dengan dokumentasi yang lebih pendek

-d, --minimal

berusaha keras untuk menemukan set perubahan yang lebih kecil

Dari waktu ke waktu saya telah menggunakan opsi ini hanya untuk melihat apakah ia menghasilkan output dalam bentuk apa pun atau bentuk yang berbeda dari diffperintah yang sama tanpa opsi, tetapi saya belum pernah melihat perbedaan (tidak ada kata pun dimaksudkan).

Bisakah seseorang memberikan atau menunjuk contoh di mana opsi ini benar-benar menghasilkan hasil yang berbeda dari perintah yang sama tanpa -d? Atau, jika seseorang dapat menjelaskan keadaan yang diperlukan untuk opsi ini untuk menendang. Saya juga tidak yakin apakah "minimal" berarti "lebih sedikit garis keluaran" atau "lebih sedikit bakhil".

Dugaan tidak berpendidikan adalah bahwa hal itu berkaitan dengan bakhil yang sangat besar.

Kusalananda
sumber
1
unix.stackexchange.com/questions/472528 menggelitik keingintahuan Anda melakukannya? (-:
JdeBP
@ JdeBP Ya, tentu saja. Itu mengingatkan saya tentang bendera ini dan fakta bahwa saya tidak tahu apa yang dilakukannya karena saya belum pernah melihatnya melakukan apa pun.
Kusalananda
1
info diff performancemenjelaskannya IIRC
Stéphane Chazelas
1
Jelas terkait . Sayangnya tidak ada contoh myers -> hasil minimal.
Isaac
1
Saya benar-benar ingin mendapatkan contoh yang akan membuat keluaran berbeda dengan gdiff -duntuk memeriksa apakah penambahan pada OpenBSD bermanfaat. Dari pengujian saya, saya tidak bisa mendapatkan perbedaan tetapi jelas bahwa kode OpenBSD memperlambat kinerja yang terlihat seperti dampak yang signifikan, karena Algoritma diff dari Douglas McIlroy lebih cepat daripada gdiff selama Anda menggunakan ukuran file normal.
schily

Jawaban:

15

Dalam GNU diff, juga digunakan pada FreeBSD, --minimalbendera memicu variasi algoritma oleh Paul Eggert yang menyebabkannya "membatasi biaya dengan O(N**1.5 log N)harga menghasilkan output suboptimal untuk input besar dengan perbedaan". Lebih khusus, itu menyebabkannya tidak menerapkan beberapa heuristik yang berurusan dalam menemukan hanya dekat dengan solusi optimal dan dalam membuang garis "membingungkan" sebagai perbedaan ekstra.

Dalam OpenBSD diff, yang menggunakan lebih tua Unix diffalgoritma dari tahun 1970-an, algoritma yang digunakan dikreditkan ke Harold Stone, dan para --minimalbendera memicu pencarian yang (efektif un-) dibatasi oleh nilai maksimum unsigned integer bukan oleh akar kuadrat dari ukuran rentang garis yang dibandingkan (atau 256 jika lebih besar).

Bacaan lebih lanjut

JdeBP
sumber
1
Ketika saya membuat perbedaan yang lebih baik dari sumber UNIX, saya memeriksa peningkatan OpenBSD dan tidak dapat menemukan hasil yang lebih baik. Perhatikan bahwa fungsi batu asli () menggunakan: `} while ((y = b [++ j])> 0);` dan BTW: untuk ukuran file normal, peningkatan UNIX saya lebih cepat daripada perbedaan GNU.
schily