【发布时间】:2014-11-29 13:27:14
【问题描述】:
我需要将一个长度从 1 到 4 的最大排序整数映射到全局数组的索引。就像 [13,24,32] 成为 0..n 范围内的数字,并且没有其他数组映射到该相同数字。 数组的数量是几百万,并且映射必须是“唯一的”(或者至少对于较小的数组只有很少的冲突),因为这些数组表示项集,我使用 k-1 个较小的项集来构建尺寸 k。
我当前的实现使用了一个高效的散列函数,它为一个数组生成一个介于 0..1 之间的双精度数,我将项目集存储在 STL Map 中,双精度数作为键。从这篇文章中得到:
N。 D. Atreas, C. Karanikas “基于素数和散列近似的更快模式匹配算法”,2007 年
我将在 CUDA 中实现这个的并行版本,所以我不能使用像 STL Map 这样的东西。我可以轻松地为自己创建一个自平衡二叉搜索树作为 GPU 全局内存中的映射,但这会非常慢。所以为了尽量减少全局内存访问,我需要将项集映射到全局内存中的一个巨大的数组中。
我尝试将 double 转换为长整数并使用 64 位散列函数对其进行散列,但正如预期的那样,它会产生一些冲突。
所以,我问是否有一个“唯一”散列函数用于 0..1 之间的双精度数或大小为 1..4 的整数数组,它为大小为 N 的表提供唯一索引。
【问题讨论】:
-
但是我不需要提供输入来构建最小散列函数吗?我的数组会有所不同,它们是大小为 1 到 4 的单个项目数组的组合,它们也可以变化。
-
恐怕我对它们的了解并不多于名字。我预计为数百万个元素构建这样一个函数非常耗时(也许是不可能的),尽管我可能是错的。