【问题标题】:Linear hashing complexity线性哈希复杂度
【发布时间】:2011-07-18 07:32:42
【问题描述】:

我正在浏览 Wiki 上的线性哈希文章。一行让我感到困惑,这里是: " 哈希表扩展的成本分散在每个哈希表插入操作中,而不是一次全部发生。[2]"

在线性哈希的情况下,如果要插入的项目的哈希值小于拆分变量,则创建一个新节点(或桶)并将值插入其中。根据上面的行(时间复杂度是在每个“插入操作”如果与我们进行摊销分析的“动态数组”实现相比,线性散列中的插入必须花费 O(n) 时间。如果我错了,请纠正我。 还有一件事:wiki 上的第二行说“线性哈希因此非常适合交互式应用程序。”

我可以在“交互式案例”中将 B+ 树与线性散列进行比较(因为两者都是可扩展的搜索技术)吗?

【问题讨论】:

    标签: hash time-complexity


    【解决方案1】:

    据我所知,O(n) 是最差的时间复杂度,但在大多数情况下,哈希表会以 O(1) 的恒定时间返回结果。与必须遍历树哈希表的 B+ 树相反,它在哈希函数上工作,其中哈希函数的结果指向存储值的地址。在最坏的情况下,如果所有键的哈希结果相同,那么时间复杂度可能会变为 O(n),因为所有结果都将存储在一个桶中。

    根据维基百科 b plus 树具有以下时间复杂度。

    插入记录需要 O(logbn) 操作 查找记录需要 O(logbn) 次操作

    【讨论】:

      【解决方案2】:

      LH 实现可以保证严格限制插入时间。 如果冲突由溢出处理,则没有理由将拆分位置和 key-hash 位置相关联。诀窍是将溢出槽的创建与拆分操作联系起来。

      例如,如果每个第 N 个插槽始终保留为溢出插槽,那么您最多需要进行 N-1 次拆分来创建一个新的溢出插槽。实际上它少于 (N-1)/2 次拆分,因为拆分一个插槽可能会释放一个溢出插槽。

      http://goo.gl/6dbuH 用于描述,https://github.com/mischasan/hx 用于源代码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-11-19
        • 1970-01-01
        • 1970-01-01
        • 2011-04-26
        • 1970-01-01
        • 2018-09-14
        • 1970-01-01
        相关资源
        最近更新 更多