こんにちは仲間の統計学者、
ハッシュを生成するソース(たとえば、タイムスタンプとその他の情報を含む文字列を計算し、md5を使用してハッシュ化)があり、それを固定数のバケット(たとえば100)に投影したいと考えています。
サンプルハッシュ:0fb916f0b174c66fd35ef078d861a367
最初はハッシュの最初の文字のみを使用してバケットを選択することだと思っていましたが、これは非常に不均一な投影になります(つまり、一部の文字が非常にまれに表示され、他の文字が非常に頻繁に表示される)。
次に、このヘキサ文字列をchar値の合計を使用して整数に変換し、モジュロを使ってバケットを選択しようとしました。
import sys
for line in sys.stdin:
i = 0
for c in line:
i += ord(c)
print i%100
それは実際に機能しているようですが、これがなぜ、どの程度本当であるかを説明できる常識や理論上の結果があるかどうかはわかりません。
[編集]少し考えてから、次の結論に達しました。理論的には、ハッシュを数値として解釈することにより、(非常に大きな)整数に変換できます:i = h [0] + 16 * h [1] + 16 * 16 * h [2] ... + 16 ^ 31 * h [31](各文字は16進数を表します)。次に、この大きな数をモジュロしてバケットスペースに投影します。[/編集]
よろしくお願いします!