学习笔记之散列表

学习笔记之散列表 (哈希表) 相关主题 Post not found: 学习笔记之查找 学习笔记之查找

散列技术是在记录的存储位置和关键字之前简历确定的对应关系f, 使得每个关键字key对应一个存储位置f(key).

存储位置 = f(关键字), f 称之为散列函数,有称为哈希(hash)函数

哈希函数

原则:

  • 计算简单
  • 散列地址均匀分布

直接定址 (f(key) = key ),抽取关键字的一部分来计算, 除留取余 等

设计散列函数需要考虑的因素:

  1. 计算地址所需的时间
  2. 关键字的长度
  3. 散列表的大小
  4. 关键字的分布情况
  5. 记录的查找频率

冲突 (collision)

当k1\(\ne\)k2, \(f(k1)\) == \(f(k2)\)

开放定址

发生冲突后继续寻找下一个地址

线性探测

随机探测

再散列

链地址

ldz

散列表的性能指标

  1. 散列函数是否分布均匀
  2. 处理冲突的方法: 如线性探测会导致堆积,二次探测则没有堆积问题。
  3. 装填因子: 填入表中记录个数 / 散列表的长度; 装填越大,冲突概率越大。 - 选择合适的装填因子