1

jenkinshash は、指定された値に対して整数 (2^32) を生成することを知っています。このリンクのドキュメント: http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/util/JenkinsHash.html

戻り値: 32 ビット値。キーのすべてのビットは、戻り値のすべてのビットに影響します。1 ビットまたは 2 ビット異なる 2 つのキーのハッシュ値はまったく異なります。

jenkinshash は、指定された値に対して最大 2^32 の異なる結果を返すことができます。2^32 を超える値がある場合はどうなりますか? 2 つの異なる値に対して同じ結果を返しますか?

ありがとう

4

1 に答える 1

2

ほとんどのハッシュ関数と同様に、はい、異なる入力データに対して重複したハッシュ値を返す場合があります。リンク先のドキュメントによると、保証は、1ビットまたは2ビットで異なる値が異なるということです。それらが3ビット以上異なるとすぐに、一意性の保証はありません。

ハッシュ関数への入力データは、ハッシュの出力よりもサイズが大きい (固有の入力値が多い) 場合があります。これにより、出力データに重複が存在する必要があります。範囲内の整数を出力するが、範囲内1-10の入力を受け取るハッシュ関数を考えてみましょう。10個の異なる整数のみを使用し1-100て値を列挙することはできないため、複数の値が同じ値にハッシュされなければならないことは明らかです。1-100これはピジョンホールの原理と呼ばれます。

ただし、優れたハッシュ関数は、出力値を均等に分散しようとします。この例では、適切なハッシュ関数が に とほぼ同じ回数を与えると期待1-10できます。26

一意性を保証するハッシュ関数は完全ハッシュ関数と呼ばれます。それらはすべて、少なくとも入力データと同じカーディナリティの出力データを提供します。入力整数の完全なハッシュ関数には1-100、少なくとも 100 の異なる出力値が必要です。

ウィキペディアによると、ジェンキンスのハッシュ関数は暗号化されていないことに注意してください。これは、パスワードのセキュリティなどのためにそれらを避けるべきであることを意味しますが、作業の分散とチェックサムをある程度均一にするためにハッシュを使用できます。

于 2013-04-19T14:08:13.513 に答える