algorithm - 为什么我们不使用布谷鸟哈希

标签 algorithm hash

我的问题是根据我的理解,Cuckoo Hashing 通常需要 0(1) 时间来插入删除和查找。最坏的情况是 O(1)(摊销)。我的问题是为什么不更频繁地使用此算法。为什么我们要使用不同的算法来查找插入或删除的内容,而不是像 Cuckoo Hashing 这样的算法?

最佳答案

布谷鸟哈希需要无限数量的不同的独立哈希函数,这与我们通常实现通用哈希表的方式不兼容,因为它只需要指定一个哈希函数。

如果您正在为特定数据类型编写哈希表实现,则可以将哈希函数构建到表实现中,布谷鸟哈希可能是合理的。

但是,即使在那种情况下,您也可能无法证明您可以支持任何元素集,因为您的哈希函数并不是真正随机和独立的,因此布谷鸟哈希实现具有 O(1 ) 预期 插入时间,但在实际实现中可能会出现一两个情况,其中它将进入无限循环或失败。

您可以为这种情况设计后备方案,但布谷鸟哈希值得额外的复杂性吗?

布谷鸟哈希可能是完美哈希的一个很好的替代方法,当哈希表是预先计算的...但是如果你提前计算,那么插入通常不必那么快,所以你可以使用完美哈希代替。

关于algorithm - 为什么我们不使用布谷鸟哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53199889/

相关文章:

c - 如果输入高于阈值,则定期调用函数的算法。需要帮助

python - 找到具有 O(1) 空间和 O(n) 时间的重复数字

java - 在 Java 中获取一个数字的因子数量的最快方法是什么

c++ - 计算数组中总和存在的对数的算法

ruby-on-rails - 如何在 Ruby on Rails 中使用 Redis 有效地获取两个哈希值的点积

swift - 更好的方式来写这个比较

c++ - 允许碰撞的极快哈希函数

file - 如果文件长度相同,哈希冲突的可能性有多大?

php - 使用 SHA512 进行哈希处理,但仍然无法读取密码。登录后仍然无效,为什么?

python - pretty-print 到文件?