ハッシュテーブルのどこに値を入れたいかに基づいてハッシュキーを生成する関数を作成しようとしています。ハッシュ関数をリバースエンジニアリングする方法
私のハッシュ関数は(a + b * (key)) % c = hash value
です。私はSOにこれにsimilar questionを見てきた、と私が試したことはd
でb * (key)
を交換し、ちょうどやっている:
private int ReverseModulus(int a, int b, int c, int hashValue)
{
if(hashValue >= c)
return -1;
if(a < hashValue)
return (hashValue - a)/b;
return (c + hashValue - a)/b;
}
が、それは時間hashValue != Hash(ReverseModulus(a,b,c, hashValue))
のほとんどと思われます。
アプローチが間違っているのか、コードにエラーがあるのか疑問に思っていました。
ハッシュは、設計上、一方向です。 – Servy
あなたは[Perfect Hash Function](https://en.wikipedia.org/wiki/Perfect_hash_function)を読んでみたいと思います –
私はキーとハッシュ値の間に1対1の関係はないと知っていますが、目的のハッシュ値を生成する無限の数の鍵から1つを取得します。たとえば、正しいハッシュ値が得られるまで、0以上の値を繰り返してbruteを強制することができます。 –