我不理解这个解释,它说如果n是哈希表中元素的数量,而m是桶的总数量,那么只有当n与theta(n)成比例时,哈希表才具有平均恒定的访问时间。为什么必须成正比呢?
我不理解这个解释,它说如果n是哈希表中元素的数量,而m是桶的总数量,那么只有当n与theta(n)成比例时,哈希表才具有平均恒定的访问时间。为什么必须成正比呢?
实际上,m 应该与 n 成比例。否则,例如,您可能只有一个桶,它就像未排序的集合一样。
更准确地说,如果 m 与 n 成比例,即 m = c * n,则每个桶中的项数将是 n/m = 1/c,这是一个常数。进入任何桶都是 O(1) 操作(只需计算哈希码),然后通过桶进行搜索是常量级别的(可以在桶中的项上执行线性搜索,这是一个常量)。
因此,如果 m = c * n,则算法的顺序为 O(1)。
举个反例,假设我们有一个固定大小的表,大小为 tableSize。那么每个桶中预期的项数是 n/tableSize,它是 n 的线性函数。对于树来说,通过桶进行任何类型的搜索最好是 O(log(n))(我假设您没有将另一个哈希表放在桶内,否则我们就需要对该哈希表进行相同的论证),因此在这种情况下它不是 O(1)。
碰撞的概率更高,因此需要扫描具有相同哈希键的项目列表的发生率也更高。
访问时间是恒定的,因为访问是基于哈希值的计算和常量查找以找到适当的桶。假设哈希函数在桶之间均匀分配项目,则访问任何单个项目所需的时间将等于访问其他项目所需的时间,而不管n的大小。
恒定并不一定意味着始终很低。平均访问时间与哈希函数的均匀分布和桶的数量有关。如果你有数千个项目均匀分布在少量的桶中,你会快速找到桶,但然后需要遍历桶中的许多项目。如果你有良好的桶与项目比例,但是一个糟糕的哈希函数使得某些桶中的项目比其他桶中的项目多得多,那么较大桶中的项目的访问时间将比其他桶中的项目慢。
n
)小于或等于桶数量(m
)时也可以。否则,我们就会面临O(1 + |k|)
的情况,其中k
是第k
个桶中的元素数量。 - David Titarencon <= m
,那么n
仍然与m
成比例,因为n = cm
,其中c <= 1
。 - Carlos Alegría