Diff
“-d”選項對diff有什麼影響?
OpenBSD 上的實現具有以下文件
diff
的非標準選項:-d
-d
非常努力地產生盡可能小的差異。在處理具有許多更改的大型文件時,這可能會消耗大量的處理能力和記憶體。
GNU
diff
實現與較短的文件具有相同的選項
-d
,--minimal
努力尋找更小的變化
有時我使用此選項只是為了查看它是否生成與
diff
沒有該選項的同一命令不同的任何形狀或形式的輸出,但我從未看到任何差異(沒有雙關語)。有人可以提供或指出一個範例,其中此選項實際上會從同一命令產生不同的結果,而無需
-d
? 或者,如果有人可以解釋啟用此選項所需的情況。我也不確定“最小”是指“更少的輸出行”還是“更少的大塊”。一個未經教育的猜測是它與非常大的帥哥有關。
diff
在也用於 FreeBSD 的GNU中,該--minimal
標誌觸發了 Paul Eggert 的算法變體,導致它“將成本限制在O(N**1.5 log N)
為具有差異的大輸入產生次優輸出的代價”。更具體地說,它導致它不應用幾種啟發式方法,這些啟發式方法僅用於尋找接近最佳解決方案,並丟棄“令人困惑”的行作為額外的差異。
diff
在使用 1970 年代較舊的 Unix算法的OpenBSD中,所採用的diff
算法歸功於 Harold Stone,並且該--minimal
標誌觸發的搜尋(實際上是非)由無符號整數的最大值而不是平方根限制被比較的行範圍的大小(如果更大,則為 256)。進一步閱讀
- Eugene W. Myers(1986 年 11 月)。“ O(ND) 差分算法及其變體”。算法。第 1 卷。第 1-4 期。第 251-266 頁。DOI 10.1007/BF01840446。
- JW Hunt 和 MD McIlroy(1976 年 6 月)。“差分文件比較算法”。報告 41。計算科學。貝爾實驗室。
- 理查德·哈特曼 (1988-01-13)。 Unix diff(1) 算法。23225@cca.CCA.COM。comp.unix.questions。
- https://github.com/openbsd/src/blob/d1e24f318523607c98dc6fbe5a06a5d9e5c87293/usr.bin/diff/diffreg.c#L93
- https://github.com/freebsd/freebsd/blob/40ec4fdc9a74bfdb83f13672acdb88af5c91ab46/contrib/diff/src/analyze.c#L23
- 全面回顧 diff 算法、它們的歷史和實現