我需要將最大長度從1到4變化的排序整數數組映射到全局數組的索引。像[13,24,32]成爲範圍爲0..n的數字,並且沒有其他數組映射到相同的數字。 數組的數量是幾百萬,並且映射必須是「唯一的」(或者對於較小的數組來說至少幾乎沒有碰撞),因爲這些數組代表項目集,我使用k-1較小的項目集來構建一個大小爲k。哈希函數將int的唯一數組映射到範圍爲0..n的索引
我目前的實現使用了一個高效的散列函數,它爲一個數組產生一個0..1之間的雙精度值,並且我將項目集存儲在STL Map中,其中double作爲鍵。從這篇文章有:
ND Atreas,C. KARANIKAS「基於素數和散列逼近更快的模式匹配算法」,2007年
我要實現的這CUDA並行版本,所以我不能使用像STL Map這樣的東西。我可以在GPU全局內存中輕鬆創建一個自我平衡的二叉搜索樹,但這確實很慢。所以爲了將全局內存訪問降到最低,我需要將項目集映射到全局內存中的一個巨大數組。
我試着將double作爲長整型進行轉換,並將其與64位散列函數一起散列,但它會產生一些碰撞,如預期的那樣。
於是,我問,如果有一個爲0..1之間雙打「獨一無二」的哈希函數,或從大小1..4整數數組,給出了大小爲N的表中的唯一索引
您正在尋找[最小完美散列函數](http://en.wikipedia.org/wiki/Perfect_hash_function#Minimal_perfect_hash_function)。 – 2014-10-04 20:22:41
但是我不需要提供一個輸入來構建最小的哈希函數?我的數組會有所不同,它們是單個項目數組中的大小1到4的組合,這些數組也可能會有所不同。 – liwing 2014-10-04 21:15:11
恐怕我對它們的瞭解比名字更多。我希望爲數百萬個元素構建這樣一個功能非常耗時(也許不可能),儘管我可能是錯的。 – 2014-10-04 21:59:59