Hash 散列的复杂性

Hash 散列的复杂性,hash,time-complexity,Hash,Time Complexity,我们如何找出哈希表上搜索操作的平均时间复杂度和最坏情况时间复杂度,其实现方式如下: 假设'N'是需要散列的密钥数。我们取一个大小为M的哈希表(M=alpha*N,alpha~0.1)。通过以链式链表方式存储键,将每个新条目存储在“哈希表[i]”指向的每个链表的开头,可以解决冲突 IMHO,最佳、平均和最差情况下的复杂度可能是O(1)、O(N/M)和O(N)。如果我错了,请纠正我。请详细解释。答案取决于散列函数的特性和alpha的特定值。最坏的情况是,如果散列实现了较差的分布(对于任何alpha)

我们如何找出哈希表上搜索操作的平均时间复杂度和最坏情况时间复杂度,其实现方式如下:

假设'N'是需要散列的密钥数。我们取一个大小为M的哈希表(M=alpha*N,alpha~0.1)。通过以链式链表方式存储键,将每个新条目存储在“哈希表[i]”指向的每个链表的开头,可以解决冲突


IMHO,最佳、平均和最差情况下的复杂度可能是O(1)、O(N/M)和O(N)。如果我错了,请纠正我。请详细解释。

答案取决于散列函数的特性和alpha的特定值。最坏的情况是,如果散列实现了较差的分布(对于任何alpha),并且正如您在原始帖子中所述,是O(N)。最好的情况是当您有一个分布良好的散列并且alpha相对较大(>1.0)时,正如您所说,这就是O(1)。因此,我们同意最好的情况和最坏的情况

然而,我认为平均情况需要更多的分析,因为alpha对性能有非线性影响。考虑两个极端的例子。情况1,α=100100010000。当alpha扩展到无穷大时,将不会有可避免的冲突(即,必须截断散列以映射到M个存储桶,这与散列的非均匀行为相反),因此平均情况会收敛到最佳情况,即O(1)。案例2,α=0.01,0.001,0.0001。随着alpha变为零,散列桶越来越少,直到整个表只是一个散列桶,所有值都在该桶中的一个列表中,因此平均情况收敛到线性搜索最坏情况,或O(N)


平均情况介于O(1)和O(N)之间,具体取决于α。我们可以表示为O(N^x),其中x是一个函数,它将alpha=0映射到x=1,alpha=无穷大映射到x=0。因此,为了便于讨论,(参见),可能类似于O(N^(e^(-alpha))。

因为
N/M
alpha
并且
alpha
是一个常数,O(N/M)是O(1)。我知道,只是想明确它。