5

ファイルが変更された場合にファイルのどの部分が変更されたかを判断できるように、ファイルのハッシュを作成したいと考えています。問題は、バイトが削除または追加されると、後続のすべてのハッシュも変更されるため、すべてのハッシュをバイトごとに反復処理する必要があることです。ただし、これはコストがかかる可能性があるため、ハッシュ全体を最初から最後まで再計算する必要がなく、1 バイトを元に戻してから別のバイトを追加できるハッシュを探しています。

擬似コード:

文字列 getFileDiffHash(ファイル){
    文字列結果 = "";
    それぞれ (ファイル内の 512 バイト){
        結果 += ハッシュ (バイト);
    }
}

文字列 getFileDiff(ファイル、diffHash){
    文字列結果 = "";
    for each (hash size bytes in diffHash){ //はい、これは理想的にはハッシュ テーブルにありますが、これは疑似コードです
        string current_hash = "";
        for (i = 0; i < file_size(ファイル); i++){
            if (current_hash.size > hash_size){
                current_hash = undo_hash(current_hash, file[i-hash_size]);
            }
            current_hash = add_hash(current_hash, file[i]);
            if (current_hash.size == hash_size && bytes == current_hash){
                結果 += "+"+diffHash+":"+i;
            }
        }
    }
    結果を返します。
}

「undo_hash」と「add_hash」に適したハッシュの種類について何か考えはありますか?

4

2 に答える 2