散列查找性能分析

#如何计算散列表的ASL

  • 以线性探测为例
  • Pasted image 20260607142427.png
  • Pasted image 20260607142829.png
  • 分子每项都是插入元素时的冲突次数+1,也是插入元素计算地址的次数,简单易懂
  • Pasted image 20260607143534.png
  • 分母是注意是要以散列函数的取值范围为准,而非散列表的长度,毕竟查找时没有一个关键字的初始位置会超过13(以本题为例)
  • 查找失败的可能性也就有13种,然后依此取查找失败的次数相加/13即可
  • 当删除一个元素时见解决冲突逻辑删除会导致即使删除后查找时依旧要按原来逻辑查找,而不是视作删除元素的位置为空后再进行查找,如删除20,其余元素均要求按原来的查找次数作为其分子的项,然后运算。
  • #影响散列表查找性能的因素

  • #装填因子
  • a=(表中记录数n)/(散列表长度m),反映散列表“满"的程度
  • 所以装填因子越大,越容易发生冲突,导致插入和查找操作效率低,ASL增大
  • #聚集(堆积)现象
  • 解释:处理冲突的过程中,几个初始散列地址不同的元素争夺同一个后继散列地址的现象
  • 线性探测法很易于爆发这种现象
  • 解决方法:使用其他解决冲突中开放定址的其他方法