commとdiffは入力/出力レベルで何を達成しようとしていますか?

commとdiffは入力/出力レベルで何を達成しようとしていますか?

2つのファイルが与えられたら、各ファイルの各行に対して実行する方法commそしてdiff決める

  • この行が他のファイルにも表示されますか?
  • もしそうなら、両方のファイルで同じように表示されますか、それとも別々に表示されますか?

各ファイルの行間の順序を考慮しますか?

diff「2つのファイルでは発生しますが別の行」または「1つのファイルでは発生しますが、別のファイルでは発生しません」を確認する方法は?

両方のファイルを減算するために両方が使用されている場合はcommどう違いますか?diff

ありがとうございます。

(一部の初等数学に興味がない場合は、以下を無視してください。上記は、私の質問に関する限り独立しています。)


私は推測する:

数学では、セットは要素間に順序を付けません。 (このようなセットをシーケンスセットと呼びますが、これは別の概念です)

  • 「S1〜S2」、すなわち、2つのセットS1とS2の差分セット演算は、第1セットの要素セットを生成するが、第2セットの要素セットは生成しない。

  • 両方のセットの交差点を見つけるときに要素が両方のセットで考慮される場合、各セット内でその要素が表示される場所は重要ではありません。

ファイルに違いを設定するなどの操作もあります。commcoreutilsからそしてdiffdiffutilsから。ただし、ファイルを行セットとして考えることはできませんが、行は自然に行番号でソートされるため、ソートされた行セットと考えることができます。

また、さまざまな方法で作業しますcommdiff

概念レベル(入力レベルと出力レベル)でそれぞれ実行されているタスクcommと実行したいタスクは何ですかdiff?数学的にも説明できれば、より明確になります(注文セットに関する基本的な知識が必要な場合があります)。実装レベルでは説明を期待していませんが、役に立ちます(一部のバージョン管理およびバックアップソフトウェアは増分コピーに同じまたは類似のアルゴリズムを使用します)。

ありがとうございます。

ベストアンサー1

ここに記載されているように。 https://en.m.wikipedia.org/wiki/Diff

「diff演算は、最も長い共通部分修飾問題を解くことに基づいています。」

コメントで指摘したように、わずかに異なるバリエーション(diff、gdiff、vimdiff、git-diff、rdiff-backupなど)を持ついくつかの実装があります。 LCS Wikiページには、あなたが要求した数学的な定義があります。 2つのソートされたセットからすべてのLCSを減算すると、その差が残りになります。

おすすめ記事