计算哈希的速度有多快?

时间:2017-06-16 22:20:06

标签: hash time-complexity

是在O(1)或O(n)还是介于两者之间?计算一个非常大的对象和一个小对象的哈希是否有任何不利之处?如果重要,我正在使用Python。

3 个答案:

答案 0 :(得分:1)

一般来说,计算哈希值为O(1)对于"小"项目和O(N)为"大"项目(其中" N"表示项目密钥的大小)。小和大之间的精确分界线变化,但通常在寄存器大小附近的某处(例如,32位机器上的32位,64位机器上的64位)。这也取决于输入类型 - 例如,寄存器大小上的整数类型都是具有恒定复杂度的散列,但字符串占用的时间与字节大小成正比,直到单个字符(即两个字符)字符串大约是单个字符串时间的两倍。)

一旦你计算了哈希值,访问哈希表就会产生恒定的复杂性,但在最坏的情况下可能与O(N)一样糟糕(但这是一个不同的" N" - 表中插入的项目数,而不是单个密钥的大小。

答案 1 :(得分:1)

真正的答案取决于它。你没有指定你感兴趣的哈希函数。当我们谈论像SHA256这样的加密哈希时,复杂度就是O(n)。当我们谈论使用电话号码的最后两位数字的哈希函数时,它将是O(1)。哈希表中使用的哈希函数往往针对速度进行优化,因此更接近于O(1)。

有关哈希表的进一步参考,请参阅Time Complexity上的python wiki中的此页面。

答案 2 :(得分:0)

大多数情况下,您的哈希将在O(1)的访问中进行计算。但是,如果它是一个非常糟糕的哈希,其中每个值具有相同的哈希值,那么它将是O(n)最坏的情况。

与哈希关联的对象越多,相当于更多冲突。