「-d」オプションは、diffでどのような効果がありますか?


24

diffOpenBSD の実装には-d、次のドキュメントを含む非標準オプションがあります。

-d

可能な限り小さいdiffを作成するように非常に努力してください。これは、多くの変更を伴う大きなファイルを処理するときに、多くの処理能力とメモリを消費する場合があります。

GNU diff実装には、より短いドキュメントで同じオプションがあります

-d--minimal

変更の小さなセットを見つけるために一生懸命

時々、このオプションを使用して、オプションdiffなしの同じコマンドとは異なる形状または形式の出力を生成するかどうかを確認するだけでしたが、違いを見たことはありません(しゃれはありません)。

誰かがこのオプションを使用せずに同じコマンドから異なる結果を実際に生成する例を提供または指摘できます-dか?または、このオプションを開始するために必要な状況を誰かが説明できるとしたら、「最小」が「出力の行数が少ない」か「ハンクが少ない」かどうかもわかりません。

無知な推測は、それが非常に大きな塊に関係しているということです。


1
unix.stackexchange.com/questions/472528は好奇心をそそりましたか?(-:
JdeBP

@JdeBPはい、確かに。このフラグと、何もしないのを見たことがないので、何をするのかわからないという事実を思い出させました。
クサラナナンダ

1
info diff performanceIIRC
StéphaneChazelasの

1
明らかに関連している。悲しいことに、マイヤーの例はありません->最小限の結果。
アイザック

1
gdiff -dOpenBSDへの追加が有用かどうかを確認するために、異なる出力を作成する例を実際に取得したいと思います。私のテストからは、違いを得ることができませんでしたが、通常のファイルサイズを使用している限り、ダグラスマキロイのdiffアルゴリズムはgdiffよりも高速であるため、OpenBSDコードはパフォーマンスに重大な影響を与えるように見えます。
18年

回答:


15

またdiff、FreeBSDで使用されるGNU では、この--minimalフラグは、Paul Eggertによるアルゴリズムのバリエーションをトリガーし、O(N**1.5 log N)「差異のある大きな入力に対して最適ではない出力を生成する代償としてコストを制限します」。より具体的には、最適なソリューションに単に近いものを見つけ、余分な違いとして「混乱する」行を除外することに対処するいくつかのヒューリスティックを適用しないようにします。

1970年代のdiff古いUnix diffアルゴリズムを使用するOpenBSD では、採用されたアルゴリズムはHarold Stoneに帰属し--minimalフラグは平方根ではなく符号なし整数の最大値によって(事実上)制限された検索をトリガーします比較される行の範囲のサイズ(または大きい場合は256)。

参考文献


1
UNIXソースからより良いdiffを作成したとき、OpenBSDの機能強化をチェックしましたが、より良い結果を見つけることができませんでした。元のstone()関数は次を使用することに注意してください: `} while((y = b [++ j])> 0);`およびBTW:通常のファイルサイズでは、拡張UNIX diffはGNU diffより高速です。
18年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.