整数ストリームからバッチを生成するために使用できるハッシュ関数を探しています。具体的には、多くのxi
が1つのyj
にマッピングされるように、整数または文字列のセット(例:Y
)に、整数またはをセットまたはストリーム(たとえばX
)からマッピングする必要があります。その際、最大n
xi
が1つのyj
にマッピングされていることを確認したいと思います。ハッシュの場合と同様に、を指定してy
を確実に見つける必要があります。多対1のマッピングを生成するためのアルゴリズム/ハッシュ関数
私はyj
のほとんどは(X
からY
に非常にまばらなマッピングを回避するため)、それらにマッピングされxi
のn
数に近いを持っていることを確認したいと思います。私は考えることができる
一つの機能は商である:
int BATCH_SIZE = 3;
public int map(int x) {
return x/BATCH_SIZE;
}
シーケンシャル整数のストリームのための、それはかなりうまく動作することができます。例えばストリーム1.9は
1 -> 0
2 -> 0
3 -> 1
4 -> 1
5 -> 1
6 -> 2
7 -> 2
8 -> 2
9 -> 3
などにマップされます。しかし、順不同の大きな整数と小さなバッチサイズ(私の使用例)では、これはスーパースパースマッピングを生成する可能性があります(各バッチはたいてい1つの要素しか持たない)。
は、このようなマッピング(バッチ処理)
「モジュロ」演算をハッシュ関数として使用する方法はありますか? – Josnidhin
モジュロは、無制限のバッチサイズを作成するマッピングを生成しますが、バインドされた数のパーティションは生成しません。私は反対をしたい。バインドされたバッチサイズ、バッチ数に制限はありません – aoak
ストリームではうまくいきませんが、すべてを配列に読み込むと、それをソートしてn個のインデックスのバッチを作成できます。 – maraca