我正在尋找可用於生成整數流的批處理的散列函數。具體來說,我想要從一個集合或流(例如X
)映射整數xi
到另一組整數或字符串(如Y
),使許多xi
映射到一個yj
。雖然這樣做,我想確保有最多n
xi
映射到單個yj
。與哈希算法一樣,我需要能夠可靠地找到給定x
的y
。生成多對一映射的算法/散列函數
我想,以確保大部分yj
有接近n
一些xi
映射到它們(避免非常稀疏映射從X
到Y
)。我能想到的
一個功能是商:
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個元素)。
是否有任何標準的方法來產生這樣的映射(配料)
如何使用'modulo'操作作爲散列函數? – Josnidhin
modulo生成映射,該映射創建無限批處理大小,但有限數量的分區。我想要相反。有限的批量大小,對批次數量沒有限制 – aoak
對於流不能很好地工作,但是如果您將所有內容都讀入數組中,您可以對其進行排序並分批次製作n個索引。 – maraca