一个完美的散列会在0(1)时间内删除并搜索吗?如果是这样的话,那为什么计算机科学家们不一直都使用完美的散列呢?如果不是的话,那么时间的复杂度又如何呢?
答案 0 :(得分:1)
一个完美的散列会在0(1)时间内删除并搜索吗?
是的,因为您只会得到一个元素的存储桶。因此,您可以获得与元素数量一样多的存储桶。
如果是这样,那么为什么计算机科学家不一直使用完美的哈希算法呢?
原因之一是理论。 完美的哈希函数具有内射性,即使不是不可能,也很难定义该函数。
考虑以下琐碎的结构:
{
int x;
int y;
}
基本上,您希望使用hash()
函数为x和y的每个可能值提供唯一的结果,这可能是不可能的。基本上,对于诸如x + y
,x * y
,x ^ y
之类的琐碎输入,您始终可以创建另一个输入,以产生相同的结果。
另一方面,有可能(如|N^2| = |N| = aleph-null
-参见Cantor pairing function。
另一个原因是实用-您的return函数必须具有返回类型。返回类型必须能够存储所有可能的注入结果-因此,对于两个32位值的散列,对于三个3 * 32等,它将需要64位。(比较上述配对函数有效地将参数相乘) / p>