私はハッシュの問題に苦労している同僚を持っています。17文字のキーを4バイトにハッシュ値
17バイトの英数字キー(VINコード)があり、4バイトの値に変換する必要があります(英数字でも可)。これらの4バイトが鍵の数を制限することを知っていれば、この問題に対してどのような完璧なハッシュアルゴリズムが見えますか?
私はハッシュの問題に苦労している同僚を持っています。17文字のキーを4バイトにハッシュ値
17バイトの英数字キー(VINコード)があり、4バイトの値に変換する必要があります(英数字でも可)。これらの4バイトが鍵の数を制限することを知っていれば、この問題に対してどのような完璧なハッシュアルゴリズムが見えますか?
Wikipediaを見てから、最初にキーを圧縮することができたと思います。つまり、ハッシュを2段階で行うことができます。
ステージ1:標準に従って個々の部分にキーを分割し、個別にハッシュをカスタマイズします。
ステージ2:ハッシュを一緒にして、通常のハッシュを実行します。
ナイーブ例:あなたのデータは米国に限定されている場合は
、そこに最初の2バイトの唯一の27可能性があるので、最初の2つのバイトは0にハッシュすることができます - 26(私たちはa
を取得すると仮定
次に、他のバイトがN個の可能性を持ち、0 - N-1にハッシュできます。 (ここではb
が得られたとします)
結果はa * N + b
です。次に、通常のハッシュを行います(26 * N> 4バイトで表現できる場合)。
あなたの答えをありがとう、私は尋ねる前にそれについて考える時間がなかったのは申し訳ありませんが、はい、VIN番号に含まれる値に基づいて "手動"ハッシュを行う方が簡単です。私の悪い。 –
@ Vincent B.私はちょっと編集しました(あなたが返事をしたときに更新された回答が表示されない場合に備えて)。 –
あなたはハッシュ関数について話しているので、x0!= x1でf(x0)== f(x1)を持つことは問題ありません。
良いハッシュ関数は、均等に分散されたハッシュ値を持つ必要があります。 17桁の値を構成する4バイトのグループを追加し、残りの4バイトを最小の重みで保持するなどの方法で追加できます。
4バイトは実際にVINを4バイトに一意にエンコードしようとしている場合にのみキーを制限します。一意性が必要ですか? –
これは連鎖ハッシュに関するものですか? –
@Jon Skeet:はい、私は4バイトが制限されていることを知っています(ハッシュとなる可能性のあるキーの数が多い)。そして、一意性は本当に必要なものです。それが不可能でない限り、「ほぼ完璧なハッシュ」がうまくいくかもしれませんが、確かです。 –