散列表学习总结

1.散列函数
  1. 定义:一个把查找表中的关键字映射成为该关键字的地址的函数,记为Hash(key)=Addr(这里的地址可以是数组下标、索引或内存地址等)
  2. 散列函数可能会将两个以上的的关键字映射到同一个地址上,称这种情况为冲突。应注意任何设计出来的散列函数都不能避免冲突
2.散列函数的构造方法
  1. 直接定址法(适用于关键字的分布基本连续的情况)
  2. 除留余数法(最简单,最常用的情况)
  3. 数字分析法(适用于已知的关键字集合,若更换了关键字,则需要重新构造散列函数)
  4. 平方取中法(适用于关键字的每位分布都不够均匀的情况)
  5. 折叠法(适用于关键字位数很多,而且每位上数字分布大致均匀时)
3.处理冲突的方法
1.开放定址法:

H i H_i Hi,表示发生冲突后第i次探测的散列地址,它的数学递推公式为 H i H_i Hi=(H(key) + d i d_i di)%m ,m表示散列表表长, d i d_i di表示增量序列。取定增量序列后,对应的处理方法就是确定的。通常有以下四种取法:

  • 线性探测法(当 d i d_i di=0,1,2,3 … \ldots m-1时)
  • 平方探测法(当 d i d_i di= 0 2 0^2 02, 1 2 1^2 12, − 1 2 -1^2 12, 2 2 2^2 22, − 2 2 -2^2 22, … \ldots , k 2 k^2 k2, − k 2 -k^2 k2时)
  • 再散列法(当 d i d_i di= H a s h 2 Hash_2 Hash2(key)时)
  • 伪随机序列法(当 d i d_i di=伪随机序列时)
2.拉链法
3.散列表的查找及性能分析
  • 散列表的查找过程与散列表的构造过程基本一致。对于一个给定的关键字key,根据散列函数就可以找出其对应的地址。
  • 散列表的查找效率取决于三个因素:散列函数、处理冲突的方法、以及装填因子。
  • 装填因子:散列表的装填因子因一般记为 α \alpha α,且 α \alpha α= 表 中 记 录 数 n 散 列 表 长 度 n \frac{表中记录数n}{散列表长度n} nn

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值