【问题标题】:Why we don't use Cuckoo Hashing为什么我们不使用 Cuckoo Hashing
【发布时间】:2018-11-08 09:48:20
【问题描述】:

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

【问题讨论】:

  • 你在问为什么树映射比哈希映射更常见?如果是这样,我会说这是一个错误的前提 - 哈希映射在大多数语言/图书馆生态系统中更容易使用。或者您是在问为什么其他解析策略比 Cuckoo Hashing 更常见于哈希映射?如果是这样,维基百科关于 Cuckoo Hashing 的文章的“实践”部分可能会给出一个原因。

标签: algorithm hash


【解决方案1】:

Cuckoo hashing 需要无数个不同的独立散列函数,这与我们通常实现 generic 散列表的方式不兼容,因为它只需要指定一个散列函数。

如果您正在为特定数据类型编写哈希表实现,那么哈希函数可以内置到表实现中,而杜鹃哈希可能是合理的。

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

您可以为这种情况设计一个备用方案,但是杜鹃散列值得额外的复杂性吗?

Cuckoo 散列可能是完美散列的一个很好的替代方案,当哈希表是提前计算出来的......但如果你提前做,那么插入通常不必那么快,所以你可以使用完美而是散列。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-15
    • 2016-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-11
    相关资源
    最近更新 更多