2016-12-12 15 views
0

数字のリストをnバケットに分割したいと考えています。私はこのトリックをたくさん見てきました:モジュレーションバケット(分割、分割)

bucket_index(x) = x mod n_buckets

私はしかし、このトリックを説明する信頼できるソースを見つけることができません。名前はありますか?この技術の特徴と限界を知りたい。誰かが私を指すことができる参照を持っていますか?

答えて

0

これは基本的にハッシュテーブルで、バケットIDは要素のハッシュ値です。あなたは、ハッシュ関数についての詳細を読むことができます:https://en.wikipedia.org/wiki/Hash_function

あなたのケースではbucket_index(x) = x mod n_bucketsは、いくつかのbucket_indexに要素xをマップするハッシュ関数です。

ハッシュ関数は、検索キーをインデックスにマッピングするために使用されます。インデックスは、対応するレコードが格納されるべき場所をハッシュテーブルに与える。ハッシュテーブルは、連想配列と動的セットを実装するために使用されます。

+0

この機能の制限について教えてください。それは常に数字の入力リストをバケットに均等に配布しますか? – joshlk

+0

ハッシュ衝突の詳細については、http://www.cs.princeton.edu/~rs/AlgsDS07/10Hashing.pdfを参照してください。それは均等な分布を提供しません。それは本当に関数に依存します。あなたの例題 'n mod n_buckets'と' n_buckets = 3'を見てみましょう。入力リストが「1,4,7,10,13,16」である場合、すべての要素は同じバケット、すなわち「1」に属する。ただし、ユースケースに応じて異なるハッシュ関数を選択できます。通常、要素が均等に分散されている場合、バケットの分布は均一になります。 –