バイトごとに比較することは確かに機能します。しかし、他の証明された方法があるかどうか疑問に思っています。たとえば、ファイルごとに一意の値を出力するある種のハッシュなどです。もしあれば、時間とメモリフットプリントの観点から、それぞれの長所と短所は何ですか.
ところで、この前のスレッドを見つけましたファイルが同一かどうかを確認する最速の方法は何ですか? . ただし、私の質問は速度ではなく、代替案です。
お知らせ下さい。ありがとう。
バイトごとに比較することは確かに機能します。しかし、他の証明された方法があるかどうか疑問に思っています。たとえば、ファイルごとに一意の値を出力するある種のハッシュなどです。もしあれば、時間とメモリフットプリントの観点から、それぞれの長所と短所は何ですか.
ところで、この前のスレッドを見つけましたファイルが同一かどうかを確認する最速の方法は何ですか? . ただし、私の質問は速度ではなく、代替案です。
お知らせ下さい。ありがとう。
証明された唯一の方法は、バイトごとの比較を行うことです。これは最速の方法でもあり、一度に 1 バイトずつ読み取ると、メモリ使用量を 2 バイトまで削減できます。ただし、一度に大きなチャンクを読み取ると、パフォーマンスが向上します。
ハッシュも機能します。鳩の巣の原理により、誤検出が発生する可能性はわずかですが、SHA のような安全なハッシュを使用する場合、すべての意図と目的において無視できます。メモリ使用量も少ないですが、ハッシュのオーバーヘッドがあるため、パフォーマンスはバイトごとの比較よりも低くなります。ハッシュを再利用して複数の比較を行うことができない限り。
とにかく、ファイルの長さが n バイトの場合、n バイトを比較する必要があります。問題を簡単にすることはできません。
たとえば、長さをチェックすることによって、ファイルが同一でない場合にのみ、n回の比較で速度を上げることができます。
衝突のため、ハッシュは証明された方法ではありません。また、ハッシュを作成するには、各ファイルで n バイトを読み取る必要があります。
同じファイルを複数回比較したい場合は、ハッシュを使用してから、バイト単位で再確認してください。
ハッシュは「一意の」値を出力しません。異なるファイルは無数にありますが、ハッシュ値の数は有限であるため、そうすることができません。2 つのファイルが同じであることを完全に確認するには、両方のファイルのすべてのバイトを調べなければならないことは、あまり考えなくてもわかります。
ハッシュとチェックサムは、「これらのファイルは異なる」という迅速な回答を提供でき、特定の確率的境界内では、「これらのファイルはおそらく同じ」という迅速な回答を提供できますが、等しいかどうかを確認するには、すべてのバイトをチェックする必要があります。どうすればこれを回避できますか?
複数のファイルを比較する場合は、SHA-1ハッシュ アルゴリズムが最適です。