哈希表

哈希表、散列表,是字典的一种散列表实现方式,将字符组成的字符串转换为固定长度(一般是更短长度)的数值或索引值的方法,这样在计算机中查找更快

核心

散列函数是散列表的核心,使用散列函数能够返回一个值的具体位置,因此能快速查找到值

散列函数

lose lose 散列函数

最常见的散列函数,简单的将每个键值中的每个字母的 ASCII 值相加

function loselose(key) {
    let hash = 0;
    for (let i = 0; i < key.length; i++) {
        hash += key.charCodeAt(i);
    }
    // 避免值超过最大数,将 hash 与任意一个数取余
    return hash % 37;
}

djb2 散列函数

function djb2(key) {
    // 大多数实现都用 5381
    let hash = 5381;
    for (let i = 0; i < key.length; i++) {
        // 将 hash 与 33 相乘,再加上当前字符的 ASCII 值
        hash = hash * 33 + key.charCodeAt(i);
    }
    // 与一个比散列表大小要大的随机质数取余,此处认为散列表大小为 1000
    return hash % 1013;
}

冲突处理

使用散列函数有时会产生冲突,因为不同的键产生的 hash 可能相同,常见的冲突处理方法有三种

  • 分离链接
  • 线性探查
  • 双散列法
Last Updated:
Contributors: zhangfei