具有已知最大项目数和固定密钥大小的高效固定大小“有损”哈希表

时间:2013-01-23 02:32:45

标签: c# .net hash hashtable

鉴于我将始终使用128位整数作为键,并且最大数量的元素,是否可以制作完美的散列函数?

我想将guid存储为键,我想要一个固定大小的无链接列表解决方案。也就是说,如果发生碰撞,我将失去第二个元素。

有人可以推荐一个可以执行此操作的散列函数吗?

1 个答案:

答案 0 :(得分:0)

  

鉴于我将始终使用128位整数作为键,并且最大数量的元素,是否可以制作完美的散列函数?

如果密钥的熵(变量中包含的信息的期望值)大于散列的结果可以容纳的 - 答案是否定的。 如果密钥的熵等于或低于散列的结果可以容纳的 - 答案是肯定的。

这意味着如果您的散列函数例如生成16位结果(65536个可能的值)并且您的128个键变量可以假定最多65536个或更少的不同值(因此128位密钥的熵是最多10位)比存在这样的散列函数。另一方面,如果您的密钥可以假设超过65535个不同的值,则无法将其散列为65535或更少的桶。

  

有人可以推荐一个可以执行此操作的散列函数吗?

在不知道密钥可以假设的可能值的情况下,即使您知道密钥熵太低而无法完成,也无法为您提供可以执行此操作的散列函数。