鉴于我将始终使用128位整数作为键,并且最大数量的元素,是否可以制作完美的散列函数?
我想将guid存储为键,我想要一个固定大小的无链接列表解决方案。也就是说,如果发生碰撞,我将失去第二个元素。
有人可以推荐一个可以执行此操作的散列函数吗?
答案 0 :(得分:0)
鉴于我将始终使用128位整数作为键,并且最大数量的元素,是否可以制作完美的散列函数?
如果密钥的熵(变量中包含的信息的期望值)大于散列的结果可以容纳的 - 答案是否定的。 如果密钥的熵等于或低于散列的结果可以容纳的 - 答案是肯定的。
这意味着如果您的散列函数例如生成16位结果(65536个可能的值)并且您的128个键变量可以假定最多65536个或更少的不同值(因此128位密钥的熵是最多10位)比存在这样的散列函数。另一方面,如果您的密钥可以假设超过65535个不同的值,则无法将其散列为65535或更少的桶。
有人可以推荐一个可以执行此操作的散列函数吗?
在不知道密钥可以假设的可能值的情况下,即使您知道密钥熵太低而无法完成,也无法为您提供可以执行此操作的散列函数。