2017-11-05 6 views
0

特定の範囲内の整数を提供できるカスタムハッシュアルゴリズムを作成することは可能ですか?以下の例。カスタムハッシュアルゴリズム

(a、b)は、ハッシュへの入力です。 (a、b)!=(b、a) ここで、aとbは両方とも整数> = 0

解は、(min、max)の範囲内でなければなりません。

これは可能でしょうか?これで、(a、b)が同じ範囲を与えられている場合、同じ整数を提供する2つの機会にハッシュされることを望みます。

ありがとうございます。

+2

はい、もちろん可能です。なぜあなたは1つを書こうとしないのですか? –

+0

ここから開始することができます:[hashCode()](https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#hashCode()) (modal arithmetic)(https://en.wikipedia.org/wiki/Modular_arithmetic) – Marco

+0

(a、b)!=(b、a)を保証することは不可能です。ハッシュは衝突防止ではありません。 – shmosel

答えて

1

(a、b)は、ハッシュへの入力です。 (B)!=(B、A)AとBの両方 整数で> = 0

いいえ= B、次いで(A、B)=(B、A)と仮定する。この制約はハッシングの一貫性に反するため不可能です

+0

これは良い点だ。もし(a、b)が等価である場合を除いて(b、a)と等しくないと仮定すればどうなるでしょうか?あるいは、1つの状況でもそれが不可能になっているという事実が想定されますか? – Jamie

+0

@Jamieそれで可能です。しかし、すべてのa、bについて(a、b)!=(a、b)なら良いものを見つけるのは難しいだろう。一番簡単な解決法は単にa-bです。しかし、aとbがあるパターンを持っていれば、一様に分布しないかもしれないので、これは良いものではありません。最小、最大範囲の問題に対処するのは簡単です。あなたのハッシュhをmin + h%pに変換します。ここで、pは(max - min) – Will