Skip to main content

散列表

散列表

哈希表的关键思想是使用哈希函数将键映射到存储桶

  • 插入 key 时,根据哈希函数决定分配到哪个桶
  • 查找 key 时,根据哈希函数查找对应的桶

如下,使用哈希函数 y = x % 5 作为哈希函数的结果。x 是键值,y 是分配的桶的索引

哈希函数决定键值范围桶的数量

一个好的散列函数:

const hash = (key, tableSize) => {
let hashVal = 0;

for (let i = 0; i < key.length; i++) {
hashVal = 37 * hashVal + key.charCodeAt(i)
}

hashVal %= tableSize;

if (hashVal < 0) {
hashVal += tableSize
}
return hashVal
}

解决散列冲突的方式

  • 分离链接法
  • 不用链表
    • 线性探测法
    • 平方探测法
    • 双散列
  • 再散列
  • 布谷鸟散列
  • 跳房子散列
  • 通用散列