1

それで、私は現在いくつかで遊んでいるので、ハッシュ関数に関するウィキペディアのページを読みました。そのページと私が読んだ他のソースの両方で、データの分布がハッシュ関数に影響を与えると述べています。

いくつかの説明にもかかわらず、これらの効果が正確に何であり、おそらくその理由はまだ不明です. だから私の質問:

  1. 私が正しいことを確認するために、彼らが分布について言及するとき、これは入力データセット内の各単語の頻度ですか?
  2. 入力データの分散はハッシュ関数にどのような影響を与えますか? 特に興味深いのは、ハッシュ アルゴリズムによって生成される出力の速度と均一性の両方に関するハッシュ関数のパフォーマンスです。

編集 1: 具体的には、ウィキペディアの英語コーパスと、より動的なソース (たとえば Twitter のツイート) からのデータとの比較について考えています。

4

1 に答える 1

2

通常、可能な入力と同じ数の入力データセットはありません。したがって、分布は、特定の機能を持つ特定の入力が選択されるという、より確率的なものです。(本質的にはあなたが言ったのと同じですが、カウントn> 1ではなく、すべての単語に対してp <1です)たとえば、入力の最初のビットが常に1になることがわかっている場合、データは均一に分散されません。

ハッシュが非常に単純な場合。最初のバイトのみを「ハッシュ」として取得すると、この不均一な分布により、予想よりも多くの衝突が発生します。(256 の異なる値を取得することを期待していたにもかかわらず、128 の値のみが可能です)

名前で知っているかもしれないほとんどの (暗号化された) ハッシュ関数は十分に優れているため、これを気にする必要はありません。暗号化の場合、これは明示的な条件でもあります。ハッシュの違いを見るだけで、入力の何ビットが変更されたかを判断できてはなりません。とはいえ、それが不可能だというわけではありません。ascii 文字と数字のみがハッシュされた場合に md5 の衝突率が増加したという論文を漠然と覚えています。私は今それを見つけることができないので、この情報を注意深く楽しんでください-しかし、何かを混乱させたとしても、そのようなシナリオは簡単に可能です. そして、それが md5 であるか他のアルゴリズムであるかに関係なく、実際にそのような関係がある場合、入力データセットの分布は再び関連性があります。

于 2013-02-14T16:31:25.870 に答える