线性散列复杂度

时间:2011-07-18 07:32:42

标签: hash time-complexity

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

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

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

2 个答案:

答案 0 :(得分:0)

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

根据维基百科b加树有以下时间复杂性。

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

答案 1 :(得分:0)

LH实现可以保证严格限制的插入时间。 如果冲突由溢出处理,则没有理由将拆分位置和密钥哈希位置相关联。诀窍是将溢出槽的创建链接到拆分操作。

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

http://goo.gl/6dbuH代码说明,https://github.com/mischasan/hx代码。