この質問にさらに:ファイルのアイデンティティを決定するためのアルゴリズム
要約: ほとんどの場合に機能するファイル ID を判別するための安価なアルゴリズムを探しています。
私は先に進み、ファイルごとに「非常にユニークな」ハッシュを提供するアルゴリズムを実装しました。
私のアルゴリズムの仕組みは次のとおりです。
特定のしきい値より小さいファイルの場合、ID ハッシュに完全なファイル コンテンツを使用します。
しきい値より大きいファイルの場合、X サイズのランダムな N 個のサンプルを取得します。
ハッシュ化されたデータにファイルサイズを含めます。(サイズが異なるすべてのファイルが異なるハッシュになることを意味します)
質問:
N と X にどの値を選択する必要がありますか (どのサイズのランダム サンプルをいくつ取得する必要がありますか?)、それぞれ 8K の 4 つのサンプルを使用しましたが、アルゴリズムを切り詰めることができません。サンプルの量を増やすと、アルゴリズムの速度が急速に低下することがわかりました (シークはかなりコストがかかるため)。
数学の問題: このアルゴリズムが爆発するためには、ファイルがどれだけ変わらない必要があるか。(同じ長さの 2 つの異なるファイルは、同じハッシュを持つことになります)
最適化の 1: 具体的な実装を最適化してスループットを向上させる方法はありますか (私のシステムでは 1 秒あたり約 100 ファイルを処理できるようです)。
この実装は正常に見えますか? これが失敗する実世界の例を考えてみてください。(私の焦点はメディアファイルです)
関連情報:
ご協力いただきありがとうございます!