Java:哈希方法时间复杂度

时间:2018-04-04 23:54:54

标签: java hash time-complexity big-o hashtable

我无法理解哈希表的时间复杂度如何被假定为常数O(1)。我理解碰撞如何复杂性可以是O(n)但是例如我是否有哈希方法

public int hash(String key)
{
    int hashVal = 0;

    for (int i = 0; i < key.length(); i++)
        hashVal = 37 * hashVal + key.charAt(i);

    hashVal %= tableSize;

    if (hashVal < 0)
        hashVal += tableSize;

    return hashVal;
} 

假设没有冲突,时间复杂度不应该是O(n),因为哈希方法本身使用for循环到key.length()进行计算,然后需要调用此方法来添加,删除和搜索方法?

1 个答案:

答案 0 :(得分:1)

在谈论哈希表的复杂性时,n是指您将添加到哈希表中的 things 的数量。是的,您可以说(假设没有冲突)从哈希表中获取/设置项目的时间复杂度是哈希函数的时间复杂度(当然这取决于您的哈希函数)。在示例哈希函数中,您已经发布了合理的假设密钥长度的上限常数,这意味着它在实践中是O(1)。但是,如果你有可变的密钥长度,应该说它是O(k),其中k是密钥的长度。