【问题标题】:Hash Table Resizing, Linear Probing and Complexity哈希表调整大小、线性探测和复杂性
【发布时间】:2013-05-07 14:11:43
【问题描述】:

我正在检查一些旧试卷,发现以下内容:

演示封闭地址哈希算法如何使用 数据集{4, 2, 12, 3, 9, 11, 7, 8, 13, 18} 作为输入示例。

假设数组的长度最初是 7。你应该演示:

我。哈希表是如何构建的,一步一步来 ii.如何搜索 哈希表可以在 O(1) 时间内完成。

现在,鉴于数组最初设置为 7,我可以使用的最大哈希函数是 n mod 7,因为要插入的元素比数组的大小要多,所以必须调整数组的大小。

我假设散列函数在调整大小后保持不变?

关于第二部分,如果许多元素哈希到相同的值,如何实现O(1)搜索?当然,我需要按顺序遍历数组中的聚集元素吗?

这个假设正确吗?

【问题讨论】:

    标签: algorithm data-structures hashtable


    【解决方案1】:

    调整哈希表大小后。你应该做一个“昂贵的”重新散列。也就是说,您必须重新散列现有密钥,为它们分配新插槽。那么你的哈希函数就是id mod newSize

    当哈希表已满时,好的实现不会重新调整大小/重新散列。有一个负载因子,当负载因子高于 0.75(或 0.8?不记得确切)时,开放寻址/线性探测方法的性能会显着下降因此,当负载因子达到限制(例如 0.75)时,调整大小/重新散列将被执行。

    散列函数花费固定时间,因此获取元素也花费固定时间。

    【讨论】:

    • 但这不是假设我可以直接访问每个元素吗?如果我使用线性探测并且有一长串具有相同哈希码的元素,这可能等同于 O(n) ?
    • 对于开放寻址,找到一个空闲槽,最坏的情况是通过哈希表。没有通过你的元素列表。
    猜你喜欢
    • 2013-03-25
    • 1970-01-01
    • 1970-01-01
    • 2022-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-30
    相关资源
    最近更新 更多