【问题标题】:Time complexity for separate chaining and open addressing in hashing散列中分离链接和开放寻址的时间复杂度
【发布时间】:2013-03-29 21:56:31
【问题描述】:

对于使用 N 个键和 M 个列表(地址)的单独链接的哈希表,其时间复杂度为:

Insert: O(1)

Search: O(N/M)

Remove: O(N/M)

我觉得上面应该是对的。

但我对分析开放寻址的时间复杂度感到不舒服。假设负载因子仍然是 N/M,有人可以阐明如何处理它的时间复杂度,也许还可以对这两种实现进行一些比较。谢谢!

编辑:我对这里的线性探测特别感兴趣。

【问题讨论】:

  • 开放寻址有许多不同的实现方式(线性探测、二次散列、双散列、罗宾汉散列等)。你指的是什么具体的实现?
  • 线性一,刚刚编辑..@templatetypedef

标签: algorithm hash


【解决方案1】:

线性探测的分析实际上明显比最初看起来要复杂得多。线性探测的“经典”分析是在(非常不切实际的)假设下工作的,即用于在表中分布元素的散列函数表现得像一个完全随机的函数。不幸的是,对于大多数散列函数来说,这确实不是一个公平的假设,因为大多数散列函数以合理的非随机方式分布元素。要选择具有您上面给出的(预期)时间界限的散列函数用于线性探测,您通常需要选择一种称为 5-wise 独立散列函数的散列函数。这个分析并不简单,但如果你好奇,你可能想看看论文"Linear Probing with Constant Independence,"。本文还对线性探测哈希表进行了分析,假设您使用的是较弱类型的哈希函数,以说明为什么上述时间限制在这种情况下不成立。

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-02
    • 1970-01-01
    • 2011-11-30
    • 2015-11-17
    • 1970-01-01
    • 2021-04-25
    • 2016-05-29
    • 2016-01-29
    相关资源
    最近更新 更多