OpenBSD での実装には、次のドキュメントとともに標準以外のdiff
オプションがあります。-d
-d
できるだけ小さな違いを作ってみてください。これは、多くの変更を含む大容量ファイルを扱うときに多くの処理能力とメモリを消費する可能性があります。
GNUdiff
実装には同じオプションがありますが、ドキュメントは短くなります。
-d
、--minimal
小さな変更を見つけてください。
diff
場合によっては、オプションなしで同じコマンドを実行したときとは異なる形状や形式の出力が生成されることを確認するためにこのオプションを使用します。いいえ違いはありません(慌てた意図はありません)。
誰かがこのオプションが実際に望ましくない同じコマンドから別の結果を生成する例を提供または指摘できますか-d
?または、誰かがこのオプションを開始するために必要なものを説明できる場合。また、「最小」が「出力行数が少ない」か「塊数が少ない」を意味するのかわからない。
未確認の推測の1つは、それが非常に大きな塊に関連しているということです。
答え1
GNU diff
(FreeBSDでも使用されています)では、このフラグはPaul Eggertアルゴリズムのバリエーションを実行し、「差のある大規模入力に対してレーンの出力を生成するコストを制限する」ことを可能に--minimal
します。O(N**1.5 log N)
より具体的には、次のような結果が表示されます。いいえいくつかのヒューリスティックを適用して、以下を見つけます。閉鎖最良の解決策を見つけ、さらに違いで「混乱している」行を削除します。
OpenBSDでは、Harold Stoneのアルゴリズムを使用するdiff
1970年代の古いUnixアルゴリズムを使用しています。diff
--minimal
旗比較される行範囲のサイズ(または大きい場合は256)の平方根ではなく、符号なし整数の最大値に制限される(実際にはそうではない)検索をトリガーします。
追加読書
- ユージンW.マイヤーズ(1986年11月)。 」O(ND)差アルゴリズムとその変形」。演算。 1巻。問題1-4。 251〜266ページ。ドイ10.1007/BF01840446。
- JW HunterとMD McIlroy(1976年6月)。 」差分ファイル比較アルゴリズムレポート 41.計算科学。ベル研究所。
- リチャード・ハートマン(1988-01-13)。 Unix diff(1) アルゴリズム。 [Eメール保護]。 comp.unix.problem.
- 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アルゴリズム、その歴史と実装の包括的なレビュー