2009-05-29 19 views

答えて

5

ここでは、the paperは、UNIXコマンドラインツールdiffの基礎となっています。

4

実際はかなりシンプルです。ほとんどの場合、DIFFプログラムはLongest Common Sequenceに基づいており、これはグラフアルゴリズムを使用して解決することができます。

This web pageは、C#で実装例を示します。

4

これは複雑な質問です。 diffを実行すると、2つのファイル間の最小編集距離を見つけることができます。つまり、あるファイルを別のファイルに変換するために必要な変更の最小回数です。これは、2つのファイルの間で最も長い共通部分列を見つけることに相当します。これは、さまざまなdiffプログラムの基礎となります。最長共通部分列問題はよく知られており、Googleで動的プログラミングソリューションを見つけることができるはずです。

ダイナミックプログラミングアプローチの問題は、それがO(n^2)だということです。したがって、大きなファイルでは非常に遅く、大きなバイナリ文字列では使用できません。 diffプログラムを書くことの難しい部分は、問題のあるドメインのアルゴリズムを最適化して、妥当なパフォーマンス(そして妥当な結果)を得ることです。 HuntとMcIlroyによる "Differential File Comparisonのためのアルゴリズム"という論文は、Unix diffユーティリティの初期のバージョンをよく説明しています。

+0

差異化するファイルは10〜50行という非常に小さいので、アルゴリズムの速度は問題にはなりません。 – scottm

+0

そして、クリストはそれをO(ND)に減らす論文をすでに述べている。 – beef2k

4

ライブラリがあります。ここには次のものがあります。http://code.google.com/p/google-diff-match-patch/

StackOverflowは比較のためにBeyond Compareを使用します。私はコマンドラインからBeyond Compareを呼び出すことによって動作すると信じています。

関連する問題